图1 USB驱动MCU整体结构图
4.2 硬件提取层相关程序
硬件提取层执行对单片机I/O口、数据总线等的操作,包含向PDIUSBD12发送数据或命令的子程序及从PDIUSBD12读取数据的子程序,该部分代码需对地址总线和数据总线进行直接操作。PDIUSBD12的任何操作都是由命令指令和数据指令组合完成的,通过改变A0引脚的电平就可以完成命令模式/数据模式的切换。
4.3 命令接口
该部分是由一系列命令接口子程序构成的,包含了所有PDIUSBD12给出的访问功能接口的命令。在命令接口中调用了硬件提取层中的子程序。PDIUSBD12的所有功能都必须由类似的方法完成,先发送一条命令,然后写该命令的具体参数。有的命令参数是多个字节的,如设置模式命令,此时就必须调用两次写数据线的指令。命令接口程序的编写格式相对固定,按照PDIUSBD12说明书中给出的命令汇总表依次编写即可。
4.4 中断服务程序
中断服务程序代码处理由PDIUSBD12产生的中断,它将数据从PDIUSBD12内部的缓冲区内取出,并建立正确的标志,通知主循环进行处理。当PDIUSBD12向单片机发出中断请求后,单片机调用读取中断寄存器的标准命令接口子程序d12_readinterruptregister( )来决定中断源,然后跳转到相应的中断服务子程序进行处理。中断服务程序从PDIUSBD12收集数据,而主循环程序对数据进行处理。当中断服务程序收集到足够的数据时,它通知主程序已经做好准备等待处理。例如在发送数据包阶段建立包时,中断服务程序将建立包和数据都存入缓冲区内,然后将setup_packet标志送到主循环,这样主循环就可以节省不必要的服务时间。
4.5 总线复位和挂起
当接收到总线复位或挂起的请求时,中断服务程序将bus_set或suspends标志位置位,然后退出。
控制传输总是由建立阶段开始,之后为可选的数据阶段,然后结束于状态阶段。单片机需通过选择控制输出端点来提取建立包的内容来决定端点是为满还是为空。如果控制端点是为满,单片机将从缓冲区内读出内容并将其存入存储区。之后,单片机将从存储区使主设备请求生效。如果是一个有效的请求,单片机需向控制端点发送应答建立命令,以重新使能下一个建立阶段。接下来单片机需要证实传输是控制读还是写,这可以通过建立包重定向的请求类型位来实现。