Other Parts Discussed in Thread: C2000WARE
dear everyone:
我这里把待传数据放在buf1里,然后把i放入dma中断,想的是进入一次dma中断,i++,就可以把buf里的数据一个一个传入cmp里,结果我这里只能接收到数组的第一个数据,中断里i的值都可以增加
DMACH1_Init(CMPA,&DMABuf1[i]);
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
{
i++;
if(i>4)
i=0;
EPwm1Regs.ETCLR.bit.SOCA = 1;
// DmaRegs.CH1.CONTROL.bit.RUN=1;
PieCtrlRegs.PIEACK.bit.ACK7 = 1;
}

control寄存器为0x2000,查寄存器表得知没有传送的活动,不明白为什么。
源码如下
//DMA配置部分
void DMACH1_Init(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source)
{
EALLOW;
SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock
// EDIS;
// EALLOW; // Allow access to EALLOW protected registers
PieVectTable.DINTCH1= &local_DINTCH1_ISR;
// EDIS; // Disable access to EALLOW protected registers
IER = M_INT7 ; //Enable INT7 (7.1 DMA Ch1)
EnableInterrupts();
// Initialize DMA
void DMAInitialize(void);
// Configure DMA Channel
DMACH1AddrConfig(DMA_Dest,DMA_Source);
DMACH1BurstConfig(0,0,0);
DMACH1TransferConfig(0,0,0);
DMACH1ModeConfig(0x12,PERINT_ENABLE,ONESHOT_ENABLE,CONT_ENABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE);
StartDMACH1();
EDIS;
}
//主函数
void main()
{
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EPwm1Regs.ETCLR.all=1;
Epwm1_Init(6000);
EALLOW;
*MAPCNF|=0x0001;
EDIS;
// *CMPA=5000;
// delay();
DMACH1_Init(CMPA,&DMABuf1[i]);
while(1)
{
}
}
中断函数
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
{
i++;
if(i>4)
i=0;
EPwm1Regs.ETCLR.bit.SOCA = 1;
// DmaRegs.CH1.CONTROL.bit.RUN=1;
PieCtrlRegs.PIEACK.bit.ACK7 = 1;
}