1.CPU的结构:16个寄存器R0-R15,16位算数逻辑单元ALU和一个指令控制单元。
2.寄存器中R4-R15是通用寄存器没有特殊功能。
R0-R3具有特殊性:
R0:程序计数器PC(Program counter),存放着下一条要从程序存储器中取出的指令的地址。
R1:堆栈指针SP(Stack Point),系统堆栈在系统调用子函数或者进入中断服务程序时,保护程序计数器PC。
R2:状态寄存器SR(State Register):
R3:常数发生器
3.状态寄存器SR
4.低功耗
不同的低功耗模式就是配置不同的SCG1,SCG0,OscOff,CPUOff.
SCG1:复位使能SMCLK,置位则禁止SMCLK.
SCG0:复位激活DCO,置位且DCOCLK不用于MCLK或SMCLK时禁止DCO。
OscOff:复位则LFXT激活,置位且LFXT不用于MCLK或SMCLK时,LFXT振荡器禁止--对应着ACLK。
CPUOff:复位则MCLK激活,置位则MCLK停止。
解释:
(1)POR:POWER ON RESET.上电或复位信号都可以发生POR。
PUC:POWER UP CLEAR.POR可以出发PUC,另外看门狗的事件可以出发PUC。
(2)AM:全部活动
LPM0:CPUOFF=1,CPU被禁止,即MCLK被禁止。
LPM1:CPUOFF=1,SCG0=1。CPU-MCLK禁止,且若DCO未用做MCLK或SMCLK,则DCO禁止。
LPM2:CPUOFF=1,SCG1=1。CPU-MCLK禁止,SMCLK禁止。(DCO未用作MCLK,SMCLK则自动禁止)
LPM3:CPUOFF=1,SCG1=1,SCG0=1.CPU-MCLK禁止,SMCLK禁止,DCO禁止。
LPM4:CPUOFF=1,SCG1=1,SCG0=1,OSCOFF=1.全部禁止,包括ACLK也禁止。
5.系统工作原理:单片机各个模块运行完全独立。定时器,IO,AD,看门狗等都可以在主CPU休眠的状态下独立运行。
软件将CPU设定到某一低功耗工作模式下,在需要时使用中断将CPU从休眠状态中唤醒,完成工作后又进入相应的休眠状态。
系统响应中断的过程:如果在中断处理子程序中修改堆栈中SR的状态,那么中断返回后将不再是原来的SR状态。
PC入栈,SR入栈。
中断向量赋给PC。
GIE,CPUOFF,OSCOFF,SCG1清除。
IFG标志位清除.
执行中断处理子程序。
执行RETI指令,中断返回。
SR出栈
PC出栈
void main(void)
{
BCSCTL1 |= DIVA_2;//ACLK 4分频:由LFXT1CLK提供(32kHZ)
WDTCTL = WDT_ADLY_1000; //WDT作为间隔定时器:8000ms
IE1 |= WDTIE;
while(1)
{
unsigned int i;
_BIS_SR(LPM3_bits+GIE);//设置SR寄存器,进入LPM3,打开全局中断
}
}
进入LPM3:SCG1+SCG0+CPUOFF:也就是只有ACLK是活动的,但是仍支持WDT,TIMER.
编译器支持直接对位赋值:_intrinsic unsigned short _BIS_SR(unsigned short),位于in430.h
同理要清除SR中某一位的话就用 _BIC_SR();