基于WinCE操作系统的通用USB数控键盘设计 03
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
基于WinCE操作系统的通用USB数控键盘设计 03
PDIUSBD12和MCU通信模块
PDIUSBD12是Philips(编者注:现独立为NXP)公司的一款特点突出的USB接口芯片,它支持多路复用、非多路复用和DMA并行传输。PDIUSBD12需要外接MCU来进行协议处理和数据交换。
PDIUSBD12完全遵从USB1.1协议,它内部集成有串行接口引擎(SIE)、FIFO存储器、收发器以及电压调整器。还有SoftConnectTM、PLL锁相环、可编程的时钟输出、低频晶振、终止寄存器和GoodLinkTM,以及并行和DMA传输。
由AT89S55和PDIUSBD12构成的接口电路如图3所示,在此AT89S55没有画出,但是D12与MCU的连接都已标出。PDIUSBD12的8位并行数据接入AT89S55的P0口,设计电路中只有D12一个外部总线扩展电路,那么D12的A0引脚可通过10kΩ电阻到地。D12的ALE引脚与MCU的ALE引脚相连。振荡电路采用6MHz,经过D12内部倍频电路以后,实际D12内部时钟为24MHz。注意两个电容值的大小是不一样的,采用22pF和68pF的。
![](http://embed.chinaitlab.com/UploadFiles_4615/201005/20100526110029951.jpg) GL_N通过一个电阻和红色LED串联到VCC。当USB设备枚举成功后,该LED常亮,当PC机与D12有数据通信时,该LED闪烁。因为没有用到D 1 2的D M A功能,所以DMACK_N和EOT_N必须接上拉电阻,INT_N也要通过电阻上拉到VCC,因为这个引脚是开漏的。
系统软件
软件设计包括ZLG7290控制程序、I2C通信程序、USB固件程序、在winCE下USB Host驱动程序和应用程序。各部分采用模块化程序设计,便于升级和维护。WinCE下USB数控键盘的驱动程序与硬件平台关联很少,USB数控键盘在winCE操作系统下具有通用性,并且该键盘的按键数目根据用户的要求可以剪裁,功能也可以在程序设计中定制,可以满足不同数控系统的需求。
I2C通信程序
在程序设计时要注意:数据线SDA的电平状态必须在时钟线SCL处于高电平期间保持稳定不变,SDA的电平状态只有在SCL处于低电平期间才允许改变。但是在I2C总线的起始和结束时例外。
I2C总线总是以字节为单位收发数据。每次传输的字节数量没有严格限制。首先传输的是数据的最高位(MSB,第7位),最后传输的是最低位(LSB,第0位)。另外,每个字节之后还要跟一个响应位,称为应答。
ZLG7290控制程序
该程序的主要功能是完成ZLG7290的控制及键盘的管理,读出键值并判断出是否为功能键,在系统中功能键是配合普通键完成对数控系统的操作。主要流程就是先初始化、判断是否有键按下,若有键按下,判断是普通键还是功能键,若为功能键,则进行功能键处理,若为普通键,则转化为十进制的值,将键值显示在1602液晶显示器上。
PDIUSBD12固件程序
固件设计的目标就是使PDIUSBD12在USB上达到最大的传输速率。PDIUSBD12的固件设计成完全的中断驱动。当CPU处理前台任务时,USB的传输可以在后台进行。这就确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试。
后台ISR(中断服务程序)和前台主程序之间的数据交换可以通过事件标志和数据缓冲区来实现,其原理图如图4所示。在ISR中,固件将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区,并在随后清零PDIUSBD12的内部缓冲区,以便接受新的数据包。CPU可以继续当前的前台任务直到完成。
![](http://embed.chinaitlab.com/UploadFiles_4615/201005/20100526110030479.jpg) 对于这种结构,主循环不关心数据是否来自USB、串口还是并口,其只检查循环缓冲区内需要处理的新数据。主循环程序专注于数据的处理,而ISR能够以最大可能的速度进行数据的传输,相似的控制端点在数据包处理时采用了同样的概念,ISR接收和保存数据缓冲区中的控制传输并设置相应的标志寄存器,主循环向协议处理程序发出请求,由于所有的标准器件级别和厂商请求都是在协议处理程序中进行处理,ISR得以保持它的效率而且一旦增加新的请求只需要在协议层进行修改。
USB在WiniCE下驱动程序和应用程序
整个系统采用的是ARM9微处理器作为主机,并且选用arm9中的S3C2410作为系统的核心控制器。S3C2410内部集成了USB设备控制器,完全兼容USB1.1协议并且集成了USB收发器。WinCE操作系统下有自带的一些驱动程序,但是这些驱动程序不能满足本系统的设计需求,所以需要编写USB Host驱动程序。
应用程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。主机用户程序的编写使用EVC++编译环境下的API函数实现。程序中主要用到两个APl函数:CreateFile()和DeviceIoControl()。首先查找设备,打开设备的句柄:调用Win32函数CreatFile()得到设备驱动程序的句柄。然后进行读写和控制操作:调用wi n 3 2 函数DeviceIoControl(),通过得到的句柄把IoControlCode和相关的输入输出缓冲区提交给驱动程序。最后关闭设备句柄:当退出应用程序时,用CloseHandle()关闭设备。
结语
本文提出的嵌入式数控键盘已经设计完成,在项目组测试中达到了预期的效果。用USB键盘输入时,在WinCE操作系统下使用记事本的方式在LCD上显示键值,并且在应用程序中可以根据用户需求定制按键的具体功能,满足数控系统的需要。 |
|
|
|
|
|