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.

[参考译文] MSP430FR2422:MSP430FR2422

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/943410/msp430fr2422-msp430fr2422

器件型号:MSP430FR2422

我已经为多通道单次转换编写了代码。 我正在使用3个通道,但所有通道相同的值都将出现。

我想测试3通道连续中断方法。 如何实现。 请指导我  

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

    您好,Mutharagan,

    我建议您从此处提供的示例开始:

    https://dev.ti.com/tirex/explore/node?node=AOHibD2F6gfbdA6GAGpeEw__IOGqZri__LATEST

    并进行增量修改以满足您的要求。

    BR、
    Leo

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

    如果您使用的是 CONSEQ=1、MSC=1和 MODOSC (ssel=0)、则在第三个结果到达之前无法成功获取前两个结果。

    FR2系列没有 DMA 或 DTC (如相关线程所示)、并且只有一个 ADCMEM 寄存器。

    如果您使用 MSC=0和定时器触发器(SHS=2)、则可以使用定时器周期将触发器留出空间、以便代码有足够的时间获取每个结果。 您也可以使用 ACLK (ssel=1)和/或较大的 SHTs 值来获得这种效果、但这具有使采样/保持周期非常长的副作用。

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

    尊敬的先生:

    感谢您的及时帮助。 非常感谢您的帮助。 我知道 MSP430FR2422控制器只有一个 ADCMEM0寄存器。

    我在下面提到的问题中有一些疑问。

    控制   器需要对通道进行监测1以实现连续中断10微秒、并通过轮询方法并行测量2Nos 通道。 这是我们的要求。 请帮帮我。

    2.我用轮询方法为2通道编写了代码。 但是、如果任何一个通道发生任何变化。 另一个通道值也会受到影响、有时我无法更改该值。

    这些是 我的2 Nos 通道轮询方法的硬代码。 请告诉我一些想法。 一个通道输入是稳定的。 另一个通道值在变化。

    void ADC_Configuration (void)

      //配置 ADC10

    #if 0

        ADCCTL0 |= ADCSHT_2 | ADCON;                            // ADCON、S&H=16 ADC CLKS

        ADCCTL1 |= ADCSHP;                                      // ADCCLK = MODOSC;采样计时器

        ADCCTL2 |= ADCRES;                                     // 10位转换结果

        ADCMCTL0 |= ADCINCH_0;                                  // A0 ADC 输入选择;Vref=AVCC

        ADCIE |= ADCIE0;                                        //启用 ADC 转换完成中断

    #endif

     

    #if 1.

          ADCCTL0 |= ADCSHT_2 | ADCON;

          ADCCTL1 |= ADCSHP;                                      // ADCCLK = MODOSC;采样计时器

         ADCCTL2 |= ADCRES;

    #endif

     

    void ADC_ChannelConfiguration (void)

      //配置 ADC A0,A1pin

        SYSCFG2 |= ADCPCTL0 |ADCPCTL1;

    void ADCstartEvent (void)(空)

      ADCCTL0 |= ADCENC | ADCSC;                          //采样和转换启动

     

    void ADC_TVSdiodeTemperature (void)

    {  SYSCFG2 |= ADCPCTL0;

      ADCCTL1 |= ADCCONSEQ_0;

      ADCMCTL0 |= ADCINCH_0;                                //P1.0通道 A0

      ADCstartEvent();

      while (ADCCTL1和 ADCBUSY);

      TVSTempCount += ADCMEM0;

      COUNT1 ++;

      SYSCFG2 &=~ ADCPCTL0;

      ADCCTL0 &=~ADCENC;

      if (国家1 > 100)

      {

          TVSTempCount =TVSTempCount/100;

          TVSTempVolatge = TVSTempCount * 3.3/1024;

          TVSTempCount=0;

          COUNT1 =0;

      }

    void ADC_TVSdiodeLeakageCurrent (void)(空)

    {  SYSCFG2 |=ADCPCTL1;

        ADCCTL1 |= ADCCONSEQ_0;

        ADCMCTL0 |= ADCINCH_1;

        ADCstartEvent();

        while (ADCCTL1和 ADCBUSY);

        LekageCount+=ADCMEM0;

        计数2++;

        SYSCFG2 &=~ADCPCTL1;

        ADCCTL0 &=~ADCENC;

        if (国家2 > 100)

        {

            LekageCount = LekageCount/100;

            TVSLkgVoltage = LekageCount * 3.3/1024;

            LekageCount=0;

            COUNT2 = 0;

        }

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

    >ADCMCTL0 |= ADCINCH_0;  

    这不会设置 ADCINCH=0、因为 ADCINCH_0=0。 我怀疑这是您看到的失败。 由于您不使用 ADCSRF、因此最简单的修复方法是:

    >ADCMCTL0 = ADCINCH_0;  

    ------

    >ADCCTL2  |= ADCRES;

    这将设置保留(非法)的 ADCRES=3。 我怀疑您想要:

    >ADCCTL2  |= ADCRES_1;  // ADCRES=1 (10位)