基于DWC2的USB驱动开发-DOEP接收相关的其他寄存器详解
前言
前面介绍了
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
端点
USBActEP
=1
表示端点是激活状态
包大小为
0x40
另外虽然是
Scatter/Gather DMA
模式实际我们观察
DOEPTSIZi
也是会递减变化的,
包括偏移
0xB18 + i*20
处的值
(
之前说的对于
DOEP
保留的对应
DIEP
的
DTXFSTSi
的寄存器
)
也是会递减的
,
只是手册描述保留了,实际
IP
应该还是有使用更新的,这个要去看
IP
的代码了,应该是不开放给用户。
总结
对于接收即
OUT
端点,
Scatter/Gather DMA
模式就只需要配置两个寄存器
DOEPCTL
i
DOEPDMAi
为描述符链表的地址,
还需要填充描述符的内容
最后
DOEPCTLi
的
EPEna
置位,开始交给
DMA
去接收数据,此时软件不能再访问相关寄存器,必须等接收完成中断
EPEna
硬件清零,
软件才能去访问。
非
Scatter/Gather DMA
模式,则还要配置
DOEPTSIZi
和
DOEPDMABi
,
配置缓冲区和传输数据大小,
Scatter/Gather DMA
模式这两个寄存器不需要配置,对应信息在描述符中配置。