楼主: 我想做一个USB音频设备,参考了STM32 USBLib demo里的AUDIOSPEAKER项目,在这例子项目里发现USB和I2S都没有使用DMA,于是看了一个文档,没有找到DMA到USB的支持,但I2S是有DMA支持的。我想确定几个事情, 1. STM32是否没有USB的DMA支持? 2. 不管USB是否有DMA支持,假设从USB接收到的音频数据都放在unsigned char rxPCM[4096],我想I2S的DMA从这内存中取数据,见到STM32的DMA有circle_mode,而且说DMA每传输半个字节和一个字节都会产生中断,想在这DMA传输中断时更新rxPCM,但没有发现DMA相关寄存器有指示当前读到源地址中第几个字节的寄存器,如果不能读出当前读到源地址中第几个字节这个信息,也就无法知道应该更新rxPCM的什么位置,也就体现不到circle_mode有什么作用? -------------------------------------------------------------------------------------------------------- 1楼: DMA支持USB的数据传输 -------------------------------------------------------------------------------------------------------- 2楼: usecool, 这位朋友是在什么地方见到说USB有DMA支持? -------------------------------------------------------------------------------------------------------- 3楼: DMA不是有个记录剩余传输数量的寄存器DMA_CNDTR吗?用这个就可以知道读到源地址哪个位置了。DMA的中断好像是传输完总数量的一半和完全传输完才产生的吧,不是每半字节和每个字节产生 -------------------------------------------------------------------------------------------------------- 4楼: sonicll, 你说得对,我看错了。 对于circular_mode,如果在传输一半中断时通过MCU更新这一半数据的话,你认为会有问题吗?难道又需要用另一个DMA来更新这一半的数据? -------------------------------------------------------------------------------------------------------- 5楼: 4#: 可以更新已经传输的部分的数据,因为对于DMA来说,那些数据已经是使用过可以废弃的部分了,没有传输的部分也可以更新。 DMA的作用是传输数据,而不验证数据。 |