本文首要介绍PDIUSBD12的固件编程问题。
USB通讯固件规划的方针为使PDIUSBD12在USB上到达最大的传输速率。
1.总体规划
CPU忙于处理许多设备操控和数据处理等使命。通讯固件规划成彻底的中止驱动方法,当CPU处理前台使命 时,USB的传输可在后台进行,这就保证了最佳的传输速率和更好的软件结构,一起简化了编程和调试。
后台中止服务程序和前台主程序循环之间的数据交换经过事情标志和数据缓冲区来完结,例如,PDIUSBD12 的批量输出端点可运用循环的数据缓冲区,当DIUSBD12从USB收到一个数据包时,就对CPU发生一个中止请求 ,CPU当即呼应中止。
在中止服务程序中固件将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区,并在随后铲除DIUSBD12的内 部缓冲区,以使其能接纳新的数据包,CPU能够持续它当时的前台使命直到完结。
然后返回到主循环,查看循环缓冲区内是否有新的数据,若有就对其进行处理,不然开端其他的前台使命 。中止服务程序与前台主循环经过事情标志EPPFLAGS和数据缓冲区CONROL XFER进行通讯,EPPFLAGS的界说 如下:
USB通讯固件选用层次结构,如图1所示
图1 USB通讯模块层次图
2 别离介绍各层子模块的规划
(1)底层函数。
最底层为两个面向硬件电路的函数:outpodb(UCHAR addr, UCHAR dm)和inpofib(UCHAR addr) 用以 完结CPU和D12之间的数据传输,这是所li其他函数的根底,详细代码如下:
(2)指令接口.
在D12的数据手册中界说了一套紧缩了一切拜访PDIUSBD12功用的指令集,指令接口部分便是将各指令用函 数的方式加以完结,对应的函数首要有:
以USHORT ReadlnterruptRegister(void)函数为例,代码如下:
3 中止服务程序
这部分代码处理由PDIUSBDl2发生的中止,它将数据从PDIUSBDI2的内部FIFO取回到CPU存储器,并建立正 确的事情标志以告诉主循环程序进行处理。在ISR函数的进口固件运用ReadlntemJptRegister()来决议中 断源,依据中止源进入相应的子程序进行处理。