新闻中心

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

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

作者:时间:2013-10-17来源:网络收藏

  当下一个Control_In标志来时,MCU将确定剩余的字节是否为0,如果已经没有数据要发送,MCU需要发送一 个空的包以指示主机数据已发送完毕。


图2 控制点发送函数流程

  · 如果是一个有效的请求,MCU必须向控制输出端点发送应答建立命令,以重新使能下一个建立阶段。接 下来,MCU需要证实控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来实现。

  · 如果控制传输是一个控制读类型,那就是说器件需要在下一个数据阶段向主机发回数据包。MCU需要设 置一个标志以指示USB设备现在正处于传输模式,即准备在主机发送请求时发送数据。建立阶段结束之后, 主机会执行数据阶段,D12等待接收Control In包。

  · 如果建立包为SetesDescriptor()请求,那么建立包中的控制传输将指示此包为控制写类型。在执行 完Setpescnptor请求过程后,MCU等待数据阶段主机发送一个ControlOut标志,MCU从D12缓冲区中减去数据 。流程现在处于ControleOut处理程序的右端,MCU首先确认D12是否处于USB Receive模式,然后MCU通过检 查选择控制输出端点,确认缓冲区是否已满,并将数据从缓冲区读出。

  设备标准请求STANDARDASK,C。此部分代码用于实现各种USB协议的标准请求。对应每一个请求,用不同 的函数实现。在主循环中,当建立包标志为真时,利用control_handler()函数进入不同的标准请求处理 函数。虽然此处函数较多,但每个函数结构较简单,在此不做详细说明。

  主循环MAINLOOP.C。主循环检查事件标志并进入对应的子程序进行进一步的处理。在主循环中,MCU首先 对其所有端口、存储区、定时器和中断服务程序进行初始化,之后MCU将重新连接USB,包括将SofteCo nnect寄存器设置为ON。这些过程是很重要的,它确保了在MCU准各好服务D12之前,D12不会进行操作。初始 化后,进入循环,轮询各种状态。当轮询到了检测建立包时,它确认建立标志是否被中断服务程序所置位。 如果建立标志被置位,它将向协议层发送一个器件请求进行处理。图3所示为主程序在前台执行的流程。


图3 主循环流程

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭