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:

我这里把待传数据放在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;


}