基于DWC2的USB驱动开发-DOEP接收相关的其他寄存器详解 (qq.com)
前言
前面介绍了DOEP的DMA相关的寄存器,这一篇继续来讲剩下的寄存器。
DOEPTSIZi
寄存器偏移地址0xB10 + i*20
RxDPID对于控制OUT端点表示可以接收连续的SETUP包数,只读
对于同步 OUT端点,用于表示最后接收的包的类型,只读。
PktCnt软件写接收的包数,硬件处理完即指定的包数从RxFIFO搬运到用户存储之后,该值硬件更新递减,处理完变为0.
只有非Scatter/Gather DMA的DMA模式才有,Scatter/Gather DMA模式在描述符中定义
传输数据的大小,软件写该寄存器表示有多少数据需要接收,硬件从RxFIFO搬运了指定数据到用户指定的DMA区域时产生接收完成中断,并且硬件更新该值,接收了多少数据就减少多少,减少到0说明接收完
只有非Scatter/Gather DMA的DMA模式才有,Scatter/Gather DMA模式在描述符中定义
DOEPINTi
寄存器偏移地址
0xB08 + i*20
各中断状态位,写1清零
其中XferCompl表示接收完,是最重要中断。其他中断状态,后面驱动讲接收中断处理时单独详讲。
比如如下OUT中断读出值为0x201即XferCompl=1和BNAIntr=1,即接收完成没有后续描述符需要处理了。
DOEPCTLi
寄存器偏移地址0xB00 + i*20
几乎和DIEP对应的寄存器是对应的,参考上篇DIEP相关的介绍
如下是OUT 中断时寄存器值
CTL寄存器值为0x48040,
接收中断时ENPena硬件自动清零了,
EPType为ISO端点
包大小为0x40
另外虽然是Scatter/Gather DMA模式实际我们观察DOEPTSIZi也是会递减变化的,
包括偏移0xB18 + i*20处的值(之前说的对于DOEP保留的对应DIEP的DTXFSTSi的寄存器)也是会递减的,只是手册描述保留了,实际IP应该还是有使用更新的,这个要去看IP的代码了,应该是不开放给用户。
总结
对于接收即OUT端点,
Scatter/Gather DMA模式就只需要配置两个寄存器
DOEPCTLi
DOEPDMAi为描述符链表的地址, 还需要填充描述符的内容
最后DOEPCTLi的EPEna置位,开始交给DMA去接收数据,此时软件不能再访问相关寄存器,必须等接收完成中断EPEna硬件清零,软件才能去访问。
非Scatter/Gather DMA模式,则还要配置DOEPTSIZi 和DOEPDMABi ,配置缓冲区和传输数据大小,Scatter/Gather DMA模式这两个寄存器不需要配置,对应信息在描述符中配置。
审核编辑:汤梓红
-
寄存器
+关注
关注
31文章
5336浏览量
120235 -
usb
+关注
关注
60文章
7938浏览量
264490 -
开发板
+关注
关注
25文章
5033浏览量
97378 -
单板计算机
+关注
关注
0文章
74浏览量
15627 -
编译
+关注
关注
0文章
657浏览量
32852 -
驱动开发
+关注
关注
0文章
130浏览量
12072 -
DWC2
+关注
关注
0文章
35浏览量
125
发布评论请先 登录
相关推荐
评论