TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335: DMA数据传输时,接收方只能接收到第一个数据

Part Number:TMS320F28335Other 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 registersPieVectTable.DINTCH1= &local_DINTCH1_ISR;
//EDIS;// Disable access to EALLOW protected registersIER = M_INT7 ;//Enable INT7 (7.1 DMA Ch1)EnableInterrupts();// Initialize DMAvoid DMAInitialize(void);// Configure DMA ChannelDMACH1AddrConfig(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;


}

Yale Li:

有没有参考哪个例程?

,

lion lee:

没有参考 =_=

,

lion lee:

推测原因可能是    DMACH1_Init(CMPA,BufAdd);里;DMACH1AddrConfig(CMPA,BufAdd);传输地址这个动作只执行了一次,并DMACH1TransferConfig(0,0,0);设置的步长为0,所以只传输了第一个数据。

1.使用指针指向源数组

volatile Uint16 DMABuf1[25]={30, 38, 45, 50};
volatile Uint16 *BufAdd =DMABuf1;

2.中断里加上

i++;if(i<4)BufAdd++;else{BufAdd = DMABuf1;i=-1;}DMACH1AddrConfig(CMPA,BufAdd);

 

    DMACH1AddrConfig(CMPA,BufAdd);这行代码运行在DMA中段里面便每进一次中断更改源地址。

,

Yale Li:

我还是建议你在例程的基础上修改

C:\ti\c2000\C2000Ware_5_00_00_00\device_support\f2833x\examples

也感谢你的分享

,

lion lee:

谢谢Star

,

Yale Li:

客气了

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: DMA数据传输时,接收方只能接收到第一个数据
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1