Q1:1,MSP430进入LP 模式后,CPU 停止运行,那么,进入中断执行退出后,由于SR的恢复,导致还处于LP 模式,是否意味着,CPU 在退出中断后立即停止了呢?
2,也就是说,进入LP 模式后,要让非中断流程运行的话,只能在中断退出前把保存在堆栈里面的SR 修改了?3,由于中断自动恢复保存的寄存器,要想在中断程序里面修改堆栈里面的保存的SR,只能用汇编了?
Q2:1、是的。
2、是的。
3、是的。_BIS_SR_IRQ() 以及_BIC_SR_IRQ() 函数可用。
Q2:有个程序进入LPM3 后拿万用表测电流在40uA 左右,不是的datasheet里说的小于2uA。万用表2mA 档串接在电池和VCC 之间。甚至于我写了最基本的初始化函数和main函数如下,测试电流值仍然在40 多uA。我想知道如何才能准确测得LPM3 下的电流,或者说是否万用表本身有影响?因为我们的程序要求有至少5年电池寿命,用的125mA 的CR1632,需要耗电在2.8uA下才行。
A3:我和你做的东西是差不多的,也用的是F201X 或F21X1 的片子,所以也测量过这个,对这个经验我有这几方面:
1、万用表的问题:有些万用表最小是2mA档,根据测量仪器的特性,接近满量程时的测量数据较准确,所以2mA 档测量2uA的电流时,相差1000倍,极不精确。我测量时使用的是一块带有200uA档的DT830数字表,实测LPM3 下只有0.7uA,与F201X 手册上标注一致。
2、湿度与PCB防潮问题:如果是实验板,因为上边没有阻焊膜,很容易受潮造成板上漏电,所以这种低功耗的东西一定要密封好,建议成品直接用树脂或是胶封起来,哪怕是热熔胶,也比暴露在空气中强。我测试的时候,就因为对着板子喘了口气,就发现表上电流示数开始变大了——这个电流实在是太小了,小到不能忽视任何干扰了。另外,要是手摸了板上子特别是电源两端的话,这个直接会造成几十到几百微安的电流,所以用手拿着板子测是极不科学的,要是不拿板子表笔不好扎的话,建议去电子商场买一对勾夹子,我买的1.5一个,3 块钱一对。勾好以后把板子悬空放着最好。
3、电路内的损耗电流:尤其是RC 方式的SLOPE,要想省电就必须严格控制电容的容量,越大越费电,或是说,如果你的电话容有余量的话,就要严格控制充电时间,否则充的时间长了,也一样会发生耗电增加的情况。最注意的就是,不要充上电之后去睡,醒了再放电检测,那样因为漏电的关系,损耗最大,哪怕你的电
容容量很小也不行。
4、初始化的选择:初始化的时候,一定要把不用的东西全关掉,包括IO 口全置为输出,并输出为低电平,而且不要选择REN,或是像楼主的程序那样,REN 置0。建议的初始化就是所有的SEL=0,REN=0,DIR=0FFH,OUT=0。像楼主现在的初始化把P1SEL 置了三位,那样就把那些模块一直选通了,可能会增加耗电。最好是模
块在使用前就不打开。当然如果为了利用模块的高阻性能而常开对应的比较器或ADC 端口的话,建议置一下对应端口的CAPD,这样可以进一步的减少寄生电流的产生。
Q3:#include <intrinsics.h>
#include <io430x14x.h>
int main()
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//initclock
init_clk();
init_io();
LPM0;
while(1);
}
Error[Pe020]: identifier "_BIS_SR" is undefined
以上程序为什么会出错?直接给SR 赋值也不成,并且到头文件中也没找到SR 的定义,这是出了什么问题呢?
TA0 的时钟选用0.5M 8分频,近似计数值63 为1ms,使用连续计数方式。
A3:将头文件改成
#include<msp430x14x.h>
#include<in430.h>
#include <io430x14x.h>即可正常运行。
Q4:低功耗设计中430接CMOS器件要注意?
A4:在低功耗产品设计中,当430的i/o 口与CMOS 器件接口时,比如LCD之类的,为了省电,LCD间歇供电,当LCD关断时,与之相连的430的i/o 口一定要设置为输入口或者设置为输出为1.否则LCD内部cmos器件的I/O口通过二极管导到其VCC上,这样MCU的电流变大了,功耗变的更大了.
Q5:程序总是不正确执行,运行就出现下述错误:CPU is OFF (Low Power Mode ) and interrupts are disa××ed! cannot excute Step/go到底是怎么回事?看了cpu 寄存器中cpuoff =1 的,但没有设置低功耗模式呀?
A5:查下晶振是否正常;程序不能正常运行是一步都不能走么?如果只是某个位置,看看程序对外围控制是否会让时钟或者电源受到影响;再次确认是否真的没有设置低功耗,注意看低功耗的宏定义。
Q6:当CPU 关闭后,在中断函数里面的计算,比如全局变量i 的累加等计算是由谁来执行的呢?为什么CPU关闭后还可以处理很多计算,赋值,判断等指令呢?
A6:在中断里CPU 是处于ACTIVE 模式的,进入中断后,DCO会自动起震,430 退出低功耗模式。
Q7:430 在低功耗的时候,闲置的口线应该是输入还是输出??
A7:不用的I/O口设置为输入时接地,或者设置为输出时悬空。