如何在FreeRTOS下实现低功耗——MSP430F5438平台

合集下载

让 MSP430 功耗更低的秘诀 — 第 2 部分

让 MSP430 功耗更低的秘诀 — 第 2 部分

让MSP430 功耗更低的秘诀— 第2 部分
 在上周的《让低功耗MSP430 的功耗更低》一文中,我们探讨了特别有趣的MSP430 属性:尽管MSP430 的电源电压范围很宽(1.8 至 3.6V),但功耗会随提供给MCU 的特定电压变化而变化。

换句话说,电源电压从1.8V 提高到3.6V 会明显增大电池的流耗。

这是我们想要尽量避免的,因为这样只会导致电池电量更快耗尽,最终给这部分用户带来困扰。

 这就是稳压器能帮上忙的地方。

我们正在通过降低电源电压有效限制流耗。

 然而,在选择稳压器时有几个应该重视的注意事项。

首先,一定要知道何时使用LDO,何时使用DC/DC 转换器。

尽管DC/DC 转换器的高效率特性很有吸引力,但考虑应用的占空比或您希望MSP430 进入休眠状态的频繁程度也很重要。

原因在于当MSP430 处于低功耗模式时,从电池获取的电流远远小于工作状态下的电流消耗。

而且它处在较轻负载下时,典型降压转换器(即降压DC/DC 转换器)的效率开始降低。

请看一下在轻负载模式下降压转换器TPS62122 的效率曲线:。

MSP430F5438uCOSII移植

MSP430F5438uCOSII移植

MSP430F5438uCOSII移植******************************** MSP430F5438 uCOSII 移植 ********************************1. MSP430F5438是TI公司的超低功耗微控制器,供电电压变态低,功耗也是变态低,CPU可以跑到18Mhz到25Mhz,说性能是比不上ARM的了,可能指令的密度也不及ARM。

但是MSP430超低功耗的特点使它能够应用在那些功耗敏感的应用,如手持设备,模拟数字传感系统等。

MSP430F5438是比较新的芯片(相对于1,2,3,4系列),外部资源很丰富,功耗比以前的系列更低了。

2. MSP430F5438的CPU很特别,里面大部分的寄存器都是20bit(只有SR为16bit),使用20bit主要是要扩大寻址范围,MSP430本身是16bit-RISC的MCU,由于内部flash大,外围资源丰富,于是就扩展了额外的4bit。

个人认为,还不如直接把MSP430做成32bit的CPU,因为在移植ucos-II,设计各个任务的堆栈的时候,20bit其实还是需要32bit的空间去存储,浪费RAM。

在这次移植中,就因为堆栈溢出的问题,耗了我两天才发现,搞得毫无表情。

不过也让我认识到移植过程中需要注意的问题。

3. MSP430F5438的CPU相对ARM来说比较简单,首先MSP430F5438没有各种模式的切换,因此保存堆栈的时候会比较简单。

MSP430F5438的R12-R15是用于函数传入参数和返回参数用的。

中断跳转时会自动保存PC,SR寄存器的值,而CALLA这类的分支函数跳转只会自动保存PC而已,具体堆栈结构查看datasheet。

4. 移植uCOS-II有几个函数需要修改,分别如下:l)开关中断函数OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()2)任务堆栈初始化函数OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt);3)开始就绪任务的函数void OSStartHighRdy(void);4)任务级的调度函数void OSCtxSw(void);5)中断级的调度函数void OSIntCtxSw(void);6)时钟中断服务函数TIMER1_A0_IS5. 开关中断函数声明及宏定义:-----------------------------------------------------------------------------------------------#define OS_CRITICAL_METHOD 3#if OS_CRITICAL_METHOD == 3#define OS_ENTER_CRITICAL() (cpu_sr = OSCPUSaveSR())#define OS_EXIT_CRITICAL() (OSCPURestoreSR(cpu_sr))#endif-----------------------------------------------------------------------------------------------函数实现:-----------------------------------------------------------------------------------------------OSCPURestoreSRMOV.W R12, SRRETAOSCPUSaveSRMOV.W SR, R12DINTRETA-----------------------------------------------------------------------------------------------对于MSP430这类的单片机,使用了方法3去开关中断,最合适不过了。

MSP430FR单片机的超低功耗设计方法和原则

MSP430FR单片机的超低功耗设计方法和原则

M S P430F R单片机的超低功耗设计方法和原则李志腾,郑耿,孙鹏,张良,秦旸,刘伟(东方电子股份有限公司,烟台264001)摘要:以M S P30F R6972芯片为例,详细介绍了M S P430F R系列单片机在硬件㊁软件上的超低功耗设计方法和原则,并提出了在软件开发过程中采用U L P A d v i s o r和E n e r g y T r a c e工具分析优化功耗的方法㊂通过综合的设计㊁优化能使单片机达到最佳的低功耗状态,更好地适应超低功耗应用领域的要求㊂关键词:M S P430F R;U L P A d v i s o r;E n e r g y T r a c e中图分类号:T P368.1文献标识码:AD e s i g n M e t h o d a n d P r i n c i p l e o f U l t r a-l o w P o w e r C o n s u m p t i o n o n M S P430F RL i Z h i t e n g,Z h e n g G e n g,S u n P e n g,Z h a n g L i a n g,Q i n Y a n g,L i u W e i(D o n g f a n g E l e c t r o n i c s C o.,L t d.,Y a n t a i264001,C h i n a)A b s t r a c t:I n t h i s p a p e r,M S P430F R6972M C U i s t a k e n a s a n e x a m p l e t o i n t r o d u c e t h e d e t a i l u l t r a-l o w p o w e r d e s i g n m e t h o d s a n d p r i n c i-p l e s o f M S P430F R M i c r o c o n t r o l l e r s i n h a r d w a r e a n d s o f t w a r e f i e l d s.I n t h e s o f t w a r e d e v e l o p m e n t,a m e t h o d i s p r e s e n t e d f o r a n a l y z i n g a n d o p t i m i z i n g M S P430F R s p o w e r c o n s u m p t i o n b y u s i n g U L P A d v i s o r a n d E n e r g y T r a c e t o o l s.W i t h t h e c o m p r e h e n s i v e d e s i g n a n d o p-t i m i z i n g,t h e M C U c a n a c h i e v e t h e b e s t l o w p o w e r s t a t e i n t h e u l t r a-l o w p o w e r a p p l i c a t i o n s.K e y w o r d s:M S P430F R;U L P A d v i s o r;E n e r g y T r a c e引言M S P430F R是美国德州仪器(T I)公司推出的新一代超低功耗系列单片机,由于其具有超低功耗的性能和可以高速㊁耐久读写数据的内置F R AM,非常适合应用于电力仪表等低功耗仪器仪表领域㊂在对功耗要求很苛刻的领域,如何合理开发使用M S P430F R系列单片机成为实现超低功耗的关键㊂本文以M S P430F R6972单片机为例,详细介绍了M S P430F R系列单片机的超低功耗开发㊁设计原则㊂1M S P430F R系列单片机概述M S P430F R系列单片机是16位单片机,采用了精简指令集(R I S C)结构,具有灵活可控的时钟和丰富的片内外设,每个片内外设都可以单独控制,从而实现多种不同功能的低功耗模式[1]㊂以M S P430F R6972单片机为例,其具有7种低功耗模式(如表1所列),其中,L P M3模式是在L P M2模式基础上关闭了芯片内部的锁频环; L P M3.5模式及L P M4.5模式是在L P M3与L P M4模式基础上进一步关闭了芯片内部R AM的供电㊂L P M3.5和L P M4.5模式下,一些寄存器将会失效,未保存的数据及动态变量会丢失,因此在进入这两种模式时一定要将有用的数据或变量保存到铁电中,等到C P U从该模式恢复后,再将保存的数据读出,重新赋给相应的变量㊂单片机会根据不同的运行模式关闭或打开C P U㊁时钟及相应的外设,从而保证在最低功耗下实现相应的功能㊂表1M S P430F R6972运行模式及功耗(T=25ħ,f=1MH z,V c c=3.0V)运行模式C P U及时钟状态典型功耗/μA L P M0C P U o f f A C L K a c t i v e S M C L K o p t i o n a l a c t i v e80 L P M1C P U o f f A C L K a c t i v e S M C L K o p t i o n a l a c t i v e40 L P M2C P U o f f A C L K a c t i v e S M C L K o f f1.20 L P M3C P U o f f A C L K a c t i v e S M C L K o f f0.90 L P M4C P U o f f A C L K o f f S M C L K o f f0.55 L P M3.5C P U o f f A C L K a c t i v e S M C L K o f f0.35 L P M4.5C P U o f f A C L K o f f S M C L K o f f0.04 M S P430F R系列单片机与其他M S P430系列单片机的最大不同是采用内置F R AM取代F l a s h来存储程序与数据,数据写入速度是F l a s h的100多倍㊂由于F R AM无需预擦除段并且可以实现位级数据存取,简化了代码开发,从而能够在功耗不变的情况下实现实时数据记录㊂此外,相较于F l a s h ,M S 430F R 芯片中的F R AM 可提供超过100亿次的写入周期耐久性㊂2 M S P 430F R 系列单片机超低功耗设计原则单片机的超低功耗设计包括硬件㊁软件两个方面㊂在进行超低功耗设计时要综合考虑硬件和软件的设计,使其达到最优的低功耗状态㊂2.1 硬件设计原则2.1.1 供电电压及时钟频率设置M C U 是由若干C MO S 门电路组成,C MO S 的功耗计算公式如下:P =P s t a r t +P Q +P d y n (1)P d yn =C L ˑf ˑV 2c c (2)其中,P s t a r t 是由扩散区和衬底之间的反向偏置漏电流产生的静态功耗,P Q 是动态情况下P 管和N 管同时导通时的短路电流产生的动态功耗,P d y n 是开关电流产生的动态功耗㊂这三项中P d y n 大约占电路功耗的80%,是C MO S 电路的主要功耗[3]㊂在式(2)中C L 为CMO S 的负载电容,f 为系统时钟频率,V c c 为芯片的电源电压㊂由此可知,电源电压V c c 对系统C MO S 电路功耗影响最大,其次是时钟频率f 和负载电容C L ㊂因此,为了能够实现超低功耗,在满足应用要求的前提下,要尽可能降低芯片的供电电压㊂一般而言,时钟频率越大,功耗越大㊂但另一方面,时图1 I /O 电平不固定情况下的电流消耗钟频率与工作时间成反比,时钟频率越高,完成一段代码的执行时间越短,C P U 处于空闲或睡眠状态的时间就越长㊂因此,并不一定是频率越高功耗就越大㊂在有些应用中,提高主频反而可以使平均功耗降低,频率的确定需要根据实际应用中的项目需求而定㊂例如,以不同频率执行相同代码,其功耗大小如表2所列,从表中可以看出对于如下代码,频率在8MH z 时C P U 消耗的平均功耗最小㊂v o i d m a i n (v o i d){ I n i t S o f t WD o g (0,0,0); I n i t G p i o (); I n i t S Y S C l o c k (); w h i l e (1){ P i n 1_0(1);//P 1.0引脚置高 C o d e A (); C o d e B (); C o d e C (); P i n 1_0(0);//P 1.0引脚置低 }}表2 不同频率下执行相同代码的功耗主频/MH z 供电电流/m A C P U 执行相同代码耗时/μs C P U 执行相同代码的功耗(m A ㊃μs )说 明10.16725.054.18342.670.3309.353.08553.50.4107.172.939740.4606.262.87965.330.6104.672.848770.7703.592.764380.8603.132.691810.50.9902.972.9403121.1202.592.9008161.4001.932.7020采用万用表串入供电电路测量供电电流;用示波器捕捉P 1.0引脚的高低电平变化,获取执行时间㊂在测试过程中C P U一直处于a c t i v e m o d e,A C L K 的频率为32.768k H z ,S M C L K 被关闭2.1.2 I /O 口设置默认情况下,M S P 430F R 系列单片机的I /O 口为输入状态,且内部的上㊁下拉电阻未使能㊂因此,I /O 口的电平不确定,从而容易产生寄生电流[2],如图1所示㊂在默认状况下,P 1.0口的电压处于不稳定状态,当P 1.0口的电压为1.7V 左右时,寄生电流能够超过40μA ㊂但P 1.0端口电压为3.0V 或者0V 时,电流几乎为0㊂为此,在进行产品设计时,硬件上可以通过将未用的I /O 接到V c c 或者G N D 上,使其端口电平固定,从而避免产生寄生电流㊂若硬件上未进行相应处理,软件上可以通过将未用的I /O 口设置为输出高电平或低电平,使其端口电平固定;或者将未用I /O 口设置为输入状态,并通过软件设置内部上拉电阻或下拉电阻,使端口的电平保持固定,避免产生寄生电流㊂2.1.3 外部设备M S P 430F R 系列单片机内部包含了丰富的低功耗外设,如D MA ㊁A D C 等器件,合理利用这些低功耗外设能够更好地降低系统的功耗㊂例如在相同情况下搬移1312个字节,M S P 430F R 6972的D MA 模块与m e m c p y()函数所消耗的时间及功耗对比如表3所列㊂D MA 可以在更短的时间内,用更低的功耗实现数据的搬移,且D MA 进行数据搬移时并不会占用C P U ,C P U 可以继续执行其他指令㊂表3 D M A 模块与m e m c p y()函数功能对比功能电流/m A 时间功耗(m A ㊃m s)m e m c p y ()1.2761.65m s2.105D MA2.057272.50μs0.5612.2 软件设计原则典型的低功耗C P U 的工作模式如图2所示,C P U 大部分时间处于空闲或休眠状态,仅有部分外设在工作,此时电流消耗很小㊂只有定时事件完成或有其他事件触发时,C P U 才会进入运行状态执行相应的工作,工作完成后C P U 再次进入空闲或休眠状态,继续等待定时或其他事件的触发,这样系统整体的平均功耗就会很低[4]㊂例如采用M S P 430F R 6972芯片实现串口数据接收功能,可以选择A C L K 作为片内串口模块的时钟源,这样芯片可以长时间处于L P M 3模式下接收串口数据,当要处理接收数据时再进入A c t i v e 模式进行数据处理,从而使单片机功耗保持最佳㊂图2 典型的低功耗C P U 的工作模式此外,在软件编程上尽可能地提升代码的执行效率,缩短C P U 的活跃时间,也可以更好地降低功耗㊂例如尽量使用无符号数,尽可能采用快速查表法来代替复杂的计算等㊂2.2.1 U L P A d v i s o r 代码分析T I 公司提供了U L P (U l t r a -L o w P o w e r )A d v i s o r 分析工具,用于指导开发人员编写有效的代码,以充分利用M S P 430微控制器的独特超低功耗特性[5]㊂U L P A d v i s o r功能可以在I A R 或C C S 编译器中通过设置启用㊂U L P 包含了15条编程规则,在编译时,U L P A d v i s o r 会提供通知和备注,以突出显示代码中可以进一步优化的区域,如图3所示,U L P A d v i s o r 提示f o r 循环的代码可以优化㊂点击图3中m e s s a g e s 对话框中的T I U L P A d v i s o r 报警信息,就会弹出如图4所示的详细说明,并包括优化代码的例子㊂从详细说明中可知,M S P 430单片机内进行非零值比较时需要执行两条汇编指令,而与零比较只需执行一条汇编指令,所以可以将f o r (i i =0;i i <20;i i ++)改为f o r (i i =20;i i >0;i i --),提高代码的执行效率,从而节省功耗㊂图3 U L P A d v i s o r 告警信息图4 U L P A d v i s o r 详细说明2.2.2 E n e r g y Tr a c e 功耗分析在进行单片机超低功耗设计时,辅助的测量方法有很多种㊂可将高精度电流表串入供电回路测量功耗,或者在供电回路中串联一个精密电阻(误差为1%,甚至更低),用示波器实时测量电阻两端的电压等方法㊂为了能够更好地在程序设计过程中了解功耗,可以采用T I 公司的E n e r g y T r a c e 工具㊂E n e r g y Tr a c e 工具主要用于D e b u g 模式,其可以实时记录M S P 430单片机的实时功耗㊁内部外设和芯片运行的状态(见图5)㊁程序里功能函数执行的次数及每个功能函数的功耗,生成l o g 信息并以图表的形式实时展示出来[5]㊂E n e r g y Tr a c e 工具可以对比利用U L P A d v i s o r 工具调整后和调整前的代码的实时功耗情况,如图6所示㊂通过将U L P A d v i s o r 和E n e r g y Tr a c e 结合使用,可以帮助软件人员在程序设计调试中更好地优化代码,从而保证功耗做到最低㊂图5芯片内部外设及运行模式实时追踪图6 E n e r g y Tr a c e 功耗跟踪及对比分析结 语M S P 430F R 系列单片机适用于很多超低功耗实时数据测量场合㊂通过恰当的低功耗硬件设计㊁合理的软件策略及综合的优化方法,可以使M S P 430F R 系列单片机在超低功耗的应用领域中表现得更为优秀㊂参考文献[1]胡大可.M S P 430系列超低功耗16位单片机原理与应用[M ].北京:北京航空航天大学出版社,2000.[2]T e x a s I n s t r u m e n t s .M S P 430F R 58x x ,M S P 430F R 59x x ,M S P 430F R68x x ,a n d M S P 430F R 69x x F a m i l y Us e r s G u i d e [E B /O L ].[201805].h t t p ://w w w .t i .c o m /c n /l i t /pd f /s l a u 367.[3]王昌林,张勇,李东生.C MO S 集成电路功耗分析及其优化方法[J ].舰船电子工程,2006,26(3):123125.[4]杨天池,金梁,王天鹏.嵌入式系统的低功耗设计[J ].仪器仪表学报,2006,27(z 1):946948.[5]T e x a s I n s t r u m e n t s .M S P 430A d v a n c e d P o w e r O pt i m i z a t i o n s _U L P A d v i s o r S o f t w a r e a n d E n e r g y T r a c e T e c h n o l o g y [E B /O L ].[201805].h t t p://w w w.t i .c o m.c n /c n /l i t /a n /s l a a 603/s l a a 603.李志腾(嵌入式软件工程师),主要负责智能配电产品线㊂(责任编辑:薛士然 收稿日期:2018-05-03)。

RTOS低功耗设计原理及实现_TicklessMode(FreeRTOS的实现)

RTOS低功耗设计原理及实现_TicklessMode(FreeRTOS的实现)
3. Tickless Idle Mode 的实现 这里以 STM32F407 系列的 MCU 为例,首先需要明确的是 MCU 的低功耗模式,F407 有 3 种低功耗 模式,Sleep, Stop, Standby,在 RTOS 平台时,SRAM 和寄存器的数据不应丢失,此外需要一个定时 器为 RTOS 提供系统时钟,这里选择 Sleep 模式下进行实现。
1. 当 Idle 任务运行时,进入低功耗模式; 2. 在适当的条件下,通过中断或者外部事件唤醒 MCU。 但是,从第二点可以看出,每次当 OS 系统定时器产生中断时,也会将 MCU 从低功耗模式中唤醒,而 频繁的进入低功耗模式/从低功耗模式中唤醒会使得 MCU 无法进入深度睡眠,对低功耗设计而言也是 不合理的。 在 FreeRTOS 中给出了一种低功耗设计模式 ——Tickless Idle Mode,这个方法可以让 MCU 更长时间 的处于低功耗模式。
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
/* 进入低功耗模式,可以通过 configPRE_SLEEP_PROCESSING 函数进行低功耗模式下 时钟及外设的配置*/
xModifiableIdleTime = xExpectedIdleTime; configPRE_SLEEP_PROCESSING( xModifiableIdleTime ); if( xModifiableIdleTime > 0 ) {
__DSB(); __WFI(); __ISB(); }
unsigned long ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements; portTickType xModifiableIdleTime;

MSP430--低功耗模式

MSP430--低功耗模式
DCO。
OscOff:复位则LFXT激活,置位且LFXT不用于MCLK或SMCLK时,
LFXT振荡器禁止--对应着ACLK。
CPUOff:复位则MCLK激活,置位则MCLK停止。
解释:
(1)POR:POWERONRESET.上电或复位信号都可以发生POR。
PUC:POWERUPCLEAR.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休眠的状态下独立运行。
short),位于in430.h
同理要清除SR中某一位的话就用_BIC_Βιβλιοθήκη R();IFG标志位清除.
执行中断处理子程序。
执行RETI指令,中断返回。
SR出栈
PC出栈
[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片
voidmain(void)
{
BCSCTL1|=DIVA_2;//ACLK4分频:由LFXT1CLK提供(32kHZ)

以MSP430说明FreeRTOS移植

以MSP430说明FreeRTOS移植
mov.wr1, 0(r12)当前栈顶保存到私有栈
endm
/*-----------------------------------------------------------*/
portRESTORE_CONTEXTmacro
mov.w&pxCurrentTCB, r12
mov.w@r12, r1//R1作为堆栈寄存器使用,这条指令时将堆栈切换至当前任务的私有栈
when this function is called.
*/
调用定时器初始化函数,使能滴答时钟
call#vPortSetupTimerInterrupt
/* Restore the context of the first task that is going to run.
装载任务栈启动第一个任务
popr15
mov.wr15, &usCriticalNesting
popr15
popr14
popr13
popr12
popr11
popr10
popr9
popr8
popr7
popr6
popr5
popr4
/* The last thing on the stack will be the status register.
*pxTopOfStack = ( StackType_t ) 0x7777;
pxTopOfStack--;
*pxTopOfStack = ( StackType_t ) 0x8888;
pxTopOfStack--;
*pxTopOfStack = ( StackType_t ) 0x9999;
pxTopOfStack--;

单片机MSP430的极低功耗系统设计

单片机MSP430的极低功耗系统设计

单片机MSP430的极低功耗系统设计<P <B 关键词:极低功耗系统MSP430 低功耗管理<P <B 1 影响系统功耗的主要因素对于一个数字系统而言,其功耗大致满足以下公式:P=CV2f,其中C为系统的负载电容,V为电源电压,f为系统工作频率。

由此可见,功耗与电源电压的平方成正比,因此电源电压对系统的功耗影响最大,其次是工作频率,再就是负载电容。

负载电容对设计人员而言,一般是不可控的,因此设计一个低功耗系统,应该考虑到不影响系统性能前提下,尽可能地降低电源的电压和使用低频率的时钟。

下面对TI公司新出MSP430来具体探讨这个问题。

2 基于MSP430极低功耗系统的设计MSP430具有工业级16位RISC,其I/O和CPU可以运行在不的时钟下。

CPU功耗可以通过开关状态寄存器的控制位来控制:正常运行时电流160μA,备用时为0.1μA,功耗低,为设计低功耗系统提供了有利的条件。

图1是我们设计的以MSP430为CPU的“精密温度测试仪”(下面简称测试仪)。

该产品使用电池供电,体积小巧,携带方便。

(1)电源电压在使用时应该尽可能地选择最低的电源电压。

对于MSP430而言,可用的最低电压是很低的,最低可达1.8V。

我们使用TI公司推荐使用的3V。

通常的电源只提供5V 电压,因此,需要将5V电压由一个3V的稳压管降压后给CPU供电,也可以直接锂电池供电。

3V不是标准的TTL电平,因此,在使用时需要用接口电路使CPU的非TTL标准电平能与TTL标准电平的器件连接。

这些接口电路应该也是低功耗的,否则会造成一方面使用低电压降低了功耗,另一个方面使用额外的接口电路又增加了系统的功耗。

或者直接使用支持3V电压的外围芯片。

(2)时钟频率从低功耗的角度看,需要较低的频率,但是在实时应用中为了快速响应外部事件又需要有比较快的系统时钟。

这就需要系统具有两个高低不同的频率,在需要的时候可以在两个频率之间进行切换。

基于MSP430F5438A的最小系统设计

基于MSP430F5438A的最小系统设计
黪 软 件 应 用 与 设 计
S o f t wa r e Ap p l i c a t i o n a n d De s i g n
基于 MS P 4 3 0 F 5 4 3 8 A 的最小 系统设 计
薛盛可 ,徐晓霞 ,赵 磊 ( 浙 江 工业 大 学信 息 工 程 学 院 ,杭 州 I 3 1 0 0 2 3 ) 摘 要 :单 片机 最小 系统 ,或者称为 最小应用 系统 ,是指用最 少的元件 组成的、没有输入输 出扩展 、功 能有 限 但可 以独立运行 的 系统。对 MS P 4 3 0系列单 片机 来说 ,除 了MS P 4 3 0 F 5 4 3 8 A 芯片以外 ,最小 系统还通常 包括基本辅 助 电路 ,比如 电源 电路 、时钟振 荡电路 、复位 电路和J T A G仿真接 口。它们都是保证整个 系统正 常运行的关键 部分。 关键词 :最 小系统 ;MS P 4 3 0 ;单 片机
中图分类号:T P 3 6 8 . 1
文献标识码:A
文章编号:1 6 7 4 - 7 7 1 2 ( 2 0 1 4 ) 0 6 — 0 2 0 3 一 o 1
X T 2 振 荡器和 X T 1的 高 频 模 式 相 同 。 虽 然 两 引 脚 与 通 用 i / o口复用 ,但 是系统默认 设置为时钟 引脚 。系统 中采用 8 Nt z 晶振 ,晶振两级和地之问还接有 3 0 p F的 电容帮助起振 , 然 后 连 接 至 对 应 的 芯 片 引脚 。 ( 四 )J T A G和 S p y — B i W i r e仿 真 调 试接 口 本 系统 为 M S P 4 3 0 F 5 4 3 8 A芯 片 设 计 J T A G仿 真 接 口 ,完 全 兼容 T e x a s I n s t r u m e n t s 公 司 的 官 方 标 准 。 通 过 官 方 或 第 三 方 的仿 真 器 即可 方 便 地 对 系统 进 行 编程 和 在 线 调 试 。J T A G使 用 4根 信 号 线 ,可 以稳 定 仿 真 并 快 速 访 问 芯 片 内部 的 寄存 器 、 R A M存储 器等 资源 。J T A G 接 口引脚 定 义 为 1 :T D O ,2 :V C C ,3 :

MSP430系列十六位超低功耗单片机教学实验系统实验教程

MSP430系列十六位超低功耗单片机教学实验系统实验教程

MSP430系列十六位超低功耗单片机教学实验系统实验教程MSP430系列十六位超低功耗单片机是德州仪器公司(TI)推出的一款高性能单片机,被广泛应用于嵌入式系统及物联网领域。

为了帮助初学者快速上手MSP430系列单片机,TI公司推出了MSP430系列十六位超低功耗单片机教学实验系统及相应的实验教程。

以下为一份MSP430系列十六位超低功耗单片机教学实验系统实验教程。

实验一:基础实验实验内容:1.学习MSP430系列单片机的基本特性和功能。

4.学习如何使用MSP430系列单片机的GPIO口进行输入输出控制。

实验步骤:2.安装MSP430-GCC编译器,并将其配置到系统环境变量中。

3.编写一个简单的程序,实现将MSP430系列单片机的GPIO口配置为输出模式,并输出高电平或低电平信号。

5.通过观察开发板上的LED灯是否亮起来,判断GPIO的输出是否成功。

实验二:时钟系统实验实验内容:1.学习MSP430系列单片机的时钟系统和时钟源。

2.学习如何配置和使用MSP430系列单片机的时钟系统。

实验步骤:1.配置MSP430系列单片机的时钟系统,选择合适的时钟源和时钟频率。

2.编写一个程序,实现在不同时钟频率下,通过GPIO口控制LED灯的闪烁频率。

实验三:定时器实验实验内容:1.学习MSP430系列单片机的定时器及其相关功能。

2.学习如何配置和使用MSP430系列单片机的定时器。

实验步骤:1.配置MSP430系列单片机的定时器模块,设置定时时间和定时器模式。

2.编写一个程序,实现定时器中断,当定时时间到达时,通过GPIO口控制LED灯的闪烁。

实验四:串口通信实验实验内容:1.学习MSP430系列单片机的串口通信模块和相关配置。

2.学习如何配置和使用MSP430系列单片机的串口通信功能。

实验步骤:1.配置MSP430系列单片机的串口通信模块,设置波特率和数据位数。

2.编写一个程序,实现通过串口发送字符串数据,并通过串口接收并显示接收到的数据。

MSP430低功耗运行模式原理及应用

MSP430低功耗运行模式原理及应用

MSP430低功耗运行模式原理及应用作者:李鹏来源:《科技创新与应用》2016年第18期摘要:MSP430系列单片机因为其良好的低功耗表现和强大的数据处理能力,在许多领域具有广泛的应用,文章通过分析其低功耗模式的原理,介绍了MSP430及其衍生型号在相关领域的应用,对研究MSP430的低功耗模式及其实际应用具有一定的指导意义。

关键词:MSP430;低功耗模式;应用MSP430系列单片机是美国德州仪器(TI)公司推出的集多种先进技术于一体的新一代单片机,该机最突出的特点是其低功耗模式,同时由于其具有强大的运算能力和仿真调试能力以及丰富的内外设,所以在全世界范围内获得了空前的成功[1],尤其在对功耗要求比较高的领域,得到了广泛的应用。

文章通过研究其低功耗的原理,介绍了MSP430系列单片机在相关领域的具体应用。

1 MSP430的低功耗运行模式研究MSP430系列单片机的内部结构框图如图1所示,MSP430系列单片机之所以能够有超低的功耗表现,主要有以下几个原因:1.1 工作电压低,低功耗模式多MSP430系列单片机的CPU的标准工作电压范围为1.8V-3.6,最低能在1.8V的电压下工作,芯片最低的工作电流只有0.1μA,所以从基础结构的设计上就能保证低功耗的良好表现。

MSP430有1种活动模式(AM)和5种低功耗工作模式(LPM0、LPM1、LPM2、LPM3、LPM4),由于该型单片机主要用在工作时间短、休眠时间长的环境,所以多种低功耗模式的设计,可以使MSP430能够经常处于最经济的状态,有效降低了功耗。

1.2 中断响应速度快MSP430处于低功耗状态时,如果中断事件发生,MSP430可以在6μs内唤醒CPU进入工作状态,当事件处理完毕后,MSP430再次进入低功耗状态,由于其CPU强大的处理能力,一般能够很快地完成处理任务,所以MSP430大部分时间能够处于低功耗状态,这是MSP430非常省电的另一个重要原因。

MSP430F5438实验手册

MSP430F5438实验手册

目录1.实验1 USC时钟系统------------------------------------------------------------------------------------------------------22.实验2 GPIO和EXTI-------------------------------------------------------------------------------------------------------33.实验3 串口通信UART----------------------------------------------------------------------------------------------------44.实验4 SPI通信------------------------------------------------------------------------------------------------------------55.实验5 I2C通信------------------------------------------------------------------------------------------------------------66.实验6 Timer_A定时器---------------------------------------------------------------------------------------------------77.实验7 Timer_B定时器--------------------------------------------------------------------------------------------------108.实验8 看门狗WDT--------------------------------------------------------------------------------------------------------139.实验9 RTC时间-----------------------------------------------------------------------------------------------------------1410.实验10 ADC_12----------------------------------------------------------------------------------------------------------1511.实验11 Flash编程-----------------------------------------------------------------------------------------------------1612.实验12 低功耗LPM-----------------------------------------------------------------------------------------------------1713.实验13 DMA传输--------------------------------------------------------------------------------------------------------1914. 实验14 键盘数码管ZLG7290----------------------------------------------------------------------------------------2115. 实验15 液晶显示LCD1602-------------------------------------------------------------------------------------------2216. 实验16 液晶显示LCD12864-----------------------------------------------------------------------------------------2317. 实验17 液晶显示TFT-------------------------------------------------------------------------------------------------2418. 实验18 数字温度传感器DS18B20----------------------------------------------------------------------------------25实验1 USC时钟系统一.实验原理图 Array二.实验步骤1. 下载程序。

FreeRTOS—低功耗之睡眠模式,停机模式,待机模式

FreeRTOS—低功耗之睡眠模式,停机模式,待机模式

FreeRTOS—低功耗之睡眠模式,停机模式,待机模式低功耗是 MCU 的⼀项重要的指标,⽐如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别⼤的话,就会经常出现电量不⾜的情况,影响⽤户体验。

STM32F103 睡眠模式介绍说明:在 FreeRTOS 系统上⾯实现睡眠⽅式仅需了解这⾥讲解的知识基本就够⽤了,更多睡眠⽅式的知识请看 STM32F103 参考⼿册和Cortex-M3 权威指南。

在系统或电源复位以后,微控制器处于运⾏状态。

当 CPU 不需继续运⾏时,可以利⽤多种低功耗模式来节省功耗,例如等待某个外部事件时,⽤户需要根据最低电源消耗、最快速启动时间和可⽤的唤醒源等条件,选定⼀个最佳的低功耗模式。

STM32F103 有三种低功耗模式:睡眠模式(Cortex™-M3 内核停⽌,所有外设包括 Cortex-M3 核⼼的外设,如 NVIC、系统滴答定时器 Systick 等仍在运⾏)。

停机模式(所有的时钟都已停⽌)。

待机模式(1.8V 电源关闭)。

如何进⼊睡眠模式通过执⾏ WFI(等待中断)或 WFE(等待事件)指令进⼊睡眠状态。

根据 Cortex™-M3 系统控制寄存器中的 SLEEPONEXIT 位的值,可以通过两种⽅案选择睡眠模式进⼊机制:SLEEP-NOW:如果 SLEEPONEXIT 位被清除,当 WFI 或 WFE 被执⾏时,微控制器⽴即进⼊睡眠模式。

SLEEP-ON-EXIT:如果 SLEEPONEXIT 位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就⽴即进⼊睡眠模式。

实际应⽤中我们采⽤ WFI 指令进⼊睡眠模式,睡眠模式的进⼊机制是采⽤的 SLEEP-NOW。

因为系统复位上电后 SLEEPONEXIT 位是被清除的,所以这个位也不需要专门的去设置。

另外在睡眠模式下,所有的 I/O 引脚都保持它们在运⾏模式时的状态。

在 FreeRTOS 系统上,不使⽤ tickless 低功耗模式的话,我们可以将 WFI 指令放到空闲任务⾥⾯实现。

MSP430的低功耗设计

MSP430的低功耗设计

MSP430低功耗设计经常有人询问,MSP430的低功耗是如何实现的,该如何设计,功耗能做到多少?其实这些问题都不是简单能够回答的,一个系统的的低功耗设计,不仅仅是依靠MCU就能实现的,当然MCU 是非常重要的部分。

下面我就针对MCU的低功耗设计谈谈我的一些心得。

一般来讲MCU的功耗取决于三个方面,低功耗控制,低功耗工作模式选择,低功耗软件设计,本文将针对这三个方面进行阐述。

一、MSP430的低功耗控制1.1低功耗的基本原则针对MCU而言,有几个基本的原则,●工作频率越低,MCU的功耗越小我们在看数据手册的时候,经常会看到一个参数就是每MHZ消耗的功耗。

例如:100uA/1MHz,m 1.8v。

通常情况MCU会有三个参数,分别是运行模式功耗,空闲模式功耗和掉电模式功耗。

从参数可以看出,MCU的功耗直接和你使用的工作频率有关,在进行低功耗设计的时候一定要选择合适的工作频率。

●工作电压越低,MCU的功耗越小从上个例子也可以看出,MCU的功耗直接和工作电压相关。

厂家一般给出的都是MCU的最低工作电压,事实上很多产品由于外设原因,电源原因,都不是工作在MCU的最低工作电压上的,数据手册上的参数仅供对比参考,不能作为绝对值进行计算。

●工作的外设越少,MCU的功耗越小这个条比较好理解。

MCU的外设使用越多,功耗就越大。

另外,还有一个比较重要的原则,就是在FLASH中运行比在RAM中运行消耗更多的功耗。

所以如果MCU的RAM够大,可以把最常用的主循环和处理函数放在RAM中运行,这样可以节约大于30%的功耗。

注1:STM没有提供测试电压的参数,这个指标就无实际意义。

从上表可以看出,各个厂家提供的参数都不是在同样的环境测得的,各位同学在使用时要进行甄别,不要只盯着数字看。

1.3MSP430的低功耗设计针对如上的三条,MSP430都做了比较好的低功耗设计。

有的同学只是简单的对比数据手册上的技术参数来判定一个MCU的功耗情况,其实并不是很了解MCU的系统是如何实现低功耗的设计的。

MSP430微控制器低功耗设计方法分析

MSP430微控制器低功耗设计方法分析

MSP430微控制器低功耗设计方法分析随着物联网和嵌入式系统的快速发展,对微控制器低功耗设计方法的需求越来越迫切。

MSP430微控制器作为一种低功耗微控制器,具有出色的性能和低功耗特性,逐渐被广泛应用于各种电池供电的设备中。

本文将以MSP430微控制器为例,深入探讨其低功耗设计方法。

在设计MSP430微控制器应用时,低功耗是一个重要的考虑因素。

为了最大程度地减少功耗,我们可以采取以下几种方法。

1. 优化算法设计:在编写程序时,我们可以通过优化算法来减少微控制器的工作负载和能耗。

例如,避免使用复杂的循环和浮点运算,改用简单的逻辑和整数运算,可以有效降低功耗。

2. 睡眠模式:MSP430微控制器具有多种睡眠模式,可以在不需要工作时进入低功耗状态。

通过选择合适的睡眠模式,可以最大程度地降低功耗。

在睡眠模式中,MSP430微控制器会关闭一些不必要的模块和电源,从而降低功耗。

3. 时钟管理:时钟是微控制器的核心,也是功耗的主要来源之一。

合理管理时钟可以有效减少功耗。

在MSP430微控制器中,可以通过调整时钟频率、选择更低功耗的时钟源以及使用MCLK、SMCLK和ACLK等不同的时钟模块来实现功耗优化。

4. I/O 管理:I/O 端口通常是微控制器的功耗主要负责者之一。

通过合理管理I/O 端口,可以降低功耗。

例如,及时关闭不需要的输入/输出端口,降低端口的驱动能力或适当使用外部中断等方法。

5. 采用低功耗模块:MSP430微控制器具有丰富的低功耗模块和外设,可以根据需求选择合适的模块来降低功耗。

例如,MSP430可以通过功耗优化的ADC模块、计时器模块和UART模块等,实现对外设的低功耗控制。

除了以上几种方法,还有一些其他的设计技巧可以帮助我们在低功耗条件下充分发挥MSP430微控制器的优势。

6. 电源电压调整:降低微控制器的电源电压可以有效减少功耗。

MSP430微控制器通常具有多种电源供电电压选择,可以根据应用需求选择合适的工作电压。

msp430f5438使用说明

msp430f5438使用说明

MSP430F5438 开发板使用说明
1.电源
开发板使用DC5V的外部供电,跳线J3实现了开关功能。

电源接通后D6的LED点亮。

2. 复位按键
S13为复位按键。

按下复位按钮,即可将程序复位,从头开始执行。

3.键盘
开发板设有12个按键,为3*4的行列扫描键盘。

使用P3.0到P3.7端口,P3.0、P3.1、P3.2为行线,P3.4、P3.5、P3.6、P3.7为列线。

列线分别由上拉电阻拉到VCC,在行线与列线的每一个交接处有一个按键,按键的两端分别接在行线和列线上。

如果有键按下,则与只相连的行线与列线被连通,即可检测按键。

4.LCD显示
表1:12864LCD的引脚说明
IO口连接
P9.5------RS P9.6------R\W P9.7------E P10.0~10.7--------DB0~DB7 P11.0-------CS1 P11.1-------CS2 P11.2------RST
跳线J4是背光开关;
电位器R13背光亮度调节。

5.LED
P9.0 9.1 9.2 9.3 9.4 口接有LED,设置各口为输出高电平时LED点亮,低电平时熄灭。

6.扩展IO口
开发板两侧的双排插针。

MSP430F5438管脚。

MSP430F5438在数字低频功率放大器设计中的应用

MSP430F5438在数字低频功率放大器设计中的应用

1 引 言
功率放 大器不仅仅是 消费产品( 响) 音 中不可缺 少的
设备 , 还广泛应用 于控制 系统和测量 系统 中。低频 功率
2 设计 任 务
设 计并制作 一个低 频功率 放大器 , 要求末级 功放管
采用分立 的大功率 MOS晶体 管。 ( ) 当输入正弦信号 电压有效值为 5 1 mV 时 , 8Q 在 电阻负载( 一端 接地) , 出功率 ≥5 , 上 输 w 输出波形无 明 显失真 ; 通频带 为 2 Hz 0 Hz 输入 电阻为 6 0( ; 0 ~2 k ; 0 输 出噪声 电压有 效值 VO ≤ 5 N mV; 可能提 高功率放大 尽
( c a ia a dE e t c p r n &Xina oye h i Isi t, a to4 3 0 hn Me h ncl n lcr a De at t il me a toP ltc nc n tue Xi a 3 0 0C ia) t n
Ab t a t Th e i n c n e t fa n v l i ii i g me h d t r d to a o ' r q e c mpl i r sp o o e . e a s r c : e d sg o c p o e g t n t o o ta i n l w f e u n y a o d z i l i e r p s d Th mpl i ri b s d f i ie ae f s o n OCL o r— mp iy n n t M S 4 0 4 8 mi r — o to l r L p we a lf i g u i, P 3 F5 3 c o c n r le , CD n i g l r c s i g u i. a a t r fo t u a d s n a —p o e s n n t P r me e so u p t p we . on e s o f i i n y a d o h r r e e t d tme y wih l 一 i ADC mo u e n fc e c n t e sa e d t c e i l t b t 2 d lsi Th tu t r ft i c r u t s smpl . s lso x e i n s s o t a h o ra ic i i i e Re u t fe p rme t h w h t e p we mp ii rh s g o e f r n e i o e a p e s s c s t lfe a o d p r o ma c n s m s c t 。 u h a b r wi t , it ri n f c o , f i i n y a d S n. a ̄ d d h d s o to a t r e f c e c n O o Ke r s OCL p we mp iy n i u t b n wi t ; y wo d : o r a l i g c r i a d d h wh l f ii n y M S 4 0 4 8 f c ; oee ce c ; P 3 F5 3

MSP430F5438USCI模块的详细介绍

MSP430F5438USCI模块的详细介绍

MSP430F5438USCI模块的详细介绍MSP430F5438是一款德州仪器(TI)推出的超低功耗微控制器,搭载了USCI模块,提供多种通信接口,包括UART、SPI和I2C。

本文将详细介绍MSP430F5438的USCI模块的特性和应用。

USCI模块在MSP430F5438上有两个实例,分别称为USCI_A和USCI_B。

每个实例都可以配置为UART、SPI或I2C模式,提供相应的寄存器和功能。

以下将分别介绍每个实例的特性和应用。

CI_A模块:USCI_A模块是一个通用的串行通信模块,可配置为UART、SPI或I2C模式。

它提供了几个寄存器和功能,用于配置串口参数、接收和发送数据。

在UART模式下,USCI_A可以实现异步串行通信,支持多种波特率和数据格式。

在SPI模式下,它可以与其他设备进行高速的全双工通信,支持主从模式和多主模式。

在I2C模式下,USCI_A可以作为主设备或从设备,与其他I2C设备进行双向通信。

应用方面,USCI_A模块可用于实现与外部设备的通信,如串行打印机、传感器、外部存储器等。

通过UART模式,MSP430F5438可以与PC进行通信,进行数据传输和远程调试。

通过SPI模式,可以与其他MSP430微控制器或外部器件进行高速数据传输,如液晶显示屏、无线模块等。

通过I2C模式,可以与其他I2C设备(例如传感器、实时时钟等)进行双向通信,实现数据采集和控制。

CI_B模块:USCI_B模块也是一个通用的串行通信模块,可配置为UART、SPI或I2C模式。

它与USCI_A模块类似,提供了相应的寄存器和功能,用于配置通信参数和执行数据传输。

在UART模式下,USCI_B支持多种波特率、数据格式和校验方式。

在SPI模式下,它支持全双工通信和多种传输模式。

在I2C模式下,USCI_B可以作为主设备或从设备,与其他I2C设备进行双向通信。

应用方面,USCI_B模块与USCI_A模块相似,可应用于串行通信和外设接口。

MSP430的低功耗事件驱动工作模式

MSP430的低功耗事件驱动工作模式

MSP430的低功耗事件驱动工作模式MSP430系列单片机的各个模块都可以独立运行,如定时器、输入/输出端口、A/D转换、看门狗、液晶显示器等都可以在CPU休眠的状态下独立工作。

若需要主CPU工作,任何一个模块都可以通过中断唤醒CPU,从而使系统以最低功耗运行。

让CPU工作于突发状态可以充分利用CPU的低功耗性能。

通常,使用软件将CPU设定到某一低功耗模式,在需要时使用中断将CPU从休眠状态中唤醒,完成工作后又可以进入相应的休眠状态。

如:让CPU工作在LPM3状态,通过中断事件转换到AM活动模式,根据运行需要,又可以从AM状态进入相应的低功耗模式:LPM0/LPM3或LPM4。

系统的这些低功耗特性是靠系统对中断的响应来实现的。

系统响应中断的过程:(1)硬件自动中断服务。

包括PC入栈、SR入栈;中断向量赋给PC;GIE、CPUOFF、OSCOFF和SCG1清除;以及IFG标志位清除(单源中断标志)。

(2)执行中断处理子程序。

(3)执行RETI指令(中断返回),包括SR出栈;PC出栈。

例如:系统初始化完成后工作于低功耗模式0,中断事件触发到活动模式,中断处理结束后进入低功耗模式3。

;主程序……;初始化操作开始……;……;初始化结束BIS #GIE+CPUOFF, SR ; 主程序中设置低功耗模式0,LPM0;……;程序在这里停止;中断子程序…………;中断处理结束BIS #GIE+CPUOFF+SCG1+SCG0, 0(SP) ; 设置SR为低功耗模式3,LPM3RETI; 中断返回;系统进入低功耗模式3……如果主程序期待在中断返回之后继续执行某些操作,可以在中断处理子程序中改变SR的值为AM模式,系统中断退出后根据恢复的SR和PC的值,来执行设定的某些操作。

;主程序……;初始化操作开始……;……;初始化结束BIS #GIE+CPUOFF, SR ; 主程序中设置低功耗模式0,LPM0L1 操作1L2 操作2……;;中断子程序……;中断处理开始…………;中断处理结束BIS #GIE+CPUOFF, 0(SP) ; 设置SR为活动模式,AMRETI; 中断返回,系统进入活动模式……主程序执行到LPM0处停止执行,L1,L2等语句不执行。

如何在FreeRTOS下实现低功耗

如何在FreeRTOS下实现低功耗

如何在FreeRTOS下实现低功耗0.前言MCU实现低功耗本质而言便是停止MCU工作,通过中断的方式重新唤醒MCU,这些中断可以包括外部IO中断,UART接收中断,定时器中断等等。

如果结合嵌入式操作系统,可以在空任务或者空任务钩子函数中进入低功耗模式,在系统滴答时钟中断服务函数中重新回到正常工作模式。

利用操作系统进入和退出低功耗模式,需要熟悉嵌入式操作系统的空任务和系统滴答时钟中断,下面结合MSP430F5438和FreeRTOS总结一下如何使用嵌入式操作系统实现低功耗工作。

1.进入低功耗模式多数嵌入式操作系统都包含一个空任务,空任务优先级最低且一直保持就绪状态,空任务可以用于统计CPU使用率,或者让MCU进入低功耗状态。

如果不想修改空任务,还可以通过空任务的钩子函数插入实现低功耗的代码。

在FreeRTOS中,若需要打开空任务钩子函数,需要在FreeRTOSConfig.h中定义configUSE_IDLE_HOOK #define configUSE_IDLE_HOOK 1钩子函数中实现低功耗的代码如下[cpp]view plaincopy1.void vApplicationIdleHook( void )2.{3./* Called on each iteration of the idle task. In this case the idle task4.just enters a low power mode. */5.__bis_SR_register( LPM3_bits + GIE );6.}在这里可打开全局中断,若全局中断关闭那么系统可能再也“活”不过来了。

2.退出低功耗模式在大多数嵌入式操作系统中可以在系统滴答中断函数中退出低功耗模式。

由于MSP430的退出低功耗的指令只能在中断中使用,所以一旦进入系统滴答中断函数,可先退出低功耗模式。

具体的代码实现如下:[cpp]view plaincopy1.#pragma vector=configTICK_VECTOR2.__interrupt __raw void vTickISREntry( void )3.{4.extern void vPortTickISR( void );5.6.__bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPU OFF );7.vPortTickISR();8.}该段代码位于port.c中,在MSP430F5438分支中,系统滴答定时器采用TIMER0_A0所以configTICK_VECTOR被定义为#define configTICK_VECTORTIMER0_A0_VECTOR其他相关的定义可以查看FreeRTOSConfig.h文件3.实现过程例如某任务在t1时刻调用阻塞API,例如vTaskDelay,此时任务交出CPU使用权由OS进行任务调度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0.前言
MCU实现低功耗本质而言便是停止MCU工作,通过中断的方式重新唤醒MCU,这些中断可以包括外部IO中断,UART接收中断,定时器中断等等。

如果结合嵌入式操作系统,可以在空任务或者空任务钩子函数中进入低功耗模式,在系统滴答时钟中断服务函数中重新回到正常工作模式。

利用操作系统进入和退出低功耗模式,需要熟悉嵌入式操作系统的空任务和系统滴答时钟中断,下面结合MSP430F5438和FreeRTOS总结一下如何使用嵌入式操作系统实现低功耗工作。

1.进入低功耗模式
多数嵌入式操作系统都包含一个空任务,空任务优先级最低且一直保持就绪状态,空任务可以用于统计CPU使用率,或者让MCU进入低功耗状态。

如果不想修改空任务,还可以通过空任务的钩子函数插入实现低功耗的代码。

在FreeRTOS中,若需要打开空任务钩子函数,需要在FreeRTOSConfig.h中定义configUSE_IDLE_HOOK
#define configUSE_IDLE_HOOK 1
钩子函数中实现低功耗的代码如下
[cpp]view plaincopy
1.void vApplicationIdleHook( void )
2.{
3./* Called on each iteration of the idle task. In this case the idle tas
k
4. just enters a low power mode. */
5. __bis_SR_register( LPM3_bits + GIE );
6.}
在这里可打开全局中断,若全局中断关闭那么系统可能再也“活”不过来了。

2.退出低功耗模式
在大多数嵌入式操作系统中可以在系统滴答中断函数中退出低功耗模式。

由于MSP430的退出低功耗的指令只能在中断中使用,所以一旦进入系统滴答中断函数,可先退出低功耗模式。

具体的代码实现如下:[cpp]view plaincopy
1.#pragma vector=configTICK_VECTOR
2.__interrupt __raw void vTickISREntry( void )
3.{
4.extern void vPortTickISR( void );
5.
6. __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );
7. vPortTickISR();
8.}
该段代码位于port.c中,在MSP430F5438分支中,系统滴答定时器采用TIMER0_A0所以configTICK_VECTOR被定义为
#define configTICK_VECTORTIMER0_A0_VECTOR
其他相关的定义可以查看FreeRTOSConfig.h文件
3.实现过程
例如某任务在t1时刻调用阻塞API,例如vTaskDelay,此时任务交出CPU使用权由OS进行任务调度。

t2时刻,由于没有其他就绪任务,OS运行空任务,在空任务的最后进入空任务钩子函数,在空任务钩子函数中MCU进入低功耗模式,此时可进入LPM3模式。

t3时刻MCU进入低功耗模式之后,MCU停止工作。

t4时刻,由于系统滴答时钟中断服务函数中,MCU重新处于活跃状态,并且通过指令退出低功耗模式,此时OS任务调度器再次工作,若此时任务再次处于就绪状态便重新运行该任务。

以上便是如何利用OS实现低功耗的基本方法,但是t3时刻和t4时刻是有反复的。

例如,系统滴答时钟ISR发生之后,OS任务调度器中并没有就绪的任务,只能再次运行空任务,通过空任务再次进入低功耗模式,如此反复直到某任务就绪便执行任务代码。

通过以上的分析,使用嵌入式操作系统和实现MCU低功耗并不矛盾,反而带来了诸多方便。

相关文档
最新文档