通用串行总线在分组无线网中的应用
3.2 PRU和USB接口设计
USB接口电路图如图2所示。
图2中USBN9602上的引脚D+通过上拉电阻接在3.3V电压上,这样就选定为全速(12Mbps)设备。如果D-被上拉,则设置为低速(1.5Mbps)设备。
单片机可以通过8位并行接口AD[7:0]或MICROWIRE接口与USBN9602连接。对于并行接口,有两种模式可供选择:复用方式和非复用方式。这两种方式的选择通过设置MODE0和MODE1两引脚的电平高低来实现。这里使用复用方式连接USBN9602和8051单片机。选择该方式时,MODE0和MODE1分别接高电平和低电平。该方式下的数据传输用到了USBN9602上的控制引脚RD、WR、片选信号CS、地址锁存使能信号ALE和双向的地址/数据总线AD[7:0]。引脚RD、WR和ALE分别与8051上相应的引脚相连,片片信号CS由8051输出的高8位地址经过解码器产生。当ALE为高电平时,AD[7:0]上的地址信号被锁存到USBN9602内的地址寄存器中,再当RD或WR有效时,数据被读出或者写入。通过这种方式,USBN9602中的任何一个寄存器都可以被直接访问。由于这种读写时序与8051读写外部数据寄存器的时序相同,因此可以把USBN9602中需要读写的寄存器当作普通的外部数据寄存器来对待,在接口程序中直接用MOVX指令来进行操作。
另外USBN9602还提供了一个中断输出,它用来引起单片机的中断。中断方式可以通过编程设置,将这个中断输出引脚直接与8051单片机上的外部中断引脚INT1相连。由于8051的餐部中断输入为低有效,所以USBN9602的中断输出也应通过编程设置为低有效。
3.3 PRU的USB接口程序设计
USB接口的程序包括三个基本的部分:①初始化,这部分程序用来对单片机和所有外围电路进行初始化;②主循环,它可以被中断;③中断句柄,对中断进行处理,并且对时间敏感。这几部分均是嵌入在PRU的网络控制程序中的。
初始化程序中包含对USBN9602的初始化。①进行软件复位,它不影响时钟输出,相当于一个硬件复位;②设置中断方式,这一步骤确定了中断输出是高有效还是低有效;③设置缺省地址,这是由于USB规范规定设备在总线为其分配地址之间要以0作为缺省地址;④设置中断屏蔽,在USBN9602中各个端点的发送数据、接收数据和发送NAK握手包等事件可能产生中断;设置中断屏蔽这个步骤确定了哪一个端点的哪一种事件能够产生中断。
单片机通过中断的方式来处理USB接口上的各个事件,处理过程是在中断句柄中完成的。当某个端点接收到数据,并且在初始化中该事件被允许中断,则USBN9602就会向单片机发出中断信号,单片机会在中断句柄中处理这些数据。中断句柄中处理了端点0对以控制方式传输的命令的接收与响应和各个端点数据的发送与接收等事件,其中那些以控制方式传输的命令包括清除特征(CLEAR-FEATURE)、设置特征(SET-FEA-TURE)、读取配置(GET-CONFIGURATION)、设置配置(SET-CONFIGURATION)、读取描述符(GET-DESCRIP-TOR)、读取状态(GET-STATUS)和设置地址(SET-AD-DRESS)。通过这些命令主机可以了解或改变设备的工作状态。描述符包括设备描述符和配置描述符,USB规范给出了它们的格式工,想要计算机正确识别设备并安装驱动程序,这些描述符必须根据具体设备的情况填写。
以上各步骤中USBN9602与单片机的通信是通过单片机在USBN9602的寄存器中进行读和写来完成的,因此对USBN9602的读和写是单片机执行最频繁也是最重要的操作。在程序中这两个操作表现为子函数read_usb和write_usb。USBN9602共有64个可读或可写的寄存器,它们同时拥有一个高8位地址,又各自拥有一个低8位地址(00~3F)。由于前面所提到可以把USBN9602中需要读写的寄存器当作普通的外部数据寄存器来对待,所以只需给定高8位地址和要读写的寄存器对应的低8位地址,就可以直接用MOVX指令来完成这两项操作。
这时的PRU已经成为一个USB设备,能够被计算机正确识别。要使这个USB设备正常工作,实现它与计算机的通信,还要为该设备编写驱动程序。USB的驱动程序属于WDM型。WDM(Windows Driver Model),即Windows驱动程序模型,是Microsoft力推的全新驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发,在实际对新硬件支持的基础上减少并降低所必须开发的驱动程序的数据数量和复杂性。开发工具可以选择DDK(Driver Development Kits)。
评论