zhuyi25762 发表于 2011-1-12 15:43:39

难道是我程序结构出了问题?就二个中断,就不工作了?求解!

msp430F2013


void 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使能,可以采集数据

zf12862177 发表于 2011-1-12 15:50:05

注意看手册,AD模块开启电源后是否有一定等待时间才能使用AD

zhuyi25762 发表于 2011-1-12 16:15:43

/*******************************************************************************
函 数:
      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 中断。
}


有延时的

zhuyi25762 发表于 2011-1-12 23:12:43

看来大家都很忙呀,知道原因了,不能用LPM3_EXIT,这样的话DCO都关了,AD能出来才怪

dianyuan 发表于 2011-1-19 08:54:34

这里用430的人不多吧

justiceren 发表于 2011-3-29 17:16:09

你得在第一个中断中打开总中断_EINT()才能进入第二个中断。
页: [1]
查看完整版本: 难道是我程序结构出了问题?就二个中断,就不工作了?求解!