分类: LINUX
2012-04-10 19:58:18
键盘控制器:
我们使用的键盘是AT-PS/2兼容键盘,具有101-104个按键。
键盘上有一个键盘编码器的处理器(Intel 8048)专门扫描收集所有按键按下和松开的状态信息(扫描 码),并发送到主机主板上键盘控制器中。按下键时,发送接通扫描码(Make Code,接通码),松开键时,发送断开扫描码(Break Code,断开码)。
主机键盘控制器对接收到的扫描码解码,把解码后的数据发送到操作系统的键盘数据队列中。
整个键盘所有按键的接通和断开码组成键盘的一个扫描码集(Scan Code Set)。
目前有三种扫描码集:
1、原始XT键盘扫描码集。目前键盘很少发送。
2、现代键盘默认使用的扫描码集,称为AT键盘扫描码集。
3、PS/2扫描码集。IBM推出PS/2微机时使用的,目前很少使用。
为了兼容性,第二套会转换为第一套。
键盘控制器一般采用Intel 8042单片微处理器芯片或兼容电路。现在PC已经将键盘控制器集成到主板芯片组中。
键盘控制器接收键盘发送来的11位串行数据格式数据:
第1位为起始位;
第2--9位是8位键盘扫描码;
第10位为奇校验校验位;
第11位是停止位。
键盘控制器在收到11位串行数据后将键盘扫描码转换成PC/XT标准键盘兼容的系统扫描码,然后通过中断控制器IRQ1引脚向CPU发送中断请求,当CPU响应中断请求后,就会调用键盘中断处理程序来读取控制器中的XT扫描码。
对于XT键盘(即编程控制器端口收到的扫描码),断开码是其接通码加上0x80。即最高有效位(位7)置位时的接通码。
但是对于AT键盘按键,如右边的Ctrl、右边的Alt,则其断开和接通码通常有2到4个字节,并且第一个字节一定是0xE0。如按下左边非扩展Ctrl键会产生1字节接通码0x1D,而按下右边的Ctrl键会产生扩展2字节接通码0xE0、0x1D。
对应断开码为0xE0、0x9D。
另外,键盘控制器的输出端口P2用于其他目的。
P20引脚用于实现CPU复位操作;
P21引脚用于控制A20信号开启与否;为1时选通A20信号线,为0时禁止A20信号线。
现在主板不再包含独立的8042芯片,但是其他集成电路会为了兼容而模拟8042的功能。
串行控制卡:
1、异步串行通信原理:
通信协议规定了传送一个有效数据长度单位的格式。使用“帧”来形容这种格式。
在传输的一帧信息中还包含起同步和错误检测作用的其他信息。
串行通信是指在线路上以比特位数据流一次一个比特进行传输的通信方式。
可分为异步和同步串行通信。它们主要区别是传输时同步的通信单位或帧的长度不同。
异步串行通信:以一个字符作为一个通信单位或一帧进行传输。
同步串行通信:以多个字符或字节组成的序列作为一帧数据进行传输。
2、异步串行传输格式:
传输一个字符由起始位、数据位、奇偶校验位和停止位构成。
起始位起同步作用,恒为0。
数据位是传输的实际数据,即一个字符的代码。长度可以是5--8个比特。
奇偶检验位可有可无,由程序设定。
停止位恒为1,可由程序设定为1、1.5或2个比特位。
在通信开始发送信息之前,双方必须设置成相同格式。
在异步通信规范中,把传送1称为传号(MARK),传送0称为空号(SPACE)。
无数据传输时,双方都处于传号状态,持续发送1。
在接收一个字符帧时,接收方可能遇到三个错误:
1) 奇偶校验错误。此时程序要求对方重新发送字符。
2) 过速错误。由于程序取字符速度慢于接收速度。应修改程序加快取字符频率。
3) 帧格式错误。在要求接收的格式信息不正确的时候。可能是由于线路干扰,或帧格式设置的不同。
3、串行控制器:
PC上通常有2个符合RS-232C标准的串行接口,并使用通用异步接收/发送器控制芯片UART组成的串行控制器来处理串行数据的收发工作。
当PC机上电后,系统RESET信号通过NS8250的MR引脚使得UART内部寄存器和控制逻辑复位。此后若要使用UART,就需要对其进行初始化编程操作,以设置UART的工作频率、数据位数和工作方式等。
显示控制:
IBM最早推出的PC机视频系统标准有单色MDA标准、彩色CGA标准、EGA、VGA等。
Linux 0.1x仅使用了这几种标准都支持的文本显示方式。
1、MDA显示标准:
单色显示适配器MDA(Monochrome Display Adapter)仅支持黑白两色的显示,并且只支持独有的文本字符显示方式(BIOS显示方式7)。
屏幕显示规格80列*25行(列号x=0..79,行号y=0..24),共可显示2000个字符。
每个字符还带有1个属性字节,因此显示一屏(一帧)内容需要占4KB字节。
其中偶地址字节存放字符代码,奇地址字节存放显示属性。
MDA卡配有8KB显示内存,在PC机内存寻址范围中占用从0xb0000开始的8KB空间(0xb0000---0xb2000)。
如果显示屏行数video_num_lines = 25,列数video_num_columns = 80,那么位于屏幕列行值x、y处的字符和属性在内存中的位置是
字符字节位置=0xb0000+video_num*columns*2*y+x*2。
属性字节位置=字符字节位置+1。
属性字节D7置1会使字符闪烁,D3置1使字符高亮度显示。
2、CGA显示标准:
彩色图形适配器CGA(Color Graphics Adapter)支持7种彩色和图形显示方式(BIOS显示方式0--6)。
在80列25行的文本字符显示方式下,有单色和16色彩色两种显示方式(BIOS显示方式2--3)。
CGA卡标配有16KB显示内存(地址范围0xb8000----0xbc000),因此其中可以存放4帧显示信息。
同样,每一帧4KB显示内存中,偶地址字节存放字符代码,奇地址字节存放字符属性。
但在console.c程序中只使用了其中8KB内存(0xb8000---0xba000)。
与单色显示D7相同。而D6、D5、D4和D2、D1、D0可以分别组合出8种颜色,前景色和高亮度比特位组合可以显示另外八种颜色。
3、EGA/VGA显示标准:
增强型图形适配器EGA(Enhanced Graphics Adapter)和视频图形阵列VGA(Video Graphics Adapter)除兼容或支持MDA和CGA显示方式以外,还支持其他在图形方面的增强显示方式。
标配有32KB显示内存,在图形方式下占用从0xa0000开始的物理内存地址空间。
软盘和硬盘控制器:
为了读写磁盘上的数据,就必须使用磁盘控制器。
它是CPU和驱动器之间的逻辑接口电路。从CPU接收请求指令,向驱动器发送寻道、读/写和控制信号,并且控制和转换数据流形式。
控制器和驱动器之间的传输的数据包括扇区地址信息以及定时和时钟信息。
控制器必须从实际读/写数据中分离出这些地址信息和一些编码、解码等控制信息。
另外,与控制器之间的数据传输是串行比特数据流,所以控制器需要在并行字节数据和串行比特数据流之间进行转换。
对磁盘控制器的编程过程就是通过I/O端口设置控制器中的相关寄存器内容,并通过寄存器获取操作的结果信息。
软盘控制器电路采用DMA信号。因此需要使用DMA控制器实施数据传输。
而AT硬盘控制器采用高速数据块进行传输,不需要DMA控制器的介入。