今天学习一下MSP430单片机的工作模式。
我们这节课的主要内容有:
·工作模式简介
·低功耗模式
·低功耗设计
1,工作模式简介
MSP430单片机在低功耗方面的表现是非常优秀的,非常适合手持设备的应用。MSP430通过软件控制其时钟系统可以工作在多种工作模式,包括一种活动模式和五种低功耗模式,通过这些工作模式,可合理的利用系统资源,实现整个应用系统的低功耗。
2,运行模式
MSP430的运行模式以先进的方式支持超低功率和超低功耗的各种要求。这是通过各模块的智能化管理和CPU的状态组合而成。一个中断事件将系统从各种运行模式中唤醒,而RETI指令又使运行返回到中断事件发生前的运行模式。
MSP430系列为超低功耗应用开发出采用不同功耗水平的运行模式。
用CMOS技术设计超低功耗系统有三个主要目的:
※解决运行速度和数据流量与低功耗设计的突出
※将各模块的电流消耗降至最低
※闲置活动状态至最低要求
3,电流与控制方式
我们先来看这张图,这是MSP430F14x在不同工作模式下电流消耗的典型值。从这张图中我们可以看出,在工作模式4(LPM4),单片机电流仅为0.1uA。
MSP430系列单片机是通过CPU中状态寄存器SR中的SCG1、SCG0、OscOff和CPUOff四个位来实现工作模式控制的。
4,中断控制位
四个控制位的作用是:
SCG1:当SCG1复位时,使能SMCLK;SCG1置位,则禁止SMCLK。
SCG0:当SCG0复位时,直流发生器被激活,只有在SCG0置位且DCOCLK信号没有用于MCLK或SMCLK,直流发生器才能被禁止。
OscOff:当OscOff复位时,LFXT晶体振荡器激活,只有当OscOff被置位且不用于MCLK或SMCLK时,LFXT晶体振荡器才能被禁止,当使用振荡器关闭选项OscOff时,需要考虑晶体振荡器的设置时间。
CPUOff:当CPUOff复位,用于CPU的时钟信号MCLK被激活,当CPU置位时,MCLK停止。
只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理之后,又可以恢复以前的工作方式。在中断处理子程序执行期间,通过间接访问堆栈数据,可以操作这些位,这样在中断返回后,MSP430单片机会以另一种功耗方式继续运行。
5,各种工作模式下MSP430耗电情况
通过控制上述四个控制位,MSP430单片机可以从活动模式进入到响应的低功耗模式,而各种低功耗模式也可以通过中断方式返回到活动模式,各种工作模式之间的关系及好点情况,我们看这张图。
要实现整个MSP430单片机系统的低功耗运行,不仅要使CPU工作在低功耗模式,对其外围模块也要进行有效的管理降低其功耗。MSP430系列单片机各个模块运行时完全独立的,定时器、输入/输出端口、A/D转换、看门狗、液晶显示器等都可以在住CPU休眠的状态下独立运行。当需要主CPU工作时,任何一个模块都可以通过中断唤醒CPU,从而使系统以最低功耗运行。为了充分利用CPU低功耗性能,可以让CPU工作于突发状态。在通常情况下,根据需要使用软件将CPU设定到某一低功耗工作模式下,在需要时使用中断将CPU从休眠状态中唤醒,完成工作之后又可以进入相应的休眠状态。
6,MSP430的瞬时响应特性
如图,我们可以看出MSP430的超低功耗的状况。
MSP430的瞬时响应特性是系统超低功耗事件驱动方式的重要保证。
7,低功耗模式
7.1 工作模式
我们现在看到的是一张关于MSP430单片机工作模式的表格,里面一共有6种工作模式,分别是活动模式(AM),LPM0,LPM1,LPM2,LPM3,LPM4。这一节当中,我们将详细的介绍着5种低功耗模式。
SFR中的各模块允许位确定各自功耗控制器工作状态的配置。由用户程序定义外围模块的活动或停止。被禁止模块的电流降到被禁止各部分的漏电流。模块中唯一活动的是完成受控使模块进入允许状态或传递中断请求(例如发生外部硬件中断)给CPU的部分。
各模块允许的选择,有多达5种可能的省电模式:CPU关闭模式和4种系统时钟发生器的运行组合。
7.2LPM0和LPM1
对SR中的CPUOff置位可选择进入低功耗模式0或1。置位后CPU立即停止运行,系统内核的常规操作停止。CPU的操作暂停直至有任一中断请求或复位发生。所有内部总线停止活动。系统时钟发生器的继续工作和时钟信号MCLK及ACLK的活动取决于SR中的其他3位,即SCG0、SCG1和OscOoff。SCG1定义MCLK运行于ACLK的倍数或按DC0最近一次的控制信号运行。
被允许并得到MCLK或ACLK信号的外围模块处于活动状态。I/O端口的全部引脚和RAM及寄存器保持不变。所有被允许的中断事件可以从此状态唤醒程序。
7.3 LPM2和LPM3
低功耗模式3和低功耗模式4,对SR中的CPUOff和SCG1置位可选择进入低功耗模式2或3。置位后CPU和MCLK立即停止运行。它们暂停直至有任一中断请求或复位发生。所有内部总线停止活动。SCG1定义MCLK在系统回到活动模式时运行于ACLK的倍数或按DCO最近一次的控制信号运行。
被允许并得到ACLK信号的外围模块处于活动状态。工作时需要MCLK信号的外围模块因为MCLK信号停止活动而停止。I/O端口的全部引脚和RAM及寄存器保持不变。所有被允许的、不依赖于MCLK的中断事件可以从此状态唤醒。
7.4LPM4
LPM4也就是低功耗模式4,在这种模式下,全部活动部件停止,只有RAM、端口和寄存器的内容保持。只能由被允许的外部中断唤醒。
在启动LPM4前,软件要考虑在这一低功耗模式期间系统需要的条件。最终的两点是针对运行环境的,即对DC0和周期性操作的影响。运行环境定义的频率合成数值应保持或校正。校正在周围环境需要系统对频率作大的改变时可能发生。当存在周期性操作应用时,应该考虑锁相环可能失控,余留的时间片不足以将锁相环保持在校正操作范围之内。
7.5低功耗应用要点
当电流消耗是系统应用的重要指标时,应该考虑一些常规原则:
※将不用的FETI输入端连接到Vss
※关闭LCD及模块,可能时包括外部的模拟电压发生器
※JTAG端口TMS、TCK和TDI不要连接到Vss
※CMOS输入端不能有浮空的节点:将所有的输入端接适当的电平
※选择尽可能低的运行频率-既针对内核,同样也针对各外围模块
※如用了LCD,选择尽可能弱的驱动能力,或者将它关闭
※充分利用中断驱动软件的特性-程序能快速地启动执行。
8低功耗设计
一般来讲MCU的功耗取决于三个方面,低功耗控制,低功耗工作模式选择,低功耗软件设计,本文将针对这三个方面进行阐述。我们首先要讲的是低功耗控制。
8.1 低功耗的基本原则
针对MCU而言,有几个基本的原则:
※工作频率越低,MCU的功耗越小
※工作电压越低,MCU的功耗越小
※工作的外设越少,MCU的功耗越小
首先是工作频率越低,MCU的功耗越小;
我们在看数据手册的时候,经常会看到一个参数就是每MHZ消耗的功耗。通常情况MCU会有三个参数,分别是运行模式功耗,空闲模式功耗和掉电模式功耗。从参数可以看出,MCU的功耗直接和你使用的工作频率有关,在进行低功耗设计的时候一定要选择合适的工作频率。
其次我们要看的是工作电压越低,MCU的功耗越小。厂家一般给出的都是MCU的最低工作电压,事实上很多产品由于外设原因,电源原因,都不是工作在MCU的最低工作电压上的,数据手册上的参数仅供对比参考,不能作为绝对值进行计算。
最后我们要看的是工作的外设越少,MCU的功耗越小;这个条比较好理解。MCU的外设使用越多,功耗就越大。
另外,还有一个比较重要的原则,就是在FLASH中运行比在RAM中运行消耗更多的功耗。所以如果MCU的RAM够大,可以把最常用的主循环和处理函数放在RAM中运行,这样可以节约大于30%的功耗。
8.2 低功耗工作模式选择
MSP430支持6种运行模式,AM, LPM0~4(低功耗模式)。而我们在选择低功耗模式的时候,要根据自己系统的需要来确定,低功耗模式4是最省电的。我们在选择工作模式的时候,需要根据CPU和时钟状态来确定工作模式。
8.3程序设计
好了,我们现在开看看程序,我们现在看到的这段程序是MSP430f149的程序框架,如果是其他系列的芯片,则需要适当的修改一下。这只是个main函数,并没有给出中断函数,当我们处在低功耗模式中时,中断可以是系统从低功耗模式下跳出来,并执行中断任务。
我们来看以下程序,进入低功耗在程序中其实很容易实现,我们看这句,这句便是进入低功耗模式的语句。若不想进入低功耗模式,则屏蔽本句。
我们接着来看这一句,这一句是对初中断后退出低功耗模式。如果退出中断后要保留低功耗模式的话,则不需要本句,将本句屏蔽。
8.4 进入头文件
前面我们讲过,控制低功耗状态的是取决于SR中的四个控制位,即:SCG0、SCG1、OscOoff和CPUOff。那么,为什么我们在程序中进入低功耗时,并不需要配置这四位呢?在讲这个之前,我需要给大家讲一下,如何进入头文件,看看头文件中所包含的内容。
我们来看,首先,我们要选中我们要进的头文件,我这里选中的是msp430x14x.h。点击鼠标右键,选择并点击这里,我们便可以进入头文件,查看里面所包含的的内容。在以后的学习中,我们会经常用到,在使用模块化编程的时候也会用到,所以,学会这个方法很重要。好了,我们接下来进入msp430x14x.h中,看看里面所包含的内容,并为大家讲解一下为什么在我们的程序中不需要对四个控制位进行配置。
8.5 头文件中低功耗模式的定义
我们现在看到的就是头文件中的一部分内容,可以很清楚的看到,头文件中大部分是对一些命令的定义以及配置,这就是我们要写头文件的意义,这样在我们编程的时候,许多最基础的配置就不需要我们再写了。我们重点来看看LPM低功耗模式的相关定义。
这部分的定义是针对汇编定义啊,这句话的意思就是针对汇编定义。由于我们是用C语言进行编程的,所以,这部分我们跳过不看。
我们直接来看针对C的定义。这部分便是针对C进行的定义。我们可以这里,是对LPM模式选择的配置信息,比如说LPM0,我们以前讲过是只有CPUOFF为1,其他为0。同样的,其他模式的配置也是这个样子的。
而这部分定义的内容,则回答了为什么我们可以用简单的命令便可进入和退出任何一种低功耗模式。LPM0便是Enter LPM0。同样的,其他的低功耗模式是用一样的定义方式定义的,这里边在赘述了。