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.

[参考译文] MSP430FR5994:ADC12始终占线的简单模拟读取

Guru**** 2586755 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/617905/msp430fr5994-simple-analog-read-with-adc12-always-busy

部件号:MSP430FR5994

我尝试使用ADC12执行简单的模拟读取,但我的代码总是挂起在ADC12BUSY标志上。 这是我的代码:

void main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器

用于(;;){
Int val = AnalogRead (ADC12INCH_5);//读取A5
}
}


int AnalogRead (uint8_t通道)
{
/*配置ADC信道*/
ADC12CTL0 &=~ADC12ENC;//确保ENC为0,以便我们可以配置读取
ADC12CTL0 = ADC12SHT0_3 + ADC12ON + ADC12IE0;//64 clk ticks,ADC ON,ENABLE INTERRUPT
ADC12CTL1 = ADC12SSEL_0 +通道;//SMCLK,通道
ADC12CTL0 |= ADC12ENC + ADC12SC;//启用并开始转换
while ((ADC12CTL1 & ADC12BUSY)== 0x01);//等待转换结束
返回ADC12MEM0;
}//

ADC12中断服务例程
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR(void){

__BIC_SR_REGISTER_ON_EXIT (CPUOFF;//返回活动模式
} 

在逐步执行代码时,我无法通过while循环。 使ADC停止并清除占线标志时缺少什么?  

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

    这将设置CONSEQ=2,它连续运行ADC (始终占线)。
    尝试:

    ADC12CTL1 = ADC12SSEL_0;// ADC12OSC
    ADC12MCTL0 =通道;//通道