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的中断机制和低功耗问题



用的是msp430249。大家知道,进入中断,相关寄存器入栈,退出出栈,如果MCU先进入了低功耗,比如LPM3,那么执行一个ISR,如果没有调用编译器自带的“退出低功耗”语句,MCU仍然保持低功耗。可是,问题来了,程序里面有好几个地方需要退出低功耗,部分是在自己写的函数中,这些函数在中断中被调用。我希望在自己函数中执行“退出低功耗语句”,遗憾的是这不行,只能在中断函数主体中调用该语句,否则是退不出低功耗的。
  大虾们,有何良策可以在任意地方退出低功耗啊?原来想到的是自己产生一个中断,在那个中断里面去执行退低功耗函数,但感觉这个方法不太妥。

另外,看了下249的中断向量,有17个向量是保留的,可不可以利用上啊?或者有类此ARM的SCALL指令?

  • dirtwillfly,

    其实MSP430退出低功耗的设计主要是为了用于以下这种情况,执行A, 进入LPMx, 后某个中断唤醒CPU, 在对应中断处理函数中执行C, 退出LPMx(因为此语句的执行,任何语句的执行肯定得在CPU在active状态下)。 回到主函数main后,执行B。 

    MSP430低功耗的进入及退出需要和MSP430本身的特性,以及程序想要实现的功能进行合理的设计和规划。自己先想明白整体应该怎么设计,负责程序会有很多bug,总出现一些不可预期的现象。建议设计一下程序流程图,将执行过程规划一下,尽量将MSP430低功耗特性(core和外设)得到最大的应用。

    另外Reserved的中断向量是不可用的。

    While(1)

    {

    A;

    LPMx;

    B;

    }

    Interrupt_hander

    {

    C;

    Exit_LPMx;

    }

    希望对你有帮助!O(∩_∩)O~

    BR,

    Lina