主题中讨论的其他器件: ENERGYTRACE
大家好、
我无法理解 MSP430FR5994中 ADC12_B 的行为。
我已经设置了两个通道 MCTL0和1、并且在 MCTL1上设置 EOS/使能的中断。 因此、我希望该中断每隔一个 ADC 触发就会发生一次。
我已将计时器 B 设置为8Hz 时的触发器、并将其配置为切换引脚输出。
我还切换了 ADC ISR 中的另一个引脚、这种切换频率为2Hz、而不是预期的4Hz。
我想我会误解一些东西。 在自动扫描中、 我尝试切换、然后重置并忽略 ENC 位、似乎没有任何变化。
我还尝试了重复自动扫描。 仍然是一样的。 接下来的描述我认为这个模式将允许连续读取通道,0然后读取1 (使用 ISR()),然后读取0再读取1…… 而无需触摸 ENC。
--
我使用了1秒的 Energytrace、如下所示。 它显示 ADC 导通时间为0.25s、在8hz 时等于2个读数。 然后关闭0.25s、再打开... 似乎解释了为什么速率降低2倍、 但为什么在序列完成后存在此差距?
/* * main 函数 */ int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 init_gpio(); init_Clock(); init_Timer_TB0 (); init_adc_aderent_autoscan(); while (1) { //scope_blue_low; _bis_SR_register (LPM3_bits | GIE);//输入 LPM3、带中断 __no_operation(); //对于调试器 } } //ADC 设置 void Init_adc_ere重复_autoscan() { /*设置 ADC 引脚*/ P3SEL0 |= ADC_A15_PIN; P3SEL1 |= ADC_A15_PIN; /* * MSC=0:上升沿触发每个 S&C *采样时间、S&H=4、ADC12打开 * ADC12CTL0 = ADC12SHT0_0 | ADC12ON; /*重复自动扫描 *使用 TB0.0进行触发 * SAMPCON 源自采样定时器。 * ADC12SSELx:0 = MODOSC 是时钟源 * ADC12CTL1 = ADC12SHP | ADC12SH_2 | ADC12CONSEQ_3; /* * ADC12CTL2设置位深度、diff、lpmode * ADC12CTL3设置内部 ADC 通道 *现在保留默认值。 * /* * A15 ADC 输入选择。 * Vref+= AVCC、Vref-= AVSS * ADC12EOS:序列结束 *@TODO -如果在重复自动扫描中未设置 EOS、会发生什么情况? 可以持续那么长的时间 *当您在被覆盖之前获得 memx 结果时? (IFG 仍然可以触发一个读取) * ADC12MCTL0 = ADC12INCH_15;//通道:ADC12INCH_15 ADC12MCTL1 = ADC12INCH_15 | ADC12EOS;//通道:ADC12INCH_15 /* *中断 * ADC12IER0 |= ADC12IE1;//在 IFG1上启用 ADC 中断 ADC12CTL0 |= ADC12ENC; //启用转换 } ... ADC ISR()的//位 案例 ADC12IV_ADC12IFG1://向量14:ADC12MEM1 IF (ADC12MEM1 >= APP_LIGHT_THRESHOLD) 高于环境温度水平。 { P1OUT |= BIT0; // P1.0 = 1 } 其他 { P1OUT &=~BIT0; // P1.0 = 0 } // ADC12CTL0 &=~ADC12ENC; //ADC12CTL0 ^= ADC12ENC; 示波器_PURP_TOG; //ADC12CTL0 |= ADC12ENC; _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); 中断;



