电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章接口定义基于USB接口设备的固件程序设计

基于USB接口设备的固件程序设计

11-20 14:48:53 | http://www.5idzw.com | 接口定义 | 人气:400
标签:接口技术,微机原理与接口技术,单片机原理与接口技术,http://www.5idzw.com 基于USB接口设备的固件程序设计,http://www.5idzw.com


  4.  中断服务程序的实现

  PDIUSBD12固件是完全中断驱动的,因此中断服务程序是整个固件编写过程中非常重要的一环。在进入中断服务程序后首先要发用命令Read Interrupt Register(控制字为F4H)读取中断寄存器,根据中断寄存器的内容判断中断源,然后跳转到不同的服务程序中去处理中断。

  中断服务程序(ISR)与主程序通信是通过事件标志“EPPFLAG”和数据缓冲区“Control-XFER”。

  主程序和中断服务程序(ISR)之间任务分配是,ISR从D12收集数据,主程序将处理这些数据。ISR只在它收集了足够的数据才通知主程序准备处理,这样会减少不必要的主程序服务时间,也简化了主程序。

  总线重置和空闲在ISR里面不需要特殊的处理。ISR要么设置总线重置标志,要么在EPPFLAG里暂停这一位并退出。

  控制型传输总是以setup阶段开始的,接着是数据阶段。然后以状态阶段结束。

  下面以处理Control OUT和Control IN这两个最复杂最重要的中断子程序为例,说明编写中断服务程序的一些问题。

  Control OUT主要是主机用来传递控制请求的,也可用于传输数据,进入服务程序后首先要发送控制字Read Last Transaction Status(40H)给PDIUSBD12,读取管道状态,根据读取的状态判断是因为有数据包还是有SETUP包的到来而中断。当SETUP包被USB设备的D12接收后,设备将会向MCU产生中断。微控制器将通过读取D12中断寄存器的内容判断封包是送到Control端点还是Genric端点而进行处理。如果封包是送到Control端点,MCU将会进一步通过读D12的“Read Last Transaction Status Register”判断数据是不是SETUP 封包。对于获取描述符设备请求,第一个封包必须是SETUP封包。

  之后,MCU需要读出SETUP封包的内容通过选择Control Out端点来判断这个端点是满的还是空的。如果控制端点是满的,MCU就从缓冲区中读出它的内容并将它存在存储器里。然后,它将从存储器里去验证主机设备请求是否合法。如果是合法请求,MCU必须送“Acknowledge Setup command”到Control Out端点使能接收下一个封包。下一步,MCU需要确定控制传输是控制读还是控制写。这可以通过从SETUP 封包里读bmRequestType的8个字节来完成。控制传输是控制读,设备需要在下一个数据时相回送数据包给主机。MCU需要建立一个标志,表明USB设备现在正处于传送模式。应主机的要求准备送数据。

  Control IN主要是用来向主机传送数据的,进入服务子程序后,首先要通过读Read Last Transaction Status(40H)来清除Control-In interrupt Bit,在确认D12是处于传送模式下后,MCU将数据包送往主机。但是,由于D12只有16字节的FIFO,所以MCU必须控制好传送的总量,如果要求的长度大于16字节的话。MCU必须检查当前和剩下的要送往主机的数据,如果剩下的字节大于16字节的话,MCU将先送头16字节。在下一个Control-IN令牌包到来的时候,MCU将先判断剩下的字节是否为0,如果是,MCU将发一个空包给主机,通知它数据已经传送完毕。

  结束语:

  功能强大的USB规格已经成为PC的众多标准之一,钻研计算机科技的种种发展,都离不开USB的相关知识。本文创新点:使用USB通信方面的具体协议,用单片机汇编语言编程,利用单片机的指令系统去实现USB设备与PC主机的具体通信,设计出适合用户需求的USB设备。


上一页  [1] [2] 

,基于USB接口设备的固件程序设计
关于《基于USB接口设备的固件程序设计》的更多文章