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.

[参考译文] CCS/MSP430FR2155:ADC 通道结果

Guru**** 2562120 points
Other Parts Discussed in Thread: MSP430FR2155, MSP430FR2355

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/813234/ccs-msp430fr2155-adc-channel-results

器件型号:MSP430FR2155
主题中讨论的其他器件: MSP430FR2355

工具/软件:Code Composer Studio

大家好、

     我正在使用 MSP430FR2155控制器、在此我想使用 ADC A0-A6通道。 我正在尝试访问这些频道、但反复获取一个频道、因此请帮助我单独获取所有频道。

谢谢、

Sandhya Yadav

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

    你好,Sandhya

    让我们与另一个主题讨论这个问题。  https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/813229

    此致

    Gary

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

    大家好、

    我想在没有 ADC 中断的情况下逐一访问 ADC 的7个通道。 我该怎么做? 我已经参考了下面的代码、但希望使用计时器中断而不是 ADC 中断。  

    *--/版权--*/
    //
    // MSP430FR235x 演示- ADC、样片 A2/A1/A0、内部2V 参考
    //
    //说明:此示例在通道序列模式下工作。
    // A2/A1/A0以2V 为基准对16ADCclks 进行采样。
    //内部振荡器乘以采样(16x)和转换(13x)。
    //在 ADC_ISR A2/A1/A0内将采样值放入数组 ADC_Result [3]。
    // ACLK =默认 REFO ~32768Hz、MCLK = SMCLK =默认 DCODIV ~1MHz。
    //
    //
    // MSP430FR2355
    //------------
    ///|\||
    //|||
    //-|RST |
    //||
    //>--|P1.2/A2 |
    //>--|P1.1/A1 |
    //>--|P1.0/A0 |
    //
    //
    //现金 Hao
    // Texas Instruments Inc.
    // 2016年11月
    //使用 IAR Embedded Workbench v6.50.0和 Code Composer Studio v6.2.0构建
    //
    #include

    unsigned int adc_result[3];// 12位 ADC 转换结果数组
    unsigned char i;

    int main (空)

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //配置 ADC A1~2引脚
    P1SEL0 |= BIT1 + BIT2;
    P1SEL1 |= BIT1 + BIT2;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~LOCKLPM5;

    //配置 ADC
    ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON;// 16ADCclks、MSC、ADC 打开
    ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1;// ADC 时钟 ACLK、采样计时器、s/w 三态、单序列
    ADCCTL2 &=~ADCRES;//清除 ADCCTL 中的 ADCRES
    ADCCTL2 |= ADCRES_2;// 12位转换结果
    ADCMCTL0 |= ADCINCH_2 | ADCSREF_1;// A0~2 (EOS);Vref=2V
    ADCIE |= ADCIE0;//启用 ADC 转换完成中断

    //配置引用
    PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
    PMMCTL2 |= INTREFEN | REFVSEL_1;//启用内部2V 基准
    _DELAY_CYCLES (400);//基准趋稳延迟
    __no_operation();

    while (1)

    I = 2;
    while (ADCCTL1和 ADCBUSY);//等待 ADC 内核处于活动状态
    ADCCTL0 |= ADCENC | ADCSC;//采样和转换启动
    _bis_SR_register (LPM0_bits | GIE);//输入 LPM0、带中断
    __no_operation();//仅用于调试
    _delay_cycles (5000);
    __no_operation();

    // ADC 中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=ADC_vector
    _interrupt void ADC_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((interrupt (ADC_vector))) ADC_ISR (void)
    其他
    错误编译器不受支持!
    #endif

    switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))

    案例 ADCIV_NONE:
    中断;
    ADCIV_ADCOVIFG 案例:
    中断;
    案例 ADCIV_ADCTOVIFG:
    中断;
    ADCIV_ADCHIIFG 案例:
    中断;
    ADCIV_ADCLOIFG 案例:
    中断;
    ADCIV_ADCINIFG 案例:
    中断;
    ADCIV_ADCIFG 案例:
    ADC_RESULSE[i]= ADCMEM0;
    if (i ==0)

    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//存在 LPM0

    其他

    一----;

    中断;
    默认值:
    中断;

     请帮助

    谢谢、

    Sandhya Yadav

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

    如果您设置 ADCMSC=0 (即不要设置它)并且 CONSEQ=3、则每次启动(ADCSC)都会得到一个样本、但 ADC 仍会单步执行所有通道。 要获得7个通道、请使用 ADCINCH=6而不是 ADCINCH=2。

    我不太确定您想要实现什么。 要使用计时器触发器、请使用 ADCSHS;数据表(SLASEC4C)中提供了可能的触发器。表6-22。 您不希望在(触发)计时器的中断中获取 ADC 结果、因为(在如此慢的 ADC 时钟下) ADC 可能无法完成。

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

    感谢您的回复、

    我将与您核实并回复您。

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

    感谢您的回复、

    现在、我的 ADC 正在提供计数、但我有一个疑问、在没有 ADC 中断的情况下、当 ADCINCH = 6时、默认情况下自动更改通道所需的时间是多少、因为我已经为获得正确的 ADC 计数提供了一些延迟。

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

    我不建议对时钟进行计数(CPU 延迟)以等待 ADC 完成。 如果您的目标是摆脱 ADC 中断、请将通道计数(变量"i")移动到 main、并等待如下操作:

    > while (ADCCTL1 & ADCBUSY);//等待操作完成

    而不是 LPM0线路。