This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5325:我想按 ADC12选择2个输入通道、但一个通道不起作用。

Guru**** 2391215 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/991445/msp430f5325-i-want-to-select-2-input-channels-by-adc12-but-one-channel-is-not-work

器件型号:MSP430F5325

代码:

void AdcInit (void)

   ADC12CTL0 = ADC12SHT02 + ADC12ON;        //采样时间、ADC12打开
   ADC12CTL1 = ADC12SHP;                    //使用采样计时器
   ADC12MCTL0 = ADC12INCH_2;              //选择输入通道2
   ADC12MCTL1 = ADC12INCH_3 | ADC12EOS;    //选择输入通道3
   ADC12IE = ADC12IE0;                      //启用中断
   ADC12CTL0 |= ADC12ENC;
   P6SEL |= BIT2 | BIT3;                    // P6.0 ADC 选项选择


#pragma vector = ADC12_vector
_interrupt void ADC12_ISR (void)

   uint16nTemp                     ;

   switch (__evo_in_range (ADC12IV、34))
   {
   情况 0:中断;                          //向量 0: 无中断
   情况 2:中断;                          //矢量 2: ADC 溢出
   情况 4:中断;                          //矢量 4: ADC 时序溢出
   情况 6:                                 //向量 6: ADC12IFG0
       nTemp                  = ADC12MEM0;
       tracelog ("ADC12MEM0 =%d\n"、nTemp);

       nTemp                  = ADC12MEM1;
       tracelog ("ADC12MEM1 =%d\n"、nTemp);

       _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);  //退出活动 CPU
       中断;
   案例 8:                                 //向量 8: ADC12IFG1
       中断;
   默认值:break;
   }

P6.2成功、但 P6、3失败、ADC12MEM1为零。 但 P6.3电压为3.3V

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >ADC12CTL0  = ADC12SHT02 + ADC12ON;        //采样时间、ADC12打开

    >ADC12CTL1 = ADC12SHP;                    //使用采样计时器

    这将设置 CONSEQ=0、这是单次转换。 在这种情况下、您需要 CONSEQ=1 (序列)和 MSC=1 (序列的单次触发器)。 尝试:

    >ADC12CTL0  = ADC12SHT02 + ADC12MSC + ADC12ON;        //采样时间、整个序列、ADC12打开。

    >ADC12CTL1 = ADC12SHP + ADC12CONSEQ_1;                    //使用采样计时器、通道序列

    ----------

    未经请求:您表示在第一个信道完成后完成、因此(可能)在第二个信道完成之前完成。  如果 tracelog()需要很长时间,这可能会因意外而起作用,但稍后可能会引起问题。 我建议:

    >ADC12IE   = ADC12IE1;                      //在第二个通道完成后启用中断

    然后在 ISR 中使用:

    >    案例 8:                                 //向量 8: ADC12IFG1
     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢。