完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
设备收发器模块是整个固件系统的核心,实现的基本思想是创建一个状态机,将各个处理操作都作为一个状态处理,在每个状态中按照 PDIUSBD12 的时序要求对其进行数据访问和控制。 设备收发器模块的示意图如图 6-40 所示。 由于 USB 协议很复杂并且 PDIUSBD12 的控制也比较复杂,所以设备收发器状态机的状态量会较多。根据设备收发器的功能,可以将状态机各个状态的功能分为 3 类。 • 初始化器件:初始化器件就是对 PDIUSBD12 器件进行配置的状态,需要配置的内容包括设置地址/使能、设置 DMA 以及设置模式等。 • 数据访问:数据访问即实现 PDIUSBD12 和 FPGA 之间的数据读写,包括读取中断寄存器、读取前次传输状态、由端点读取数据、由端点发送数据等。 • 请求回复:请求回复是指根据各种类型请求的数据格式提取所需要的数据,并且在解析完成后通知请求处理模块。 下面详细介绍一下以上第1 种状态的实现。 1.初始化器件 初始化器件相关的状态主要是 TS_DISCONNECTED 和 TS_CONNECtiNG(状态的定义见USB_Package.vhd 文件),其中 TS_DISCONNECTED 是系统复位后的状态,TS_CONNECTING 是配置PDIUSBD12 寄存器的状态。需要注意的是 PDIUSBD12 器件在复位后应该等待至少 3 ms 后再访问其寄存器,这样可让晶振稳定下来。 由于对寄存器配置的命令以及时序都是确定的,所以可以在自定义包中将配置数据定义为常数,例如:
上面定义的就是 PDIUSBD12 的配置参数,第一个常数数组是配置命令和数据,第二个数组表示命令、数据的顺序,最后一个参数是配置参数的总长度。定义的过程是首先向 PDIUSBD12发送命令 D12_COMMAND_SET_DMA(设置 DMA 命令),然后发送此命令的数据 D12_DMA(D12_DMA定义为 0xC0,其意义请参考图 6-23);之后发送设置模式命令和此命令的两个数据。D12_COMMAND_SET_DMA、D12_DMA、D12_COMMAND、D12_DATA 等都是已定义的常数,例如:
详细的常数定义请参考 PDIUSBD12 包的定义文件。 这样定义虽然显得复杂,但是便于将数据与格式分离,也便于代码阅读。此外,在调用配置数据时也较为方便,只需要使用一个循环索引变量,依次读取 D12_CONNECT_DATA 数组和D12_CONNECT_DATA 数组的数值,发送给 PDIUSBD12 即可,代码如下:
以上代码运行的结果就是经过 5 个时钟周期,FPGA 完成向 PDIUSBD12 输出的一系列命令以及数据,通过编写测试平台仿真可以看到运行的结果(测试平台的编写将会在下面专门介绍),如图 6-41 所示。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2907 浏览 3 评论
27715 浏览 2 评论
3484 浏览 2 评论
3990 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2338 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 01:54 , Processed in 0.626145 second(s), Total 45, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号