我们每敲击一次电脑键盘,按键对应的字符就会出现在显示器上。这中间发生了什么?请听我慢慢细说。
相关概念
人对按键的操作,从两个维度去描述,一个是“动作”,另一个是“内容”。
按下一个按键,松开一个按键,按下一个按键并且保持按住状态一段时间(长按),这些都是动作。
每个按键和动作组合起来,会传送给计算机一个编码,这就是内容,术语是“扫描码”,对应的英语词汇是scan code。
按下按键、长按键对应的扫描码叫“Make Code”,松开按键对应的扫描码叫“Break Code”。
Break Code和Make Code的关系是:Break Code = Make Code & 0x80。
为什么两种编码之间有上面的关系?设计人员特意这样设计的。
三个硬件
8048
在键盘上执行某种操作(按键、长按、松开键)时,8048会检测到这个操作,把这个操作对应的扫描码发送给8042。
到现在为止,出现了三套编码方案,我们现在的键盘一般使用第2套方案。
8042
8042从8048接收到第2套方案的扫描码后,把它转换成第1套扫描码,并且放入缓冲区,最后,通知8259A发生了键盘中断。
中断例程取走缓冲区的数据后,8042才会接收新的数据。缓冲区的数据不被取走,8042就不会接收新数据。
8259A
8259A接收来自8042的键盘中断,让操作系统分派中断例程处理缓冲区的数据。
流程
人类敲击键盘,8048监测到”敲击了哪个键“,把对应的扫描码传送给8042。