数字逻辑部分的最后一篇博客。当初是为了做课设,需要用到外接键盘,但是只有一块4*4的键盘。无奈只能想到连USB接口的外接键盘。然后在网上搜了很多,找到了一篇PS/2协议外接键盘的微博。在那篇微博的基础上完成了课设。
进入正题,因为BASYS3开发板有一个USB接口,而目前大部分外接键盘也都是使用的USB接口。使用PS/2的设备好像不常见了,但是市面上的键盘都兼容PS/2标准。附一张PS/2接口的图片,图源:百度百科。
然后学过微机或者单片机的同学知道,CPU和外部I/O之间的通信方式有同步和异步两种。PS/2是采用同步方式的,一个数据帧是11-12位(取决于谁是发送主方)。因为本片博客是PS/2的键盘,所以是主机是接收方,数据帧是11位的。
参考:PS/2百度百科
从PS/2向PC机发送一个字节可按照下面的步骤进行:
(1)检测时钟线电平,如果时钟线为低,则延时50μs;
(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);
(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);
(4)延时20μs(如果此时正在发送起始位,则应延时40μs);
(5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;
(6)输出8个数据位到数据线上;
(7)输出校验位;
(8)输出停止位(1);
(9)延时30μs(如果