在一本参考书上看到一段程序中的中断处理函数是这样写的:
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR(void)
{
_BIC_SR(SCG0); //如果从LPM3唤醒,恢复时钟准确性
…..
}
上面 _BIC_SR(SCG0)的作用是什么?其给出的解释,没看懂。关于进入中断后的模式,《User's Guide》给出的说法是The CPUOFF, SCG1, and OSCOFF bits are automatically reset,可见对于位SCG0是没有操作的,这是为什么呢?不是进入中断即退出低功耗模式进入活动模式吗?为什么不把SCG0一起复位呢?如果SCG0不和其他控制位一起复位,那么中断后进入的活动模式和正常的活动模式是不一样的吗?如果我设置MCLK或SMCLK来源于DCO,进入中断后由于SCG0没有自动复位,会有什么样的影响,需要手动复位吗?请教下各位,谢谢啦
Peter_Zheng:
第一个是SCCG0这个是错的,应该是SCG0
_BIS_SR(SCG0) 将SCG0置1.
时钟根据进入的模式有差异。具体可参考使用手册。
另外进入低功耗模式应该是如下:
LPM0 _BIS_SR(CPUOFF)
LPM1 _BIS_SR(SCG0+CPUOFF)
….
LPM3 _BIS_SR(SCG1+SCG0+CPUOFF)
Young Hu:
不需要设置_BIC_SR(SCG0)的,进入中断后所有的寄存器都会清零。。