主题中讨论的其他部件: MSP430FR2311
工具/软件:Code Composer Studio
您好,
我正在使用MSP430FR2111在LPM3中等待一段时间后读取ADC值。 我正在使用计时器B0中断唤醒。 ADC也使用中断。
一切正常(LED´s闪烁,ADC_RESult填充´s数据),直到控制器在大约20秒后重置。 ADC_Result中的数据被擦除,ADC再次开始在位置0中写入数据。
我尝试了几件事,但没有任何帮助。
我正在使用CCS 7.2 和MSP430FR2311 LaunchPad对自己的MSP板进行编程。
这是我的代码:
#include <msp430fr2111.h>
无符号int计数器=0;
无符号int i =0;
无符号int ADC_Result [60];
void main (void){
WDTCTL = WDTPW + WDTHOLD;//停止WDT
P1DIR |=0x03;//将WFP 1.2 设置为输出方向
P2DIR |= 0x01;//将WFP 2.0 设置为输出方向
P2DIR |= 0x02;//将WFP 2.1 设置为输出方向
P1OUT = 0x00;//将P1输出设置为低
P2OUT = 0x00;//设置P2输出过低
PM5CTL0 &=~LCKLPM5;//禁用GPIO开机默认高阻抗模式
//以激活先前配置的端口设置
//配置ADC10
ADCCTL0 |= ADCSHT_2 | ADCON;// ADCON,S&H=16 ADC CLKS
ADCCTL1 |= ADCSHP;// ADCCLK = MODOSC;采样计时器
ADCCTL2 |= ADCRES;// 10位转换结果
ADCMCTLS0 |= ADCINCH_0;// A0 ADC输入选择;Vref=AVCC
ADCIE |= ADCIE0;//启用ADC连接完全中断
TB0CCTL0 = CCIE;// CCR0中断已启用
TB0CCR0 = 511;//计时器计数比较:4095 -> 1秒,
TBCTL = TBSSEL_1 + ID_3 + MC_1;// ACLK,/8,upmode
_BIS_SR (LPM3_Bits + GIE);//输入带中断的LPM3
用于(;){}
}
//计时器A0中断服务例程
#pragma vector=TIMER0_B0_vector
__interrupt void Timer_B (void)
{
计数器++;
IF (计数器= 5)// 1 min 480
{
P1OUT |= 0x03;//设置输出WFP 1.2
P2OUT |= 0x01;//将LED设置为绿色
}
IF (计数器=6)
{
ADCCTL0 |= ADCENC | ADCSC;//开始采样和转换
P2OUT &=~(0x01);//透明LED绿色
P2OUT |= 0x02;//将LED设置为红色
计数器= 0;
_BIS_SR (LPM0_BITS | GIE);// LPM0,带中断
}
否则
{
_BIS_SR (LPM3_Bits + GIE);//输入带中断的LPM3
}
}
// ADC中断
#pragma vector=ADC_vector
__interrupt void ADC_ISR(void)
{
SWITCH(__EIV_IN_RANGE(ADCIV,ADCIV_ADCIFG))
{
案例ADCIV_NONE:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
Case ADCIV_ADCOVIFG:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
Case ADCIV_ADCTOVIFG:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
Case ADCIV_ADCHIIFG:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
Case ADCIV_ADCLOIFG:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
Case ADCIV_ADCINIFG:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
问题ADCIV_ADCIFG:
P1OUT &=~(0x03);//清除输出WFP 1.2
P2OUT &=~(0x02);//透明LED红色
ADC_result[i]= ADCMEMM0;
I++;
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
默认:
_BIS_SR (LPM3_Bits + GIE);//输入带中断0的LPM3
中断;
}
}
非常感谢!