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/MSP-EXP430F5529LP:如何配置 ADC12CTL0、ADC12CTL1或 ADC12CTL2寄存器以1kHz 的频率采样?

Guru**** 2603825 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/647533/ccs-msp-exp430f5529lp-how-can-i-configure-the-adc12ctl0-adc12ctl1-or-adc12ctl2-registers-to-sample-at-1khz

器件型号:MSP-EXP430F5529LP
主题中讨论的其他器件:MSP430WARE

工具/软件:Code Composer Studio

大家好、

我正在尝试从 P6.0、P6.1、P6.2到3个加速计(ADXL335)读取值、并使其以1KHz 采样。 我选择了5MHZ 时钟源(UCS 的振荡器)。 我正在尝试使用驱动程序库函数来配置寄存器、但我不确定如何配置。 有人可以告诉我吗?

此致、

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

    已编辑:添加了额外的 M 而不是 K。已修复。

    您好!

    如果您希望每1kHz 接收一次采样、则需要触发 ADC 以每1kHz 采样一次。 这可以通过软件环路来完成、也可以设置计时器以每1kHz 触发一次 ADC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这里有一个额外的"M"。 ^μ A)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否介意进一步详细说明如何设置计时器?  

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

    您可以在器件 MSP430WARE 的代码示例部分中找到计时器设置和 ADC 设置示例。 MSP430WARE 可通过 TI Resource Explorer 找到、该资源浏览器可在 CCS 或 http://dev.ti.com 中找到。 有关使用计时器触发 ADC 的更多信息、请参阅器件用户指南的 ADC 部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我感到困扰的是、似乎没有计时器触发示例(也称为固定速率采样)、因此我花了15分钟黑客入侵 TI 示例 ADC_06的副本来执行此操作。

    无保修、无支持等。

    //这是 TI 示例 MSP430F55xx_ADC_06.c 的一个黑客攻击
    //它提供了一个选项 ADC_timer=1、该选项将执行固定速率
    //以(SMCLK/20000) Hz (标称值为50Hz)进行采样。
    //(可以更快地运行、但这提供了可见的 LED 闪烁。)
    //
    为简洁起见、我删除了 TI 方框注释、但 TI
    //版权(大概)仍然适用于其代码。
    //这是按原样提供的,不提供任何担保,而且所有这些都是如此。
    //
    #include 
    
    #define ADC_TIMER1 //对 ADC 触发
    器#define ADC_TIMER_PERIOD 20000使用计时器(TA0) // 1MHz/20000 = 50Hz。 根据口味进行调整。
    #define USE_LED 1 // P4.7 Launchpad LED 上的闪烁
    
    #define Num_for_results 8
    
    volatile unsigned int A0results[Num_for_results];
    volatile unsigned int A1results[Num_for_results];
    volatile unsigned int A2results[Num_for_results]
    ;
    
    int main (void)
    {
    +TCTL = WDWPW; //停止看门狗计时
    器#if USE_LED
    P4OUT &=~BIT7; // Launchpad LED2=P4.7 (高电平有效)
    P4DIR |= BIT7; //输出
    #endif // USE_LED
    P6SEL = 0x0F; //启用 A/D 通道输入
    ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8;//打开 ADC12,延长采样时间
    //避免结果溢出
    #if ADC_TIMERR
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1; //使用采样计时器,每次触发一次突发
    #else
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; //使用采样计时器、重复序列
    #endif // ADC_TIMER
    ADC12MCTL0 = ADC12INCH_0; // ref+=AVcc、channel = A0
    ADC12MCTL1 = ADC12INCH_1; // ref+=AVcc、channel = A1
    ADC12MCTL2 = ADC12INCH_2; // ref+=AVcc、通道= A2
    ADC12MCTL3 = ADC12INCH_3+ADC12EOS; // ref+=AVcc、channel = A3、end seq
    ADC12IE = 0x08; //启用 ADC12IFG.3
    #if ADC_timer
    // SLAS590M 表6-11显示 ADC12SHS=1对应
    于// TA0:CCI1B,即通过 F5529上的 TA0CCR1生成的脉冲。
    //对于其他人,请查看数据表。
    //此代码生成一个脉冲序列,其中上升沿为中间值
    //经过该周期,没有特殊的原因。
    TA0CCTL1 = OUTMOD_3; //设置/复位上升沿
    TA0CCR1 = ADC_TIMER_PERIOD/2-1; //完成
    TA0CCR0的一半= ADC_TIMER_PERIOD-1; //每20000个 SMCLK (即50Hz)循环一次。
    ADC12CTL1 |= ADC12SHS_1; // SHS=1表示 F5529
    ADC12CTL0 |= ADC12ENC 上的 TA0:CCI1B; //请注意,这会锁定其他 ADC12字段。
    TA0CTL = tassel_2 | ID_0 | MC_1 | TACLR;// SMCLK、/1、up (、clear)
    #else
    ADC12CTL0 || ADC12ENC; //启用转换
    ADC12CTL0 |= ADC12SC; //开始转换-软件触发
    器#endif
    
    _bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断
    __NO_OPERATION (); //对于调试
    
    器}
    
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector=ADC12_vector
    __interrupt void ADC12ISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (ADC12_vector))#void ADC12ISR
    
    (void))(void 编译器#12ISR (void)))不支持!错误!错误!
    #endif
    {
    static unsigned int index = 0;
    
    switch (__even_in_range (ADC12IV、34))
    {
    case 0:break; //向量0:无中断
    情况2:中断; //向量2:ADC 溢出
    情况4:中断; //向量4:ADC 时序溢出
    情况6:中断; //向量6:ADC12IFG0
    情况8:中断; //向量8:ADC12IFG1
    大小写10:break; //向量10:ADC12IFG2
    情况12: //向量12:ADC12IFG3
    A0Results[索引]= ADC12MEM0; //移动 A0结果,IFG 被清除
    A1Results[索引]= ADC12MEM1; //移动 A1结果,IFG 被清除
    A2Results[索引]= ADC12MEM2; //移动 A2结果,IFG 被清除
    A3Results[索引]= ADC12MEM3; //移动 A3结果、IFG 被清除
    #if ADC_TIMER
    ADC12CTL0 &=~ADC12ENC; //重新启动突发触发器
    ADC12CTL0 |= ADC12ENC; //另请参见 SLAU208P 图28-8#endif
    
    索引++; //将结果索引递增,取模;在此处设置 Breakpoint1
    
    如果(索引=Num_for_results)
    {
    (索引= 0);
    #if USE_LED
    P4OUT ^= BIT7; //每换行切换一次 Launchpad LED2 (50/8/2=~3Hz)
    #endif // use_LED
    }
    案例14:中断; //向量14:ADC12IFG4
    情况16:中断; //向量16:ADC12IFG5
    情况18:中断; //向量18:ADC12IFG6
    案例20:中断; //向量20:ADC12IFG7
    case 22:break; //向量22:ADC12IFG8
    case 24:break; //向量24:ADC12IFG9
    大小写26:break; //向量26:ADC12IFG10
    case 28:break; //向量28:ADC12IFG11
    case 30:break; //向量30:ADC12IFG12
    大小写32:break; //向量32:ADC12IFG13
    case 34:break; //向量34:ADC12IFG14
    默认值:break;
    }
    }
    

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

    很抱歉耽误你的回答。 感谢你的帮助!