This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Dear everyone:
我这里是其实是想使用DMA不断更改占空比,buf2就相当于cmpa的地址,buf1相当于占空比数据。我设定的是在一个PWM波形完成后产生一个SOCA信号触发DMA,DMA就传输一个占空比过去。我之前用的在DMA中断里面改地址,但是当PWM波形频率快起来时,就出问题了。
volatile Uint16 DMABuf1[25]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}; volatile Uint16 DMABuf2[1]; DMACH1AddrConfig(DMABuf2,DMABuf1); DMACH1BurstConfig(0,1,0); DMACH1TransferConfig(1,1,0); DMACH1WrapConfig(25,0,1,0); DMACH1ModeConfig(0x12,PERINT_ENABLE,ONESHOT_ENABLE,CONT_ENABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE); interrupt void local_DINTCH1_ISR(void) // DMA Channel 1 { i++; EPwm1Regs.ETCLR.bit.SOCA=1; PieCtrlRegs.PIEACK.bit.ACK7 = 1; }
如何配置DMA,使触发一次DMA,将buf1里的1传输进buf2,下一次触发时,将2传输进buf2,直到传输完成并循环传输。新数据覆盖掉旧数据。
这里设置一个burst包含一个元素,一个transfer包含一个burst。然后传输一个burst数据源地址加一,目标地址不变,传输完一个transfer源地址加一,目标地址不变。然后设置wrap,传输25个burst后地址回到首地址。
DMA是用SOCA信号触发的,在DMA中断里写了SOCA中断清除标志位代码(中断配置部分没有发出来),确保能够再次触发DMA,还是无法完成指定功能。
你好,有参加TI的例程吗
C:\ti\c2000\C2000Ware\device_support\f2833x\examples\epwm_dma
在PWM波形频率为1mhz时问题已经解决了·,
DMACH2BurstConfig(0,1,0); DMACH2TransferConfig(24,1,0); DMACH2WrapConfig(24,0,0,0);
但是又出现了新的问题,当PWM波形频率达到25mhz时,我在while循环设置断点,等待SOCA产生,观察传输值。第一次transfer传输里数据传输正常。执行第一次transfer后面的transfer时,第一次数据传输会在调试界面看到第四个数组元素(有时候是第三个),理应应该看到传输的第一个元素。分析了一下原因,可能的原因是DMA被很快的触发了三次或四次,css来不及观察。或者可能也是DMA配置哪里出现问题了。