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.

TMS320F28335: 如何配置DMA

Part Number: TMS320F28335
Other Parts Discussed in Thread: C2000WARE

Dear everyone:

我这里是其实是想使用DMA不断更改占空比,buf2就相当于cmpa的地址,buf1相当于占空比数据。我设定的是在一个PWM波形完成后产生一个SOCA信号触发DMA,DMA就传输一个占空比过去。我之前用的在DMA中断里面改地址,但是当PWM波形频率快起来时,就出问题了。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

如何配置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

  • 参考了的,也是用的soca信号触发的dma

  • 但是我看寄存器,SOCA信号一直在产生,但是DMA只把数组的第一个数据传输过去,DMA就停止了

  • 但是我看寄存器,SOCA信号一直在产生,但是DMA只把数组的第一个数据传输过去,DMA就停止了

    你是指的例程吗?

  • 我看的自己的程序。现在又发现一个问题,DMA似乎一直在运行,但是传输的永远是同一个数据,设置的burst和transfer步长没有起到作用

  • 但是当PWM波形频率快起来时,就出问题了

    具体是什么原因?DMA中断没有触发?PWM频率最高为多少时能正常运行?

  •   在PWM波形频率为1mhz时问题已经解决了·,

    Fullscreen
    1
    2
    3
    DMACH2BurstConfig(0,1,0);
    DMACH2TransferConfig(24,1,0);
    DMACH2WrapConfig(24,0,0,0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ,需要这样配置,且设置为禁止单次模式。这样就可以让DMA每被SOCA信号触发一次就传输一个数组元素,之前是我对DMA理解不够。

      但是又出现了新的问题,当PWM波形频率达到25mhz时,我在while循环设置断点,等待SOCA产生,观察传输值。第一次transfer传输里数据传输正常。执行第一次transfer后面的transfer时,第一次数据传输会在调试界面看到第四个数组元素(有时候是第三个),理应应该看到传输的第一个元素。分析了一下原因,可能的原因是DMA被很快的触发了三次或四次,css来不及观察。或者可能也是DMA配置哪里出现问题了。

  • 分析了一下原因,可能的原因是DMA被很快的触发了三次或四次,css来不及观察。

    配置上应该没什么问题,的确可能你说的这个原因。