进阶项目(12)PS2键盘驱动程序设计讲解

本文详细介绍了PS2键盘接口驱动的设计,包括项目需求、原理分析、系统架构和代码实现。通过分析时序图和实际操作,展示了当按键被按下和释放时,键盘向系统发送的数据流程。同时,提供了模块功能介绍、代码解释和仿真测试,帮助理解PS2键盘接口的工作原理。
摘要由CSDN通过智能技术生成

写在前面的话

我们从小就开始接触电脑,曾经多么羡慕那些在键盘上洋洋洒洒的人,手指轻柔的飞舞刻画出一章章美丽的篇幅那么作为工程师的我们同样拥有着属于我们的情怀。如果曾经的向往变成我们喜欢的玩具;如果曾经的神秘变成我们夜以继日的痴迷。那么,一切又将如何?梦翼师兄携手大家一起来欣赏、来品味。

项目需求

设计一个ps2键盘的接口驱动电路。

原理分析

ps2的接口如下图所示:

其中,1是数据线DATA;

2是预留N/C;

3是GND;

4是VCC(+5V);

5是时钟信号线CLK;

6是预留N/C;

数据传输的时序图如下图所示:

 

一般的ps2接口,都是ps2产生时钟信号,而且是在上升沿的时候把数据发送出去,而在下降沿的时候数据被采样,大多数的ps2设备发送数据的时钟频率是15Khz-20Khz。每一帧的数据有11位或者12位数据,其中包括:

1位起始位:总为逻辑0;

8位数据位:低位在前;

1位奇偶校验位;

1位停止位:总为逻辑1;

1位答应位:仅用于主机对设备通信中(在本次键盘接口设计中不用)

当键盘的某一个按键被按下的时候,键盘会向外发送那一个按键的通码,当按键松开的时候,键盘就会向外发送那一个按键的断码,需要注意的是,如果按着一个按键不放的话,键盘会以一定的频率发送那一个按键的通码。

右侧小键盘的0-9的通码与断码如下图所示:

 

 

现在我们具体举一个例子来说明ps2接口的工作原理,假设我现在按下小键盘中的0键,再按下按键9,然后把按键0松开,最后再松开按键9,ps2往FPGA发送的数据就会如下,先发0按键的通码8h70,再发9按键的通码8h7d,接着发0按键的断码8hf0 8h70,接着再发9按键的断码8hf0 8h7d,发送数据的顺序如下: 8h70→8h7d→8hf0→8h70→8hf0→8h7d

系统架构

ps2_data_out信号有效的时候,valid会拉高一个周期(valid可用于同其他级联模块的握手)。

 

 

 

 

模块功能介绍

模块名

功能描述

ps2_scan

将ps2接口传输过来数据转成通码或者断码

顶层模块端口描述

端口名

端口说明

clk

系统时钟输入

rst_n

系统复位

Ps2_clk

时钟信号线

Ps2_data_in

数据线

valid

通、断码有效信号(高电平有效)

Ps2_data_out

通、断码信号

 用signaltap ii 分析波形

打开signaltap ii ,将采样时钟设置为clk,采样深度为64Kps2_clkps2_data_in两个输入信号引出来,并将ps2_clk的的触发条件改为下降沿(我们是在ps2_clk为下降沿的时候采集数据),之后进行全编译,并将编译好的sof文件下载到开发板中。

按下数字键“1”(数字小键盘),波形图上出现如下波形:

ps2_clk每个下降沿,我们进行读数据,分别是:“01001011011”。第一位是起始位“0”,后面连续的8位是低位在前的有效数据:“10010110”,改成高位在前就是“01101001”,也就是我们的8‘h69(1的通码就是8’h69)。第十位“1”为奇偶校验位,第十一位“1”是停止位,这两位不需要我们关心。

放开按键“1”,出现了如下的波形:

 

ps2_clk每个下降沿,我们进行读数据,分别是:“00000111111”。第一位是起始位“0”,后面连续的8位是低位在前的有效数据:“00001111”,改成高位在前就是“11110000”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值