微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > USB在同步相量测量单元中的应用

USB在同步相量测量单元中的应用

时间:02-27 来源:互联网 点击:

icc作为编译器,本文所有的单片机程序都在此环境下运行调试。USB接口器件采用总线控制方式,数据传输形式采用中断传输。USB接口器件在使用上与一个普通的外部存储器相同,所有的控制与数据传输都必须对ATMAGE128中相应的寄存器进行读写操作才能完成。

  4 USB驱动程序MCU部分

  MCU即设备方控制器,可以是各类型单片机或者是PC,它们的驱动程序在结构上是类似的,而具体的代码,由于使用的系统环境不同,存在较大差异,下面就详细说明以ATMAGE128单片机作为设备方控制器的USB驱动程序结构以及具体实现的代码。

  4.1 程序整体结构

  对于CPU而言,PDIUSBD12芯片与一个外部存储器完全相同,CPU通过总线控制的方式对PDIUSBD12进行操作。USB接口的传输并不会占用许多CPU资源,CPU可以执行前台操作,而USB接口传输的工作则在后台完成,两者之间通过中断服务程序连接。当PDIUSBD12 从USB 收到一个数据包,那么就对CPU 产生一个中断请求,CPU 立即响应中断。在ISR中固件将数据包从PDIUSBD12 内部缓冲区移到循环数据缓冲区,并在随后清零PDIUSBD12 的内部缓冲区以使能接收新的数据包CPU 可以继续它当前的前台任务直到完成,然后返回到主循环检查循环缓冲区内是否有新的数据,并开始其它的前台任务。无论是上传或者下载数据都是对循环缓冲区内的数据进行处理,主循环只要检查循环缓冲区内是否有要处理的新数据。程序整体结构框图如图1所示。

  各模块分工如下:

  (1)硬件提取层:对单片机的I/O口、数据总线等硬件接口进行操作。

  (2)PDIUSBD12命令接口:对PDIUSBD12器件进行操作的模块子程序集。

  (3)中断服务程序:当PDIUSBD12向单片机发出中断请求时,读取PDIUSBD12的中断传输来的数据,并进行相关处理。

  (4)标准请求处理程序:对USB的标准设备请求进行处理。

  (5)厂商请求处理程序:对用户添加的厂商请求进行处理。

  (6)主循环程序:发送USB请求、处理USB总线事件和用户功能处理等。

  图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标志位置位,然后退出。

  控制传输总是由建立阶段开始,之后为可选的数据阶段,然后结束于状态阶段。单片机需通过选择控制输出端点来提取建立包的内容来决定端点是为满还是为空。如果控制端点是为满,单片机将从缓冲区内读出内容并将其存入存储区。之后,单片机将从存储区使主设备请求生效。如果是一个有效的请求,单片机需向控制端点发送应答建立命令,以重新使能下一个建立阶段。接下来单片机需要证实传输是控制读还是写,这可以通过建立包重定向的请求类型位来实现。

  建立阶段结束后,主机就会执行数据阶段。PDIUSBD12等待接收控制输入包。单片机首先需要读取最后处理状态寄存器清零中断标志位。确认PDIUSBD12处于传输模式后,进行数据包的发送。

当下一个控制输入标志来到时,单片机将确定剩余的字节是否为零。如果已经没有数据要发送,单片机需要发送一个空的包以指示主机数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top