S.D.Lu的MSP430入门学习笔记(5):看门狗定时器和低功耗模式

更新时间:2023-05-21 18:28:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

S.D.Lu的MSP430入门学习笔记(5):

看门狗定时器和低功耗模式

看门狗定时器WDT最简单的应用例程是“msp430g2xx2_wdt_04.c”

程序运行结果是P1.0口输出约33.6Hz的方波信号。为什么是33.6Hz呢?

即上电清零(PUC)后,WDT的时钟来源是DCOCLK,约1.1MHz,其复位间隔为32768个时钟周期,所以P1.0口的芯片频率=1.1MHz/32768≈33.569Hz。

代码分析:

78行,程序运行到这来之后进入低功耗模式LPM4,所有时钟均停止,振荡器被禁止。但DCO除外,因为禁用DCO是有条件的。

在本例中,DCOCLK被用作MCLK和SMCLK,所以不能被关闭。

程序运行到78行时,CPU停止运行,但是WDT依然由DCOCLK驱动着,每经过32768个DCOCLK周期就产生一个上电清零PUC,退出LPM4低功耗模式,CPU被唤醒,程序会调到main函数入口重新运行。所以每32768个DCOCLK周期,76~78行代码被执行一次,从而在P1.0口输出约33.6Hz的方波信号。

低功耗模式:

MSP430有5种运行模式,使用状态寄存器SR内的CPUOFF,OSCOFF,SCG0和SCG1位来配置低功耗模式0到4。

在程序中,进入低功耗模式的操作很简单,调用相应的宏定义即可。

本例中78行调用的是本征函数_BIS_SR();,更直观和简单的写法的调用上图中的宏。 如:_BIS_SR(LPM4_bits);

可以写成:LPM4;。

在实际应用中,经常会在进入低功耗模式时打开全局中断,以便中断能够唤醒CPU处理各种事件。所以经常用_BIS_SR(LPMx_bits + GIE);语句进入低功耗模式。当然也可以单独打开和关闭全局中断,分别使用_BIS_SR(GIE);和_BIC_SR(GIE);语句。

低功耗模式的退出

TI官方例程“msp430g2xx2_wdt_01.c”的代码如下。

其运行结果是,P1.0口输出频率约为16Hz的方波。

如果将程序内容改为

其运行结果是,P1.0口输出频率约为16Hz的方波,P1.6口输出频率约为78KHz的方波。

如果将87行的LPM0_EXIT;屏蔽掉,则P1.0口输出频率约为16Hz的方波,P1.6口无方波输出。这说明在本例中,如果在WDT中断函数中没有执行LPM0_EXIT;语句,则76~79行无法被执行,程序会在执行完75行的代码后进入LPM0模式。

在低功耗模式下,一个被启用的中断事件将MSP430从任一低功耗模式中唤醒。如果在中断服务函数中没有退出低功耗模式,即没有执行LPMx_EXIT;语句,则执行完中断服务函数后,CPU会重新进入低功耗模式。

看门狗定时器:

MSP430的看门狗定时器WDT有两种工作模式:看门狗模式和定时器模式。

WDT的计数器WDTCNT是一个16位的不能直接用软件访问递增计数器。WDTCNT通过安全装置定时器+控制寄存器WDTCTL来控制WDTCNT和选择时间间隔。WDTCNT可以来源于ACLK或SMCLK。用WDTSSEL位时钟源选择。

看门狗模式下,WDT的作用是在程序运行出现异常时复位CPU,保障系统安全。定时器模式下,WDT用于产生一个定时时间,也可以用于产生一个定时中断。

因为WDT的计数器WDTCNT不能直接用软件访问,这能选择几个定时时间。 例程“msp430g2xx2_wdt_07.c”代码如下。

73~81行,用于选择不同的定时间隔,产生PUC的频率不同,程序运行的结果是,在P1.0输出不同频率的方波。

例程“msp430g2xx2_wdt_01.c”代码如下。

71行,WDT_MDLY_32可以换成下面宏定义中的其他值,可以得到不同的WDT中断频率,程序运行的结果是,在P1.0输出不同频率的方波。

注意,注释中所标示的时间间隔是有前提条件,那就是SMCLK=1MHz,

ACLK=32768Hz。

72行,使能WDT中断。75行,使能全局中断,并进入LPM0模式。

“msp430g2xx2_wdt_07.c”和“msp430g2xx2_wdt_01.c”两个例程使用了WDT的不同模式,前者使用看门狗模式,后者使用的是定时器模式。每种模式只有8种时间间隔可以选择。

WDT相关的寄存器有三个,WDTCTL、IE1、IFG1,其各个位的功能定义请查看用户指南。应该注意的是,WDTCTL是一个16位寄存器,其高8位为操作密码。每次写入WDTCTL时,高8为必须写入0x5A,即操作密码,否则就会产生一个PUC。读WDTCTL时,其高8位总是0x69。

作者:S.D.Lu

深圳

2014-3-26

本文来源:https://www.bwwdw.com/article/sxm4.html

Top