在底点触发EPWM,然后EPWM触发CLA
在顶点TBRPD触发ADC转换
修改后:在顶点触发ADC转换,转换完成产生ADC的SOC中断信号,中断信号触发CLA任务
没有用到EPWM中断,所以关闭EPWWM中断
第一步:先关闭EPWM中断
inline void InitEPwm1_Six_step_DPWM(void)
inline的作用,把这一段代码直接复制到程序这里不需要调用,占空间但是速度快。
本项目中只用到了epwm1中触发中断,其余两个没有用EPWM中断,所以只需要关闭EPWM1中的中断使能位即可。
EPwm1Regs.ETSEL.bit.INTSEL = 0x1;
EPwm1Regs.ETSEL.bit.INTEN = 0x0;// 关闭EPWM的中断INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;
第二步:ADC中配置中断
//AdcRegs.INTSEL1N2.bit.INT1SEL = 0x05;//(之前的)
这个配置在SOC5(具体是ADC哪一个需要自己的查一下)完成以后触发ADC中断ADC的中断是完成转换以后,需要确定完成哪一个转化产生中断
//SOC5---EPWM1Asoc---ADCINB0----Sample window is 7 cycles long
修改后的:AdcRegs.INTSEL1N2.bit.INT1SEL = 0x0A;
现在修改为在SOC10完成后触发ADC中断(这个SOC10主要是看你自己的排序,如果你后边没有用到,可以选择提前的。)
AdcRegs.ADCSOC11CTL.bit.TRIGSEL=0x05;
触发源的选择,我在EPWM1A配置了SOC信号,ADC这里配置相对应的即可
这样一旦EPWM1A产生触发信号,TRIGSE都要选择这个触发源,因为其他的我没有配置我这边就可以开始转换。
AdcRegs.ADCSOC11CTL.bit.CHSEL=0xE;
AdcRegs.ADCSOC11CTL.bit.ACQPS=samplewindow;
AdcRegs.INTSEL1N2.bit.INT1E = 0x1;// 使能中断
修改前:AdcRegs.INTSEL1N2.bit.INT1CONT = 0x1;//连续模式
修改后:AdcRegs.INTSEL1N2.bit.INT1CONT= 0x0;//断续模式,需要清除标志位(后来修改成连续模式了,原因未知)
//ADC转换完成产生一个EOC,EOC产生中断
这个中断可以触发别的事情
第三步:修改CLA中的中断触发方式
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL=CLA_INT1_EPWM1INT;//CLA_INT1_ADCINT1;
一个是EPWM1INT中断
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL=CLA_INT1_ADCINT1;//CLA_INT1_ADCINT1;
一个是ADC中断