完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
数据访问状态的功能简单地说就是中断监测和数据收发。 每次系统复位后 FPGA 会自动配置 PDIUSBD12 器件,配置完成之后设备收发器模块会处于空闲状态(TS_IDLE)。PDIUSBD12 器件在接收到数据包时会通过中断来通知设备收发器,此外,请求处理模块也会通过命令中断信号控制设备收发器模块。所以,中断监测就是在每个时钟周期读取一次 PDIUSBD12 的中断信号和请求处理模块的命令中断信号,如果发现其中的一个中断信号为低,则转为其他状态。 中断监测的代码如下:
当监测到 PDIUSBD12 的中断时,设备收发器首先读取中断寄存器,然后就会进入数据收发状态,如果监测到的是请求处理模块的命令中断,则进入的是请求回复状态。请求回复状态包括了发送描述符、发送配置信息等,这些内容将在下面一个小节介绍。 数据收发状态包括读取中断寄存器、控制端点数据收发等。读取中断寄存器的流程图如图6-42 所示。 读取中断寄存器的代码如下:
下面介绍一下控制输出的处理流程。控制输出的输出是相对主机来说的,所以相对于设备来说,就是接收主机的数据。当一次控制输出发生时,设备首先会判断接收到的是不是建立包(Setup Packet),如果是则开始接收下面的数据,否则,接收前次传输所剩余的数据。控制传输的处理流程图如图 6-43 所示。 从上面的流程图可以看出,设备收发器首先要选择控制输出端点,提取建立包的内容,再进行端点是为满还是空的判断。如果控制端点不为空,设备收发器将从缓冲区读出内容并将其保存。之后,它将判断设备请求的有效性,如果是一个有效的请求,设备收发器必须向控制输出端点发送应答建立命令以重新使能下一个建立阶段。 接下来,设备收发器需要证实控制传输是控制读还是写。这可以通过读建立包中bmRequestType 的第 8 位来判断。如果控制传输是一个控制读类型,那就是说器件需要在下一个数据阶段向主机发回数据包。设备收发器会设置一个标志以指示设备现在正处于传输模式,即准备在主机发送请求时进入传输状态(TS_EP0_TRANSMIT)向主机发送数据。 处理流程的各个步骤在设备收发器模块中被划分在两个状态中实现,其中选择端点和读取、保存数据的操作在 TS_READ_ENDPOINT 状态中实现,其他的内容在 TS_EP0_RECEIVE 状态中实现。下面是从端点(PDIUSBD12 的缓冲)数据读取的实现代码,即 TS_READ_ENDPOINT 状态的代码,由于篇幅原因,TS_EP0_RECEIVE 状态的实现请读者参考源代码。
下面介绍一下控制输入的处理过程。控制输入就是设备向主机发送数据,最为典型的就是设备向主机发送描述符,图 6-44 所示是控制输入的流程图。 从控制输入的流程图可以看出,设备收发器首先需要通过读 PDIUSBD12 的最后处理状态寄存器清零中断标志位。接着设备收发器在确认 PDIUSBD12 处于传输模式后进行数据包的发送。PDIUSBD12 的控制端点只有 16 字节 FIFO,如果传输的长度大于 16 字节,设备收发器在传输阶段就必须控制数据的数量。设备收发器必须检查要发送到主机的当前和剩余的数据大小,如果剩下的字节数大于 16,设备收发器将先发送 16 字节并继续等待下一次发送。 当下一个数据发送中断来到时,设备收发器将确定剩余的字节是否为零。如果已经没有数据要发送,设备收发器需要发送一个空的包以指示主机数据已经发送完毕。 控制输入是在 TS_EP0_TRANSMIT 和 TS_WRITE_ENDPOINT 两个状态中实现的。其中,TS_EP0_TRANSMIT 实 现 的 是 控 制 输 入 流 程 控 制 , 而 TS_WRITE_ENDPOINT 的 实 现 和TS_READ_ENDPOINT 很类似,只不过是将读取数据换为发送数据。TS_WRITE_ENDPOINT 状态的实现代码如下,TS_EP0_TRANSMIT 的状态的实现请参考源代码。
以上便是数据访问状态的实现方法,在测试平台中可以对以上代码进行测试,测试时的输入数据应该由测试平台产生(测试平台的编写将在下面的章节进行专门介绍)。如第一次发送设备描述符的仿真波形。此仿真过程可以分为两个部分,第一部分(如图 6-45 所示)是接收建立包(Setup Packet)以及读取 PDIUSBD12 请求数据的过程;第二部分(如图 6-46 所示)是将设备描述符数据写入 PDIUSBD12 端点缓存并且使缓冲区有效。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2906 浏览 3 评论
27712 浏览 2 评论
3484 浏览 2 评论
3990 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2338 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 11:20 , Processed in 0.687596 second(s), Total 63, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号