同一个DMA的不同通道之间的数据会有冲突?
问题是:单独用STM32F373 的DMA2_CH3由内存向DAC1_CH1传数据,生成约13KHz正弦信号,没有问题。另外单独用DMA2_CH4将SDADC2转换结果通过DMA2_CH4送到内存,50KHz采样速率。也没有问题。上述两项工作同时做,DAC1_CH1出来的几乎是杂波。尝试将DAC1_CH1生成的正弦信号频率降低至2.5KHz,同时将SDADC2采样速率降低至12.5KHz,无济于事。应该不会吧 程序有问题吧。。。 ts2000 发表于 2016-12-7 13:36
程序有问题吧。。。
确实是程序的问题,程序中开启了DMA2_CH4传输完成中断,中断中释放了执行FFT信号量,执行了FFT后紧跟着执行了求模函数arm_cmplx_mag_f32,已经查明就是由于执行了这个求模函数导致生成正弦信号失效。求模函数中执行了大量的乘法及开平方计算。估计由于计算量比较大,占用了系统总线带宽。 又发现执行FFT运算(arm_cfft_radix4_f32函数)会导致DMA2_CH4数据传输错误。
DMA传输时要让出一半的系统总线带宽给CPU( Cortex-M4 with FPU core),但是也不对啊。SDADC以50KHz速率采样,占用的带宽不会超过1MHz。100点的正弦序列生成13KHz的正弦信号也就占用1.3MHz带宽。系统总线带宽有72MHz,系统总线是32位宽。怎么算这两个DMA通道都不会占用一半的系统总线带宽。
页:
[1]