资源描述:
《基于FPGA的标准PS-2键盘接口电路设计概要.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、引言键盘是嵌入式系统的最重要的输入设备之一,是实现人机交互的重要途径。设计者除了可以自行设计扫描式矩阵键盘之外,还可以选择标准PS/2键盘实现人机交互。扫描式矩阵键盘虽然电路简单,但不具有通用性,当需要使用较多的按键输入时,则会占用较多的I/O端口,在软件上则要进行上电复位、按键扫描及通信的处理,而且还要加上按键的去抖动处理,增大了系统软、硬件的开销,开发周期较长[1]。标准PS/2键盘由于接口通信协议简单,在系统中占用软硬件资源少,高可靠性,表达信息量大而得到了越来越广泛的应用[2]。本文根据标准PS/
2、2键盘的通信时序,用硬件描述语言VerilogHDL设计了基于FPGA的标准PS/2键盘接口,通过本设计接口,完成把键盘按键扫描码转换成字符ASCII码过程,成功实现了标准PS/2键盘到NiosII嵌入式CPU的数据单向通信。本设计具有较好的通用性和可移植性,可取代自行设计扫描式矩阵键盘而用于嵌入式系统设计中。二、标准PS/2键盘物理接口的定义及其连接图1为标准PS/2键盘mini-DIN连接器,标准PS/2键盘是通此连接器与外设相连接,其中,第1脚为Data(数据,第5脚为Clock(时钟,第3脚接地,第4
3、脚接电源(5伏,第2与6脚保留。因标准PS/2键盘输出脚是采用集电极开路设计,因此,标准PS/2键盘与接口相连时,输出要接一个上拉电阻方可使用,如图2所示。脚1Data脚2保留脚3接地脚4接电源脚5Clock脚6保留图1标准PS/2键盘mini-DIN连接器图2标准PS/2键盘与接口的连接三、标准PS/2键盘数据输出通信协议[3]图3为标准PS/2键盘数据输出短帧格式,当PS/2键盘要发数据时,首先要检查Clock时钟脚的电压情况,如电压为低电平,则表示主机抑制了通信,如电压为高电平,PS/2键盘获得发送数据
4、的控制权。首先发送短帧数据格式的起始位(低电平,然后才发送数据(低位先发送,跟着发送奇校验位,最后才发送帧数据格式的停止位。当时钟为高电平时,改变数据,在时钟的下降沿时,PS/2键盘把数据锁存在Data数据线上。图3标准PS/2键盘数据输出短帧格式南宁师范高等专科学校学报2009年第3期JOURNALOFNANNINGTEACHERSCOLLEGE第26卷(总第66期基金项目:广西壮族自治区教育厅科研项目,项目编号:LX382。收稿日期:2009-05-10作者简介:杨秀增(1975-,男,湖南怀化人,广西民
5、族师范学院物信系讲师,主要研究方向为嵌入式系统设计与应用;黎运宇(1974-,男,湖南张家界人,广西民族师范学院物信系助教,主要研究方向为机械电子。基于FPGA的标准PS/2键盘接口电路设计杨秀增,黎运宇(广西民族师范学院物理与信息技术系,广西龙州摘要:键盘是嵌入式系统的重要的输入设备,是实现人机交互的重要的手段之一,随着标准PS/2键盘技术成熟和价格不断下降,在嵌入系统的设计中,用标准PS/2键盘取代自制简易的扫描式矩阵式键盘成为可能。关键词:PS/2键盘;FPGA;VerilogHDL中图分类号:IP33
6、1.1文献标识码:A文章编号:1008-696X(-0129-03129··四、标准PS/2键盘扫描码现阶段的标准PS/2键盘是以第二套扫描码向外设传送信息的,扫描码有通码与断码两种类型。当键盘被按下或连续被按下时,键盘被接通,此时键盘发送通码或连续发送通码;当松开键盘的按键时,才发送断码。根据键盘按键扫描码的不同,在此可将按键分为如下几类:[4]第一类按键:通码为1字节,断码为0xF0+通码形式。如A键,其通码为0x1C,断码为0xF00x1C。第二类按键:通码为2字节0xE0+0xXX形式,断码为0xE0
7、+0xF0+0xXX形式。如rightctrl键,其通码为0xE00x14,断码为0xE00xF00x14。第三类特殊按键有两个,printscreen键通码为0xE00x120xE00x7C,断码为0xE00xF00x7C0xE00xF00x12;pause键通码为0xE10x140x770xE10xF00x140xF00x77,断码为空。本文只利用了标准PS/2键盘的第一类按键扫描码,并且只利用了扫描码的断码。五、标准PS/2键盘接口电路的FPGA实现利用硬件描述语言,对标准PS/2键盘数据输出短帧时序进
8、行描述,其VerilogHDL语言源代码如下:modulekeyb_module(iclk0,//输入时钟iclk,//键盘Clockidata,///键盘odata,//ASCII码数据req,//握手信号输出reset//握手信号复位输入;inputiclk,iclk0,idata;reset;outputregreq;outputreg[7∶0]odata;reg[3∶0]state;reg[