Other Parts Discussed in Thread:MSP430F1232
TI工程师您好:
我公司使用msp430f1232芯片使用外部4M晶振,4M晶振可以正常起振(在没有进入LPM4前),进入LPM4后再通过外部中断出低功耗后4M晶振就不起振(不工作)。
时钟配置程序
void OSC_INIT()
{
int i;
BCSCTL1|= XTS;
do
{
IFG1&=~OFIFG;
for(i=500;i>0;i–);
P2DIR |= BIT2; //red
P2OUT |= BIT2;
}
while((IFG1&OFIFG)!=0);
BCSCTL2|=SELM_2+SELS;
P2OUT &=~ BIT2;
}
进入低功耗
_BIS_SR(LPM4_bits);
出低功耗
#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
P1IFG = 0; _BIC_SR_IRQ(LPM4_bits); // 退出休眠模式}
我公司怀疑是OSCOFF有关系,在LPM4模式会关闭OSCOFF,但是在出低功耗却不能开OSCOFF,在程序中写 _BIS_SR(OSCOFF);也不能使晶振起振。目前我们解决方法在每次出低功耗后重新运行一遍时钟配置程序,总感觉这种方法不合适,因为我们让芯片1秒钟进出5次低功耗。现在的关键点为什么不能打开OSCOFF。
Susan Yang:
从LPM4中退出后,XT1 / XT2将自动重新启动。但是,晶振需要一些时间才能开始正确振荡,并且直到软件清除故障状态位(就像初始化晶振时一样),XT1 / XT2才真正被使用
do{IFG1 &= ~OFIFG;// Clear OSCFault flagfor (i = 0xFF; i > 0; i–);// Time for flag to set}while ((IFG1 & OFIFG));// OSCFault flag still set?