难道是我程序结构出了问题?就二个中断,就不工作了?求解!
msp430F2013void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Init_F2013(); //IO口设置
_EINT(); //允许全局中断。GIE=1
while(1)
{
LPM3; // 进入低功耗模式3,只有ACLK工作,最省电模式_BIS_SR(LPM3_bits + GIE);
}
}
/*******************************************************************************
看门狗中断函数:watchdog_timer();
*******************************************************************************/
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
Choose_CH(5); // 选择AD通道
Turn_on_Sampling(); // 接通采集电路的电源启动采集。开启AD中断使能,并开始AD转换
LPM3_EXIT; //退出低功耗模式,在AD完成后重新开启
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
Close_Sampling(); // SD16停止转换,禁止中断及关闭采集电路的电源。
adc_last_val = SD16MEM0; // 保存 ADC 最后的结果.
LPM3; // 恢复到 LPM3 。
}
本打算,定时器定时打开AD模块电源和中断使能,开始AD采集,在AD采集完再返回低功耗模式。。可按上面却始终得不到数据,
如果不用低功耗模式3,一直开启AD使能,可以采集数据 注意看手册,AD模块开启电源后是否有一定等待时间才能使用AD /*******************************************************************************
函 数:
Turn on_Sampling();
功 能:
打开参考电源,并启动AD转换
说 明:
看门狗定时采集数据时打开
*******************************************************************************/
void Turn_on_Sampling(void)
{
//SD16CTL |= (SD16VMIDON + SD16REFON); // 1.2V的参考电源。带缓冲器输出
SD16CTL |= SD16REFON; // 只打开1.2V参考源
Delay_us(500);
SD16CCTL0 |=(SD16SC + SD16IE); // 启动 SD16 进行转换并且允许 SD16 中断。
}
有延时的 看来大家都很忙呀,知道原因了,不能用LPM3_EXIT,这样的话DCO都关了,AD能出来才怪 这里用430的人不多吧 你得在第一个中断中打开总中断_EINT()才能进入第二个中断。
页:
[1]