一、疑问
EPwm3Regs.TBPRD = EPWMPeriod_DC;
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm3Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm3Regs.TBPHS.bit.TBPHS = 0;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm3Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_DISABLE_ALL;
EPwm3Regs.EPWMSYNCOUTEN.bit.ZEROEN = SYNC_OUT_SRC_ENABLE;
EPwm8Regs.TBPRD = EPWMPeriod_DC / 8;
EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm8Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm8Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm8Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm8Regs.TBPHS.bit.TBPHS = 0;
EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm8Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM3;
EPwm3Regs.ETSEL.bit.INTEN = 1;
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; //标记:周期产生PWM3中断,把DMA_Data1[ ]求平均,DMA_Data2[ ]求平均,DMA_Data3[ ]求平均,
EPwm3Regs.ETPS.bit.INTPRD = ET_1ST;
EPwm8Regs.ETSEL.bit.SOCAEN = 1;
EPwm8Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; //标记:触发一次SOCA, 一个PWM3周期一共产生8次SOCA(为什么有16次采样?)
EPwm8Regs.ETPS.bit.SOCAPRD = ET_1ST;
////
ADC_setInterruptSource(myADCB_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER2); // 标记:每次采样完number2产生一次ADC中断,为什么开ADC中断?产生8次ADC中断有什么用?不是需求
////
DMA_setEmulationMode(DMA_EMULATION_STOP);
DMA_configAddresses(myDMA0_BASE, 5888, 2848);
DMA_configBurst(myDMA0_BASE, 3U, 1, 16); // 标记:参数3:代表3个数组BUF数设置, 参数1: 怎样计算得来?参数16: 怎样计算得来?
DMA_configTransfer(myDMA0_BASE, 16U, -2, -31); // 标记:参数16: 怎样计算得来? 参数-2: 怎样计算得来? 参数-31: 怎样计算得来?
DMA_configWrap(myDMA0_BASE, 16U, 0, 16U, 0);
DMA_configMode(myDMA0_BASE, DMA_TRIGGER_ADCB1, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT);
DMA_enableTrigger(myDMA0_BASE);
DMA_startChannel(myDMA0_BASE);
ePWM3作为主PWM,每个PWM周期内通过ePWM8触发采样,采样16次,每次采样3个信号:ADCB0,ADCB1,ADCB2。将ADCB0,ADCB1,ADCB2分别存于DMA_Data1,DMA_Data2,DMA_Data3中:
DMA_Data1 : origin = 0x001700, length = 0x000010
DMA_Data2 : origin = 0x001710, length = 0x000010
DMA_Data3 : origin = 0x001720, length = 0x000010
二、需求
现在ADCA (10通道),ADCB(8通道), ADCC(7通道), PWM 零点SOCA触发采样,采样ADCA.soc9采样完 ADCA1中断, 在ADC中断中分别读取ADCA ADCB ADCC结果值和控制
需求是ADCA有10个通道, 其中有4通道需要主开关周期采样2次,通过DMA传输,其余6通道采样一次(ADCA.result读取(不行通过采样2次)),一个开关周期只中断一次用作采样计算和控制环,pwm adc DMA需要怎样配置?谢谢。