首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» Xilinx学习笔记之五---PS2键盘接口设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Xilinx学习笔记之五---PS2键盘接口设计
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-9-11 10:57
|
只看该作者
Xilinx学习笔记之五---PS2键盘接口设计
Always
,
键盘
,
接口
PS2键盘IP核设计笔记
花了好几天时间学习PS2键盘IP核,看PS2协议,看别人写的代码,由于基础不是很好,所以中间犯了低级错误而不知道,只是不停的在编译下载,一次又一次的调试,第一次的时候,没有任何反应,然后检查代码,该各种参数,就是没有想到reset数据会有问题,
Always @(posedge clk or posedge reset)//我想要复位信号高有效。结果跳了大半天,原来这样是行不通的。还有各种小错误,都是敲代码的时候不注意,也没有仔细检查,然后就直接编译运行,结果肯定出不来正确结果,所以以后写代码的时候千万要仔细,写完代码也不要急着编译下载,先检查代码的正确性,确认无误了再编译下载,这样会大大的提高效率。
好了,废话不多说,说怎么写吧。PS2键盘驱动是比较简单的,当然(不考虑从主机向键盘发命令),只是考虑从键盘中发送数据给PC(主机),然后主机能够及时接收数据,这样就可以了。
上图所示是PS2端口的数据线定义,PS2_DATA是串行数据线,PS2_CLK是时钟信号,min = 60us,max = 100us,
下图所示为读取数据时序图,可以看出跟串行通讯很像,有个起始位,然后是8个数据位,1个奇偶校验位,一个停止位,在下降沿时读取,那么我们所做的东西就很少了,只需要找出它的下降沿,然后读取11个数据就可以了,然后将数据存储起来,比较其扫描码,然后进行转换,最终输出ASCII值。
下降沿有效信号,我是通过最普通的方法来实现的,即利用两级D寄存器,然后就可以求其下降沿。具体代码如下:
数据读写也非常简单,定义8位的缓冲器,然后按序将数据存储在缓冲区中就可以了,具体实现如下:
以下代码类似,只是在case10的时候需要,将计数器清零。那么怎么检测什么时候按键弹起呢?当弹起时,PS2键盘会向主机发送0XF0的数据,如果接收到该数据,说明了按键被弹起了,那么此时需要released信号为高,信号不会写入ascii端口。具体如下
红线所示为关键部分,当released信号为高,rx_output_strobe信号为低,rx_ascii值不变仍然为上次按键按下时的值。
来源:
jefby的博客
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议