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:
谢谢
,
Yale Li:
客气了