【黑金原创教程】【FPGA那些事儿 您所在的位置:网站首页 ps2鼠标从s3s4s5唤醒 【黑金原创教程】【FPGA那些事儿

【黑金原创教程】【FPGA那些事儿

2023-08-13 23:32| 来源: 网络整理| 查看: 265

实验十:PS/2模块④ — 普通鼠标

学习PS/2键盘以后,接下来就要学习 PS/2 鼠标。PS/2鼠标相较PS/2键盘,驱动难度稍微高了一点点,因为FPGA(从机)不仅仅是从PS/2鼠标哪里读取数据,FPGA还要往鼠标里写数据 ... 反之,FPGA只要对PS/2键盘读取数据即可。然而,最伤脑筋的地方就在于PS/2传输协议有奇怪的写时序。

图10.1 从机视角,从机读数据。

为了方便理解,余下我们经由从机的视角去观察PS/2的读写时序。图10.1是从机视角的读时序,从机都是皆由 PS2_CLK的下降沿读取1帧为11位的数据 ... 期间,有11个下降沿,不过为了方便调用,笔者将其整理为伪函数,结果如代码10.1所示:

1. 32: // Start bit 2. if( isH2L ) i U2 31. ); 32. 33. // immediate proses 34. wire[7:0] X = DataU2[4] ? (~DataU2[15:8] + 1'b1) : DataU2[15:8]; 35. wire[7:0] Y = DataU2[5] ? (~DataU2[23:16] + 1'b1) : DataU2[23:16]; 36. 37. smg_basemod U3 38. ( 39. .CLOCK( CLOCK ), 40. .RESET( RESET ), 41. .DIG( DIG ), // > top 42. .SEL( SEL ), // > top 43. .iData( { 3'd0,DataU2[5],Y,3'd0,DataU2[4],X }) // < U2 44. ); 45. 46. assign LED = {DataU2[1], DataU2[2], DataU2[0]}; 47. 48. endmodule

该代码非常简单,第30行表示U2的oTrig无用武之地。第34~35行是正直化的即时声明。第43行是U3的联合驱动,其中 3’d0, DataU2[5] 表示第1位数码管显示Y的符号位,Y表示第2~3位的数码管显示Y的正直结果,3’d0,DataU2[4] 表示第4位数码管显示X的符号位,X表示第5~6位数码管显示X的正直结果。第46行则是各个按键情况直接驱动LED资源。

编译完成并且下载程序。假设笔者按下左键,那么LED[0]便会点亮,释放则消灭。再假设笔者向左移动鼠标,那么鼠标第4位数码管会显示1,第5~6数码管则会显示X的内容,亦即鼠标移动的举例。

细节一:精简与直观

1. 0: // Read 1st byte 2. begin i U2 17. ); 18. 19. ps2_read_funcmod U2 20. ( 21. .CLOCK( CLOCK ), 22. .RESET( RESET ), 23. .PS2_CLK( PS2_CLK ), // < top 24. .PS2_DAT( PS2_DAT ), // < top 25. .iEn( EnU1 ), // < U1 26. .oTrig( oTrig ), // > Top 27. .oData( oData ) // > Top 28. ); 29. 30. endmodule


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有