基于DWC2的USB驱动开发-DOEP接收相关的其他寄存器详解

描述

本文转走公众号欢迎关注

基于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端点

USBActEP=1表示端点是激活状态

包大小为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模式这两个寄存器不需要配置,对应信息在描述符中配置。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分