请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 您好!
我已将 GPIO P1.4配置为 ADC10 (A4)的输入、ADC10在 A4引脚上执行16次测量、的2.5V 内部电压 用作基准电压。 转换工作正常。 问题在于进入和退出 LPM0模式。 如果在 while 循环之前我们进入 LPM0模式(_bis_SR_register (LPM0 + GIE))、则 永远不会执行 ADC10 ISR。 为什么? 提前感谢。
#include int adc [16]={0}; int avgadc = 0; volatile int conversionFlag = 0; int main (void){ WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 BCSCTL1 = CALBC1_1MHz;//设置范围 DCOCTL = CALDCO_1MHz; ADC10CTL1 = CONSEQ_2 + INCH_4; //重复单通道,A4 ADC10CTL0 = SREF_1 + REF2_5V + REFON + ADC10SHT_1 + MSC + ADC10ON + ADC10IE;//采样保持时间+ ADC10打开+中断使能 ADC10DTC1 = 0x10; // 16次转换 ADC10AE0 |= BIT4; // P1.4 ADC 选项选择 ADC10CTL0 &=~ENC; //禁用转换 while (ADC10CTL1 & BUSY); //如果 ADC10忙则等待 ADC10SA =(int) ADC; //将数据传输到下一个数组 ADC10CTL0 |= ENC + ADC10SC; //启用并开始转换 _bis_SR_register (LPM0 + GIE);//低功耗模式0、ADC10_ISR while (1){ if (conversionFlag){ avgADC =((ADC[0]+ADC[1]+ADC[2]+ADC[3]+ADC[4]+ADC[5]+ADC[6]+ADC[7]+) ADC[8]+ADC[9]+ADC[10]+ADC[11]+ADC[12]+ADC[13]+ADC[14]+ADC[15])>> 4); conversionFlag = 0; _bis_SR_register (LPM0 + GIE);//低功耗模式0、ADC10_ISR } }; } // ADC10中断服务例程 #pragma vector=ADC10_vector __interrupt void ADC10_ISR (void) { conversionFlag = 1; _BIC_SR_REGISTER_ON_EXIT (CPUOFF); }
此致、
弗兰·马丁。