Thread 中讨论的其他器件:controlSUITE、 C2000WARE
工具/软件:Code Composer Studio
我需要 ADC 模块的 SOC3-SOC12每1ms 启动一次转换。下面列出了我的 ADC 模块配置:
EALLOW; AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0x03;//< SOC0-SOC2为高优先级; AdcRegs.SOCPRICTL.bit.OneShot = 1;//<启用单次触发模式。 AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x03; AdcRegs.ADCSOC1CTL.bit.CHSEL = 0x05; AdcRegs.ADCSOC2CTL.bit.CHSEL = 0x0C; AdcRegs.ADCSOC3CTL.bit.CHSEL = 0x00;//< ADCINA0、电网电压 L1n; AdcRegs.ADCSOC4CTL.bit.CHSEL = 0x01;//< ADCINA1、电网电压 L2n; AdcRegs.ADCSOC5CTL.bit.CHSEL = 0x02;//< ADCINA2、电网电压 L3n; AdcRegs.ADCSOC6CTL.bit.CHSEL = 0x0A;//< ADCINB2、直流总线电压; AdcRegs.ADCSOC7CTL.bit.CHSEL = 0x07;//< AdcRegs.ADCSOC8CTL.bit.CHSEL = 0x04;//< ADCINA4、充电模块温度; AdcRegs.ADCSOC9CTL.bit.CHSEL = 0x06;//< ADCINA6、IPM 温度; AdcRegs.ADCSOC10CTL.bit.CHSEL = 0x08;//< ADCINB0、空气温度; AdcRegs.ADCSOC11CTL.bit.CHSEL = 0x09;//< ADCINB1、电机温度; AdcRegs.ADCSOC12CTL.bit.CHSEL = 0x0B;//< ADCINB3、IGBT 温度; AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x06;//< ePWM1 ADCSOCB 触发 SOC0 AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x06;//< ePWM1 ADCSOCB 触发 SOC1 AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x06;//< ePWM1 ADCSOCB 触发 SOC2 AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 1;//< CPU 定时器0触发 SOC3 AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 1;//< CPU 定时器0触发 SOC4 AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 1;//< CPU 定时器0触发 SOC5 AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 1;//< CPU Timer0触发器 SOC6 AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 1;//< CPU Timer0触发器 SOC7 AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 1;//< CPU Timer0触发 SOC8 AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 1;//< CPU Timer0触发 SOC9 AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 1;//< CPU Timer0触发 SOC10 AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 1;//< CPU Timer0触发 SOC11 AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 1;//< CPU Timer0触发 SOC12 AdcRegs.INTSEL1N2.bit.INT1CONT = 1;//<启用连续模式。 AdcRegs.INTSEL1N2.bit.INT1SEL = 2;//<在与 SOC2竞争之后将生成中断。 AdcRegs.INTSEL1N2.bit.INT2CONT = 1;//<启用连续模式。 AdcRegs.INTSEL1N2.bit.INT2SEL = 12;//<在与 SOC11竞争之后将生成中断。 AdcRegs.INTSEL1N2.bit.INT1E = 1; AdcRegs.INTSEL1N2.bit.INT2E = 1; AdcRegs.ADCINTSOCSEL1.ALL = 0; AdcRegs.ADCINTSOCSEL2.ALL = 0; AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;/ADCINT 在转换结束时生成 AdcRegs.ADCCTL1.bit.VREFLOCONV = 0; AdcRegs.ADCCTL1.bit.TEMPCONV = 0; AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;//<选择内部基准电压。 AdcRegs.ADCCTL1.bit.ADCENABLE = 1; EDIS;
有两个 ADC 中断、一个用于 SOC2、另一个用于 SOC12。CPU 定时器0被配置为每1ms 发出一次中断、运行良好。但是 CPU 只调用 ADCINT2的 ISR 两次。这个问题困扰了我一整天。最后、我不得不将触发源更改为软件触发。
有没有人可以告诉我为什么 ADC 不使用 CPU 定时器0作为其触发源?
提前感谢您的帮助。