TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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,还是无法完成指定功能。