新闻中心

EEPW首页>嵌入式系统>设计应用> USB数据通信接口模块的程序设计

USB数据通信接口模块的程序设计

作者: 时间:2016-12-21 来源:网络 收藏

本文主要介绍PDIUSBD12的固件编程问题。

USB通信固件设计的目标为使PDIUSBD12在USB上达到最大的传输速率。

1.总体规划

CPU忙于处理许多设备控制和数据处理等任务。通信固件设计成完全的中断驱动方式,当CPU处理前台任务 时,USB的传输可在后台进行,这就确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试。

后台中断服务程序和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现,例如,PDIUSBD12 的批量输出端点可使用循环的数据缓冲区,当DIUSBD12从USB收到一个数据包时,就对CPU产生一个中断请求 ,CPU立即响应中断。

在中断服务程序中固件将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区,并在随后清除DIUSBD12的内 部缓冲区,以使其能接收新的数据包,CPU可以继续它当前的前台任务直到完成。

然后返回到主循环,检查循环缓冲区内是否有新的数据,若有就对其进行处理,否则开始其他的前台任务 。中断服务程序与前台主循环通过事件标志EPPFLAGS和数据缓冲区CONROL XFER进行通信,EPPFLAGS的定义 如下:

USB数据通信接口模块的程序设计0

USB通信固件采用层次结构,如图1所示

USB数据通信接口模块的程序设计1

图1 USB通信模块层次图

2 分别介绍各层子模块的设计

(1)底层函数。

最底层为两个面向硬件电路的函数:outpodb(UCHAR addr, UCHAR dm)和inpofib(UCHAR addr) 用以 完成CPU和D12之间的数据传输,这是所li其他函数的基础,具体代码如下:

USB数据通信接口模块的程序设计2

(2)命令接口.

在D12的数据手册中定义了一套压缩了所有访问PDIUSBD12功能的命令集,命令接口部分就是将各命令用函 数的形式加以实现,对应的函数主要有:

USB数据通信接口模块的程序设计0

以USHORT ReadlnterruptRegister(void)函数为例,代码如下:

USB数据通信接口模块的程序设计1

USB数据通信接口模块的程序设计2

3 中断服务程序

这部分代码处理由PDIUSBDl2产生的中断,它将数据从PDIUSBDI2的内部FIFO取回到CPU存储器,并建立正 确的事件标志以通知主循环程序进行处理。在ISR函数的入口固件使用ReadlntemJptRegister()来决定中 断源,根据中断源进入相应的子程序进行处理。


上一页 1 2 下一页

评论


技术专区

关闭