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.

MSP430G2553的AD DTC功能的一个小问题

Other Parts Discussed in Thread: MSP430G2553

TI的工程师好!我这两天在学MSP430G2553的AD模块,其中多通道采样用了DTC功能,对通道11(半电源)和通道10(内置温度传感器)进行采样,一开始定义的数据存储区是一个大小为2的数组,调试总是有问题,后来发现只要采用DTC,指定INCH_X后,就会将INCH_X以下的所有通道都采样并传输到数据存储区中,也就是ADC10AE0失效了?如果是这样的话,那假如我只想采样通道10和11,那么意味着寄存器ADC10DTC1的值至少为12(最高通道为11,总共12个通道,每个通道至少采样一次)?同时数据存储区大小也必须为12?请问是这样理解的吗?谢谢!

  • 楼主,

    你好,如果没有在ADC10AE0/1中使能的通道应该不会被采样的,你可以参考一下下面的代码,使用DCT采集A3~A1通道的数据,没有采集A0通道,结果放到0x200开始的3个字节中,希望对你有帮助:

    // MSP430G2x33/G2x53
    // -----------------
    // /|\| XIN|-
    // | | |
    // --|RST XOUT|-
    // | |
    // >---|P1.3/A3 P1.0|-->LED
    // >---|P1.2/A2 |
    // >---|P1.1/A1 |
    //
    // D. Dang
    // Texas Instruments Inc.
    // December 2010
    // Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
    //******************************************************************************
    #include <msp430.h>

    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    ADC10CTL1 = INCH_3 + CONSEQ_1; // A3/A2/A1, single sequence
    ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
    ADC10DTC1 = 0x03; // 3 conversions
    ADC10AE0 |= 0x0E; // P1.3,2,1 ADC10 option select
    P1DIR |= 0x01; // Set P1.0 output

    for (;;)
    {
    ADC10CTL0 &= ~ENC;
    while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
    ADC10SA = 0x200; // Data buffer start
    P1OUT |= 0x01; // P1.0 = 1
    ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
    P1OUT &= ~0x01; // P1.0 = 0
    }
    }

    // ADC10 interrupt service routine
    #pragma vector=ADC10_VECTOR
    __interrupt void ADC10_ISR(void)
    {
    __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
    }