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.

ADC12转换触发源的问题



我想用定时器触发ADC12转换,根据数据手册所说

ADC12SHS位为01时可以有TA1触发,代码如下

ADC12CTL0 = ADC12ON+ADC12SHT0_4 + ADC12REFON + ADC12REF2_5V;
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_0 + ADC12SHS_1; 
ADC12IE = 0x01; 
ADC12CTL0 |= ADC12ENC;

TA1CCTL0= CCIE + CCIS_1; // CCR0 interrupt enabled
TA1CCR0 = 30;
TA1CCR1 = 20;
TA1CTL = TASSEL_2 + MC_1 + TACLR;

我这样配置后不能触发ADC12开始转换,请问是否有相关示例代码提供?

  • 我自己终于研究出来了,TI数据手册写的确实坑。

            整个过程是这样的,手册上写的用TA0定时器的CCR1(也就是TA0CCR1)寄存器触发ADC,当TA0R的值增加到与TACCR1的值相等时,TA0.0(在5529上是P1.2)这个引脚的电平变化,上升沿触发ADC开始采样。

            那么我想要的结果就是TA0.0在TA0R的值增加到和TA0CCR1的值相等时TA0.0置1,之后TA0R增加到和TA0CCR0的值相等时TA0R清零,TA0.0置0。如此循环就可以靠TA0.0的上升沿定时触发ADC开始转换。

            定时器配置如下(增计数模式,输出模式3->数到TA0CCR1时TA0.0置1,数到TA0CCR0时TA0,0置0,定时器清零)

            TA0CCR0 = 30;
            TA0CCR1 = 20;
            TA0CCTL1 |= OUTMOD_3; 
            TA0CTL = TASSEL_2 + MC_1 + TACLR; 

             接下来是ADC寄存器配置,最坑爹的地方就在这里。想要让定时器TA0触发,ADC12CTL1的ADC12SHS位置为01,然后选择脉冲采样模式,就是只管发送采样起始信号,采样保持时间由自己选择的时钟周期数决定。然后最容易出错的就是要把ADC12CONSEQ设置为10(单通道重复采样)。剩下的就都很简单了,就是这个ADC12CONSEQ浪费我1个下午,简直和直觉不符合。

             ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2 + ADC12SHS_1; 

             ADC12CTL0 = ADC12ON+ADC12SHT0_4 + ADC12REFON + ADC12REF2_5V;
         
             ADC12CTL0 |= ADC12ENC;

            

  • 定时器输出模式3(数到TA0CCR1时TA0.0置1,数到TA0CCR0时TA0.0置0,定时器清零)

    TA0CCR0 = 30;
    TA0CCR1 = 20;
    TA0CCTL1 |= OUTMOD_3; 
    TA0CTL = TASSEL_2 + MC_1 + TACLR; 

    ADC脉冲采样模式,注意转换模式要设置为单通道重复采样!!!

    ADC12CTL0 = ADC12ON+ADC12SHT0_4 + ADC12REFON + ADC12REF2_5V;
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2 + ADC12SHS_1; 
    ADC12CTL0 |= ADC12ENC;

  • 楼主厉害,佩服

    官网有定时器B触发adc12采样的例程