




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BIOS Team / Carol 2012/05/08,PS/2 Keyboard introduction,内容索引,1 键盘概述 2 键盘的工作原理 3 KBC8042介绍 4 BDA与键盘中断,3.1 8042概述 3.2 8042的寄存器 3.3 60h/64h端口 3.4 8042的工作原理 3.5 命令集 3.6 编程实例,3 KBC8042的介绍,返回主页,3.1 8042概述,返回本节,3.1.1 键盘控制器,在IBM AT和IBM PS/2键盘系统中,CPU并不直接和Keyboard进行通信,而是通过键盘控制器实现过渡。 最初IBM 使用Intel 的8042 微控制器作为它的键盘控制器现在已经被兼容设备取代并整合到主板的南桥或SIO中。 它控制整个键盘的工作,包括加电自检、键盘扫描码的缓冲以及与主板的通讯等。,3.1 8042概述,返回本节,3.1.2 原理简图,按键的处理需要CPU、中断和8042的协调工作完成。CPU可通过8042向8048发键盘命令,另外,CPU也可直接发命令给8042,以使用8042芯片自身所提供的功能。,3.1 8042概述,返回本节,3.1.3 接口图,3.1 8042概述,返回本节,3.1.4 芯片接口,8042有三个port: Input Port P1,Output Port P2,Test Port T。 System Reset和A20 Gate是两个与键盘无关的重要的控制位。 GateA20:决定CPU是否可以访问以MB为单位的偶数内存。 0:CPU工作于DOS的实模式; 1:CPU可进入保护模式; KRST*:向系统发送Reset信号,可让主机重新启动。 0:normal; 1:reset computer;,3.1 8042概述,返回本节,3.1.4 8042功能,(1)接收键盘输出的键盘扫描码 (2)对键盘数据进行正确性检查 (3)缓冲器满产生键盘中断 (4)供中断程序读取系统扫描码,(5)向键盘传送命令,等待键盘响应 (6)控制键盘鼠标的开关 (7)控制系统复位动作 (8)选通地址线A20,3.2 8042的寄存器,返回本节,Output Buffer:输出缓存,read-only Input Buffer:输入缓存,write-only Status Register:状态寄存器,read-only Control Register:控制寄存器,read/write 前三个寄存器可通过60h和64h端口直接用in/out指令读/写; 最后的控制寄存器要使用20h/60h命令实现读写。,3.2.1 四个寄存器,3.2 8042的寄存器,返回本节,3.2.2 缓存,Output Buffer:1个字节,只读,与 in 指令配合使用。 它的值有以下几种情况: 来自8048:scan code,命令响应,命令返回值。 来自8042:命令返回值。 Input Buffer :1个字节,只写,与 out 指令配合使用。 它的值有以下几种情况: 送往8048:命令,命令跟随值。 送往8042:命令,命令跟随值。,3.2 8042的寄存器,返回本节,3.2.3 状态寄存器,Status Registar: 8个状态标志位,只读,包含了错误信息、状态信息和输入输出缓存信息等。Flag定义如下:,Bit7:奇校验位 0:正常; 1:错误;,Bit6:kbd接收/回应超时 0:正常; 1:超时;,PS/2兼容:,Bit5:写鼠标缓存满 0:缓存空; 1:缓存满;,3.2 8042的寄存器,返回本节,3.2.3 状态寄存器,Status Registar: 8个状态标志位,只读,包含了错误信息、状态信息和输入输出缓存信息等。Flag定义如下:,PS/2兼容:,Bit4:禁止键盘通信 0:键盘被禁止(Clock=0); 1:正常通信(Clock=1);,Bit3:指示最后写入端口 0:60h端口; 1:64h端口;,3.2 8042的寄存器,返回本节,3.2.3 状态寄存器,Status Registar: 8个状态标志位,只读,包含了错误信息、状态信息和输入输出缓存信息等。Flag定义如下:,PS/2兼容:,Bit2:系统重启标志 0:上电重启(冷启); 1:软件重启(热启);,Bit1:输入缓存满 0:缓存空; 1:缓存满;,Bit0:输出缓存满 0:缓存空; 1:缓存满;,3.2 8042的寄存器,返回本节,3.2.4 控制寄存器,Control Registar:即command byte,可读可写, 6个控制标志位,包含了系统信息、键盘信息和鼠标信息等。Flag定义如下:,PS/2兼容:,Bit6:转化扫描码为set 1 0:禁止换码; 1:开启换码;,Bit5:鼠标 0:可用; 1:禁用;,Bit4:键盘 0:可用; 1:禁用;,3.2 8042的寄存器,返回本节,3.2.4 控制寄存器,Control Registar:即command byte,可读可写, 6个控制标志位,包含了系统信息、键盘信息和鼠标信息等。Flag定义如下:,PS/2兼容:,Bit2:系统标志位 0:冷启动; 1:热启动;,Bit1:鼠标中断IRQ12 0:禁用; 1:使能;,Bit0:键盘中断IRQ1 0:禁用; 1:使能;,3.3 60h/64h端口,返回本节,3.3.1 64h端口读操作,in al, 64h 此指令被执行后,寄存器 AL Status Register的值。 Note: 读64h端口的操作,因读/写buffer时,往往需要查询它们的状态,故此指令使用很频繁。,3.3 60h/64h端口,返回本节,3.3.2 64h端口写操作,out 64h, al 此指令被执行后,Input Buffer 寄存器 AL的值。 Note: 写64h端口的操作,被视为往8042发命令,那么AL中存放的是8042 命令。,3.3 60h/64h端口,返回本节,3.3.3 60h端口读操作,in al, 60h 此指令被执行后,寄存器 AL Output Buffer的值。 Note: 读60h端口的操作后,AL的值有4种情况,即: 1、系统扫描码,键盘有按键事件发生。 2、8048的命令响应,CPU向键盘发命令后,键盘会发出响应,告诉CPU命令是否被成功接收。 3、8048的命令返回值,键盘执行某些键盘命令后,会有返回值供CPU读取。 4、8042的命令返回值,键盘控制器执行某些键盘命令后,会有返回值供CPU读取。,3.3 60h/64h端口,返回本节,3.3.4 60h端口写操作,out 60h, al 此指令被执行后,Input Buffer 寄存器 AL的值。 Note: 写60h端口的操作,AL的值有3种情况: 1、8042的命令跟随值,前提是之前写64h端口的命令需要进一步的数据输入。 2、8048的命令或命令跟随值,不满足1前提的所有情况。 8048命令与8042命令的最大区别就是前者写入60h端口,后者写入64h端口。,3.3 60h/64h端口,返回本节,3.3.5 读写注意事项,Note: 写60h和64h端口的操作前,判断status register的IBF(bit1)是否为0,确保Input Buffer中无数据。 读60h端口的操作前,判断status register的OBF(bit0)是否为1,确保Output Buffer中有数据。 读64h端口的操作,即读取status register,可随时使用。,3.4 8042的工作原理,返回本节,3.4.1 工作原理图,3.4 8042的工作原理,返回本节,3.4.2 读键盘输入,1、转换扫描码 当8042从键盘收到有效的键盘扫描码后,就把它转换成第一套扫描码,称为系统扫描码。系统扫描码放到输入缓存,OBF标志被置起。 2、发出中断IRQ1 OBF被置起后产生IRQ1中断请求。同时,8042把时钟线拉低,禁止键盘通信。如果中断被允许,IRQ1将激活INT 09,调用中断服务程序。 3、传送扫描码 INT 09服务程序从60h端口读取系统扫描码。8042将扫描码送出后,会释放IRQ1并清OBF标志。同时,恢复键盘通信。,3.4 8042的工作原理,返回本节,3.4.2 往键盘写数据,1、写输入缓存 CPU通过60h端口写入数据到8042,8042把IBF标志位置起,并处理数据为串行通信做准备。 2、发送数据 8042把处理好的数据发给键盘,并等待回应。 3、读取响应 如果键盘没有接收或指定时间内未响应,那么超时标志被置起。如果键盘继续回复错误字节,那么校验错标志被置起。如果没有错误发送,响应字节会放到输出缓存,再按照读键盘输入步骤操作。,3.5 命令集,返回本节,3.5.1 命令介绍,KBC Command set:包括8042 command,8048 command。 8042 command:由8042执行,命令写往64h端口。 例如:发送命令0xAD禁用键盘 mov al , 0ADh Out 64h , al 8048 command:由8048执行,命令写往60h端口。 例如:发送命令0xED设置键盘灯 mov al , 0EDh Out 60h , al,3.5 命令集,返回本节,3.5.2 8042 command,3.5 命令集,返回本节,3.5.3 8048 command,3.5 命令集,返回本节,3.5.4 8048 command返回值,3.6 编程实例,返回本节,3.6.1 编程经验,1、对于8042命令,KBC的读写速度很快,几乎不用延时就已经执行完毕。例如0xFE系统重启命令,命令一发出,系统立马重启。 2、对于8048命令,KBC的读写速度相对较慢,必须加延时,等待keyboard接收完命令后响应,应答FAh,不应答FEh。如有返回值,应再加延时后,继续接收。 3、keyboard的大部分命令都先返回FAh,再有相应的返回值。如0xF2读取键盘ID的命令,返回值顺序是:FAh , ABh , 41h 。0xEE诊断命令例外,只返回EEh。 4、8042的output buffer满,OBF置1,in 60h读值,OBF置0;在下一个OBF置1前,in 60h读到的值仍是上次output buffer满的值。,1、程序流程:,返回本节,3.6.2 模拟按键0xD2,3.6 编程实例,2、注意事项: 从60h端口送入的按键扫描码应该是scan code set 1; 发送D2命令前注意确保键盘中断IRQ1是开启状态。,返回本节,3.6.2 模拟按键0xD2,3、编程: ;Name: WrKbdObf ;Detail: Write keyboard output buffer, act as if this was keyboard data. ;Command: D2h ;Inputs: al= input scan code ;Output: n/a ;Modify: AL,3.6 编程实例,WrKbdObf PROC public ; save scan code mov ah , al ; wait buffer empty : in al , 64h test al , 03h jnz b ;input D2 command mov al , 0d2h out 64h , al : ; wait input buffer empty,in al , 64h test al , 02h jnz b ;get scan code,and input scan code mov al , ah out 60h , al ;wait Input buffer empty : in al , 64h test al , 02h jnz b ret WrKbdObf ENDP,返回本节,3.6.2 模拟按键0xD2,3.6 编程实例,返回本节,3.6.3 点亮num lock灯0xED,1、程序流程:,3.6 编程实例,返回本节,3.6.3 点亮键盘灯0xED,2、注意事项: 发键盘命令前关闭键盘中断,以防键盘返回值被中断服务程序读走 BIOS Data Area(BDA)定义了键盘 缓冲区,在基地址为0400h ,偏移量为17h处,是键盘状态字,低字节如下: B7=1 Insert active B6=1 CapsLock active B5=1 NumLock active B4=1 ScrlLock active B3=1 Alt Key is pressed B2=1 Ctrl Key is pressed B1=1 Left Shift Key is pressed B0=1 Right Shift Key is pressed,3、编程: ;Name: WrNumL ;Detail: keyboard Num Lock on ; set value-bit1=1 ;Command: EDh ;Inputs: BDA 0000:0417h value ;Output: ZF = 1-successed ; 0-failed ;Modify: AX,DI, flag ; BDA 0000:0417h value,3.6 编程实例,返回本节,3.6.3 点亮键盘灯0xED,WrNumL PROC public ;get led value push ds xor ax , ax mov ds , ax mov di , 417h mov al , byte ptr di pop ds ;save led setting and al , 70h shr al , 4 mov ah , al : ;wait buffer empty in al , 64h test al , 03h jnz b cli ;interrupt enabled mov al , 0edh,out 60h , al : ;wait keyboard ack,if not FAh, exit in al , 64h test al , 01h jnz b in al , 60h cmp al , 0fah jnz exitWr mov al , ah out 60h , al : ;wait keyboard ack in al , 64h test al , 01h jnz b in al , 60h cmp al , 0fah exitWr: ret WrNumL ENDP,3.6 编程实例,4.1 BIOS键盘缓冲区 4.2 键盘中断的处理 4.3 BIOS键盘服务INT16H 4.4 DOS键盘中断INT21H,4 BDA与键盘中断,返回主页,返回本节,4.1.1 键盘缓冲区的作用,4.1 BIOS键盘缓冲区,BIOS在内存低端的BIOS数据存储区开设一个键盘缓冲区,其作用如下: (1)可以满足键盘实时输入要求。 (2)适应随机访问的应用要求。 (3)能容纳快速键盘输入要求。,4.1.2 键盘缓冲区地址,4.1 BIOS键盘缓冲区,0000:0417H 1字 键盘状态字 0000:041AH 1字 指向键盘缓冲区的头 0000:041CH 1字 指向键盘缓冲区的尾 0000:041EH16字 键盘缓冲区 0000:0471H 1字 break标志,组合键Break被按 下时,其值被置为80H 0000:0480H 1字 键盘缓冲区的起始地址 0000:0482H 1字 键盘缓冲区的末尾地址 0000:0496H 1字 键盘状态和类型,返回本节,可参见TEB-M7064的kbcdefs.inc的BIOS DATA AREA SEGMENT,4.1.3 键盘状态字,4.1 BIOS键盘缓冲区,返回本节,4.1.3 键盘缓冲区,4.1 BIOS键盘缓冲区,键盘缓冲区是一个先进先出的环形队列,0000:041Eh 0000:043Eh,16个字。,返回本节,4.2.1 按键中断过程,4.2 键盘中断的处理,用户按键,由8042发出IRQ1中断,BIOS调用INT 09中断服务程序。INT 09先从8042取得系统扫描码,然后根据扫描码值判断用户按键并作相应处理,最后通知中断控制器8259本次中断结束并实现中断返回。,返回本节,4.2.2 INT 09按键处理,4.2 键盘中断的处理,若用户按下双态键(如:Caps Lock、Num Lock和Scroll Lock等),则在键盘上和BDA上相应LED指示灯的状态将发生改变; 若用户按下控制键(如:Ctrl、Alt和Shift等),则在BDA上相应的键盘标志位将发生改变; 若用户按下功能键(如:F1、F2、等),再根据当前是否又按下控制键来确定其软件扫描码,并得到该按键所对应的ASCII码; 若用户按下字符键(如:A、1、+、等),再根据当前是否又按下控制键来确定其软件扫描码,并得到该按键所对应的ASCII码; 若用户按下功能请求键(如:Print Screen等),则系统直接产生一个具体的动作。,返回本节,4.2.3 INT 09的功能,4.2 键盘中断的处理,对某些键或键的组合定义为单字节的ASCII码和扫描码,供系统中断INT 16H使用。 对某些键仅设置变量,反映其被按下或释放的状态。 对某些键或键的组合产生特殊操作。,返回本节,中断服务程序可参考TEB-M7064的Kbcint09.asm的kbcKeyboardInterruptFar PROC,4.3.1 INT 16H的功能,4.3 BIOS键盘服务INT16H,00H、10H 从键盘读入字符 03H 设置重复率 01H、11H 读取键盘状态 04H 设置键盘点击 02H、12H 读取键盘标志 05H 字符及其扫描码进栈 BIOS中断方便程序员不必了解硬件I/O接口的特性,可直接用INT指令参数,读取键盘按键信息。,返回本节,中断服务程序可参考TEB-M7064的Kbcint16.asm的kbcKeySystemServicesFar PROC,4.4.1 INT 21H的功能,4.4 DOS键盘中断INT21H,DOS是PC机上最重要的操作系统,它和BIOS一样包括有近百个设备管理、目录管理和文件管理程序,是一个功能齐全、使用方便的中断例行程序的集合。使用DOS操作比使用相应功能的BIOS操作更简易,而且对硬件的依赖性更少些。对一般的键盘操作,我们也可以使用INT 21H中断提供的键盘功能调用。,01H 从键盘输入一个字符并回显在屏幕上 06H 读键盘字符 07H 从键盘输入一个字符,不回显 08H 从键盘输入一个字符,不回显,检测Ctrl_Break组合键 0AH 输入字符到缓冲区 0BH 读键盘状态 0CH 清键盘缓冲区,并调用一种键盘功能,返回本节,返回主页,结 束放映,The end!,Any question?,参考链接: puter-engi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人合伙协议书
- 2025年事业单位工勤技能-湖南-湖南工程测量员五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖南-湖南地图绘制员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北公路养护工五级(初级工)历年参考题库典型考点含答案解析
- 2025-2030中国糕点轮切割器行业应用规模及发展趋势预判报告
- 2025年事业单位工勤技能-河南-河南放射技术员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北殡葬服务工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西无损探伤工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西机械冷加工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东理疗技术员三级(高级工)历年参考题库含答案解析
- GB/T 30776-2014胶粘带拉伸强度与断裂伸长率的试验方法
- 大金压缩机技术指南手册
- GB/T 1229-2006钢结构用高强度大六角螺母
- 初中现代文精品阅读10篇
- 有创血压测量操作评分标准
- 架桥机事故案例警示-课件
- 茶文化与茶疗课件
- 班组长执行力管理培训
- 家谱图和家庭治疗课件
- 外研版六年级上册英语 Module 2 单元测试卷(含听力音频)
- 2022年北京市中考地理试题及参考答案
评论
0/150
提交评论