Part Number:TMS320F28335
Dear everyone:
这里预期生成一个f=100khz,T=10us的sin函数波形,一个T用25个Epwm波形来表示,经过低通滤波后产生波形,经过计算Epwm波形设置f=2.5Mhz,T=0.4us。dsp时钟不分频,向上计数,得出prd为60。设置完成后显示波形,但是示波器上生成的波形周期却不对了,多了7us。我想是不是因为我在DMA中断里操作源地址指针产生的影响。
占空比数据
volatile Uint16 DMABuf1[25]={30, 38, 45, 50, 54, 56, 57, 56, 54, 50, 45, 38, 30, 22, 15, 10, 6, 4, 3, 4, 6, 10, 15, 22,30}; volatile Uint16 *BufAdd =DMABuf1;
DMA中断
interrupt void local_DINTCH1_ISR(void)// DMA Channel 1 {i++;if(i<24)BufAdd++;else{BufAdd = DMABuf1;i=-1;}DMACH1AddrConfig(CMPA,BufAdd);EPwm1Regs.ETCLR.bit.SOCA = 1; //DmaRegs.CH1.CONTROL.bit.HALT=1;DmaRegs.CH1.CONTROL.bit.RUN=1;PieCtrlRegs.PIEACK.bit.ACK7 = 1; }
9.22补充:
在查看还未滤波的方波信号时发现一个周期有竟然有50个左右的方波信号产生,再仔细查看占空比发现要产生两个波形才会改变一次占空比。
于是尝试降低pwm波形的频率后发现一个周期就会产生25个波形了,所以现在的问题定位到dma传输的速度没有跟上pwm波形产生的速度,我觉得可能是dma中断里造成的影响,但不知道如何更改。
lion lee:
将dma中断函数里的DMACH1AddrConfig(CMPA,BufAdd);注释掉,直接对寄存器进行操作,解决问题。原因是对函数的调用花费了一定时间,加在一起就对结果产生了很大的影响
interrupt void local_DINTCH1_ISR(void)// DMA Channel 1 {i++;if(i<24){BufAdd++;}else{BufAdd = DMABuf1;i=-1;}//DMACH1AddrConfig(CMPA,BufAdd);EALLOW;// Set up SOURCE address:DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32)BufAdd;// Point to beginning of source bufferDmaRegs.CH1.SRC_ADDR_SHADOW =(Uint32)BufAdd;// Set up DESTINATION address:DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32)CMPA;// Point to beginning of destination bufferDmaRegs.CH1.DST_ADDR_SHADOW =(Uint32)CMPA;EDIS;