新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 基于CY7C68013A芯片的USB键盘的设计

基于CY7C68013A芯片的USB键盘的设计

作者:时间:2012-04-09来源:网络收藏

十分简单,CYTC68013A-56pin有PA、PB、PD三组24个IO端口,利用这些IO端口,就可常用的矩阵,如图2所示,键的数目可达12*12个。和51单片机实现的一样,固件程序需要对行和列进行扫描,采用轮询或中断的方式,对按下的键值进行判断。

本文引用地址:http://www.eepw.com.cn/article/177579.htm

b.JPG


另外,在制作电路板的时候,注意D+和D-的走线尽量的短而且相等,晶振尽量靠近
3.2 的固件程序
EZ- FX2LP采用的是一种软配置模式。也就是设备的各种驱动程序都保存在上位机,上电后,USB主机首先将程序下载到RAM中,然后从RAM开始执行。在这个过程中,有两次“枚举”:刚加电时,USB内核中没有固件,将被枚举为一个默认的USB设备;主机下载固件程序之后,在内核中执行固件程序,就会重新识别并枚举这个USB设备,这个过程被称为“重枚举”。在第一次枚举时,根据芯片有没有连接E2PROM,以及E2PROM中第一个字节的值,有不同的处理方式。当没有外接E2PROM时,将根据驱动程序中提供的VID,PID和DID,把主机上对应的固件程序下载到片内的RAM中,并执行固件代码。
USB固件程序是USB设备功能的核心,通过两次枚举,固件程序被下载到的芯片里(程序也可以放在外接的EEPROM芯片里),用于配置芯片工作在需要的状态下。
固件程序使用Keil μVision来编写。可以参考Cypress的例程。大体步骤是:
(1)初始化休眠模式、远程唤醒等。
(2)初始化用户设备,主要是‘TD_Init()子程序。负责整个USB设备的初始化过程。
(3)定向描述符。
(4)把所用中断打开,并开启8051全局中断EA=1。由于EZ-USB设备启动需要重列举,因而需要通过设置和判断USBCS寄存器的RENUM和DISCON位来模拟设备物理上的断开和连接过程。
(5)用户外围设备控制功能的实现放在TD_Poll()子程序中,同时主循环中的SetupCommand()子程序用于接收、分析上位机的控制信号,响应上位机请求(标准请求和用户自定义请求)。
3.3 USB通用驱动程序的使用
USB设备的使用需要驱动程序的支持,Cypress提供了通用的USB驱动程序。
该驱动包括两部分:CyLoad.sys和CyUsb.sys,前者用于固件程序的下载,后者用于主机和固件程序的通信。这两个驱动程序提供的引导文件分别是CyLoad.inf和CyUSB.inf,用户可以直接使用,也可以根据需要进行改动。
为了在CyLoad.sys的帮助下实现固件的自动下载,固件程序CyLoad.HEX必须转换为适合自动下载的CyLoad.spt文件,并且与CyLoa d.sys一起放在CyLoad文件夹下,拷贝到系统system32目录下。在安装文件CyUSB.inf中设置的PID,VID必须和描述符中的一致,使得能够自动加载对应固件。
USB设备使用时,必须首先安装驱动程序,注意分别安装上面提到的下载驱动CyLoad.sys和通信驱动CyUsb.sys。安装驱动之后,可以使用Cypress提供的主机控制函数库CyAPI.lib开发主机程序,通过驱动程序和USB设备进行通信。
3.4 USB主机的应用程序设计
USB主机程序可以使用Cypress提供的CyAPI.lib库来进行编程。CyAPI.lib对应Cypress提供的驱动程序CyUsb.sys,为其提供了简单而且功能强大的C++编程接口,通过CyAPI.lib库提供的函数,可以对USB设备进行读写操作,这些函数主要是Open,Close和XferData。
本文以VC++6.0为例,描述创建USB设备应用程序的步骤。
(1)新建工程,并将CyAPI.h,CyAPI.lib,cyioctl.h三个文件加载到项目中。
CyAPI.h中定义了CCyUSBDevice、CCyControlEndPoint等几个重要的类;而cyioctl.h中则定义了读取USB设备的几个重要的结构和宏。
(2)在相应的文件中(视、框架或者对话框,依具体情况),包含头文件CyAPI.h和cyioefl.h。
然后定义USB设备全局变量和控制端点全局变量,并进行初始化:
CCyUSBDevice*USBDevice=new CCyUSBDevice();
CCyControlEndPoint*ept=USBDevice->ControlEndPt;
(3)在程序执行时,采用中断方式,或者轮询方式交换数据。以轮询方式为例,则在帧循环中加入如下代码:
c.JPG
首先判断设备是否打开,然后指定操作码,ept->XferData()完成传输,实现从端口读数据,或者向端口写数据。数据传输的方向由ept->Direction来设置。
(4)结束程序时,关闭USBDevice。
USBDevice->Close;

4 结论
EZ-USB FX2芯片实现USB系统,软硬件程序设计,相比较而言,简单、方便。本文介绍了设计USB系统的大体步骤,给出了USB键盘设计的实例。
上述系统和程序经过实际运行,工作稳定、可靠。

DIY机械键盘相关社区:机械键盘DIY


pid控制相关文章:pid控制原理


51单片机相关文章:51单片机教程


c++相关文章:c++教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭