This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于正确使用430低功耗模式

Other Parts Discussed in Thread: MSP430F5328

我使用的是MSP430F5328单片机,在做系统的低功耗。目标是再系统在不工作的时候单片机进入LPM4,然后通过IO口唤醒。

在使用过程有几个疑问。

1.在main主程序中进行初始化后直接进入LPM4。如果不进入AM模式,在__bis_SR_register(LPM4_bits);语句后的程序永远不会执行吧?所以后面什么都不用写吧。

void madin()

{

    初始化函数;

    。。。。。

    __bis_SR_register(LPM4_bits);

    。。。。

}

2.按照手册在触发中断后,系统清除了除了SCG0以外的所有SR寄存器的值。在退出中断后,恢复堆栈中的SR值,既恢复中断前的系统工作模式。如果在中断函数中使用了__bis_SR_register(LPM4_bits);中断函数还能正常退出么,系统将如何工作。

  • 在初始化函数中打开中断源,在低功耗模式4下的后面的语句是不执行的,在main函数中应该有个while(1){}程序循环执行系统执行完必要的任务后进入低功耗模式,需要执行任务了通过IO唤醒执行,一般是在中断函数中清除低功耗模式的寄存器,使系统推出低功耗模式转为活跃模式~

  • 和低功耗模式关闭时钟相关的中断、主程序都不执行,退出条件满足时接着低功耗进入的地方急需执行。通过IO口唤醒低功耗,一般在IO口外部中断函数中退出低功耗。

    至于在中断函数中使用了__bis_SR_register(LPM4_bits);中断函数还能正常退出么,系统将如何工作。这个问题没有试过,可以通过程序试,个人认为应该可以唤醒。但是建议尽量不要把进入低功耗指令放在中断里,中断里干的事越少越好。

  • 我现在程序流程比较简单都放到中断中运行了,自然退出应该还是原来的低功耗模式吧。如果要改变只能通过汇编语言改变堆栈的SR值吧。

  • 在IO口唤醒时退出低功耗就需要汇编语言来写堆栈吧。