广州致远电子有限公司
工程技术
LM3S 系列微控制器
AN01010101 V1.00 Date:2008/07/24
睡眠与深度睡眠模式的操作
类别 内容
关键词 睡眠、深度睡眠、系统时钟源、系统时钟频率
摘 要 本文主要介绍了如何对 LM3S 系列微控制器的睡眠和深度睡眠模式的操作
Note
Technical
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
修订历史
版本 日期 原因
V1.00 2008/07/24 创建文档
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
i
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
销售与服务网络(一)
广州周立功单片机发展有限公司
地址:广州市天河北路 689 号光大银行大厦 12 楼 F4 邮编:510630
电话:(020)38730916 38730917 38730972 38730976 38730977
传真:(020)38730925
网址:www.zlgmcu.com
广州专卖店
地址:广州市天河区新赛格电子城 203-204 室
电话:(020)87578634 87569917
传真:(020)87578842
南京周立功
地址:南京市珠江路 280 号珠江大厦 2006 室
电话:(025)83613221 83613271 83603500
传真:(025)83613271
北京周立功
地址:北京市海淀区知春路 113 号银网中心 A 座
1207-1208 室 (中发电子市场斜对面)
电话:(010)62536178 62536179 82628073
传真:(010)82614433
重庆周立功
地址:重庆市石桥铺科园一路二号大西洋国际大厦
(赛格电子市场)1611 室
电话:(023)68796438 68796439
传真:(023)68796439
杭州周立功
地址:杭州市天目山路 217 号杭州电子科技大楼 502
室
电话:(0571) 28139611 28139612 28139613
传真:(0571) 28139621
成都周立功
地址:成都市一环路南二段 1 号数码同人港 401 室
(磨子桥立交西北角)
电话:(028)85439836 85437446
传真:(028)85437896
深圳周立功
地址:深圳市深南中路 2070 号电子科技大厦 C 座 4
楼 D 室
电话:(0755)83781788(5 线)
传真:(0755)83793285
武汉周立功
地址:武汉市洪山区广埠屯珞瑜路 158 号 12128 室
(华中电脑数码市场)
电话:(027)87168497 87168297 87168397
传真:(027)87163755
上海周立功
地址:上海市北京东路 668 号科技京城东座 7E 室
电话:(021)53083452 53083453 53083496
传真:(021)53083491
西安办事处
地址:西安市长安北路 54 号太平洋大厦 1201 室
电话:(029)87881296 83063000 87881295
传真:(029)87880865
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
ii
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
销售与服务网络(二)
广州致远电子有限公司
地址:广州市天河区车陂路黄洲工业区 3 栋 2 楼
邮编:510660
传真:(020)38601859
网址:www.embedtools.com (嵌入式系统事业部)
www.embedcontrol.com (工控网络事业部)
www.ecardsys.com (楼宇自动化事业部)
技术支持:
CAN-bus:
电话:(020)22644381 22644382 22644253
邮箱:can.support@embedcontrol.com
iCAN 及模块:
电话:(020)28872344 22644373
邮箱:ican@embedcontrol.com
MiniARM: 以太网及无线:
电话:(020)28872684 28267813 电话:(020)22644380 22644385 22644386
邮箱:miniarm.support@embedtools.com 邮箱:wireless@embedcontrol.com
ethernet.support@embedcontrol.com
编程器:
仪器:
电话:(020)22644371 电话:(020)22644375 28872624 28872345
邮箱:programmer@embedtools.com 邮箱:tools@embedtools.com
ARM 嵌入式系统: 楼宇自动化:
电话:(020)28872347 28872377 22644383 22644384 电话:(020)22644376 22644389 28267806
邮箱:arm.support@zlgmcu.com 邮箱:mjs.support@ecardsys.com
mifare.support@zlgmcu.com
销售:
电话:(020)22644249 22644399 22644372 22644261 28872524
28872342 28872349 28872569 28872573 38601786
维修:
电话:(020)22644245
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
iii
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
目 录
1. 适用范围...................................................................................................................1
2. 睡眠与深度睡眠模式的应用...................................................................................2
2.1 功能概述...................................................................................................................2
2.2 基础时钟源...............................................................................................................3
2.3 API函数 ....................................................................................................................3
2.4 睡眠模式配置操作...................................................................................................5
2.5 睡眠模式操作的程序示例 .......................................................................................5
2.6 深度睡眠模式配置操作 ...........................................................................................6
2.7 深度睡眠模式操作的程序示例 ...............................................................................9
2.8 深度睡眠模式中串口通信的操作示例 .................................................................10
2.9 中断唤醒睡眠状态时间参数测试 .........................................................................12
3. 参考
.................................................................................................................15
4. 免责声明.................................................................................................................16
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
1
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
1. 适用范围
此技术笔记适用于 LM3S1000/2000/3000/5000/8000 系列微控制器。
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
1
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2. 睡眠与深度睡眠模式的应用
2.1 功能概述
LM3S系列单片机主要有 3 种工作模式:运行模式(Run-Mode)、睡眠模式(Sleep-Mode)、
深度睡眠模式(Deep-Sleep-Mode)。某些型号还具有单独的极为省电的冬眠模块(Hibernation
Module)。而对各个模式下的外设时钟选通以及系统时钟源的控制主要由
2.1中的寄存器来
完成。
表 2.1 控制寄存器
名称 描述
RCC、RCC2 运行模式时钟配置
RCGC0—RCGC2 运行模式时钟选通控制
SCGC0—SCGC2 睡眠模式时钟选通控制
DCGC0—DCGC2 深度睡眠模式时钟选通控制
DSLPCLKCFG 深度睡眠系统时钟配置
运行模式是正常的工作模式,处理器内核将积极地执行代码。在睡眠模式下,系统时钟不
变,但处理器内核不再执行代码(内核因不需要时钟而省电)。在深度睡眠模式下,系统时钟可
变,处理器内核同样也不再执行代码。深度睡眠模式比睡眠模式更为省电。有关这 3 种工作模
式的具体区别请参见表 2.2的描述。
调用函数 SysCtlSleep( )可使处理器立即进入睡眠模式,而调用函数 SysCtlDeepSleep( )可使
处理器立即进入深度睡眠模式。任一中断都可以将处理器从睡眠或深度睡眠模式唤醒,并使处
理器恢复到睡眠前的运行状态。因此在进入睡眠或深度睡眠之前,必须配置某个片内外设的中
断并允许其在睡眠或深度睡眠模式下继续工作,如果不这样,则只有复位或重新上电才能结束
睡眠或深度睡眠状态。
表 2.2 运行模式、睡眠模式和深度睡眠模式的运行对照表
处理器状态
比较类别
运行模式
(Run-Mode)
睡眠模式
(Sleep-Mode)
深度睡眠模式
(Deep-Sleep-Mode)
处理器和存储器状态 执行代码 存储器内容保持不变,代码停止运行
存储器内容保持不变,
代码停止运行
功耗大小 较大 小 很小
控制外设时钟选通功
能的寄存器组 RCGCn
RCGCn(ACG 清零)
或
SCGCn(ACG 置位)
RCGCn(ACG 清零)
或
DCGCn(ACG 置位)
系统时钟源
所有时钟源都
可用,包括
MOSC、
IOSC、
IOSC/4、
30KHz 内部振
荡器和
外部实时振荡
器和
PLL 输出
与运行模式下的系统
时钟源相同
可以选择的时钟源包括
MOSC、
IOSC、
30KHz 内部振荡器和
外部实时振荡器,
并且上述可供选择的时
钟源也可被分频并作为
系统时钟源
注:ACG是寄存器 RCC内的自动时钟选通位。在进入睡眠或深度睡眠模式之前一般都应置位 ACG。
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
2
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2.2 基础时钟源
LM3S 系列单片机的系统时钟可由下列的基础时钟源转换而来:
主振荡器(MOSC):由外部晶体振荡器或单端时钟源来驱动;
12MHz 内部振荡器(IOSC):内部振荡器是片内时钟源。它不需要使用任何外部元件便可工作。内
部振荡器的频率是 12MHz±30%;
30KHz 内部振荡器:内部 30KHz 振荡器与内部 12MHz 振荡器类似,它提供 30KHz±30%的工作频
率,主要用于在深度睡眠的节电模式中;
外部实时振荡器:外部实时振荡器提供一个低频率、精确的时钟基准。它的目的是给系统提供一个
实时时钟源。实时振荡器是休眠模块的一部分,它也可为深度睡眠和休眠模式提供一个精确的时钟
源。
2.3 API 函数
1. SysCtlSleep( )
这个函数是使用WFI汇编指令,使处理器立即进入睡眠模式,并等待中断异常发生唤醒处
理器,如表 2.3所示。
表 2.3 函数 SysCtlSleep( )
功能 使处理器立即进入睡眠模式
原型 void SysCtlSleep(void)
参数 无
返回 无(在处理器没有被唤醒之前,暂时不会返回)
2. SysCtlDeepSleep( )
这个函数先使能系统控制寄存器(NVICSC)的深度睡眠位,然后再使用WFI汇编指令,使
处理器立即进入深度睡眠模式,并等待中断异常发生唤醒处理器,如表 2.4所示。
表 2.4 函数 SysCtlDeepSleep( )
功能 使处理器立即进入深度睡眠模式
原型 void SysCtlDeepSleep(void)
参数 无
返回 无(在处理器没有被唤醒之前,暂时不会返回)
3. SysCtlPeripheralClockGating( )
这个函数是控制是否使能自动时钟门控功能,如表 2.5所示。
表 2.5 函数 SysCtlPeripheralClockGating( )
功能 控制睡眠或深度睡眠模式中是否采用 SCGCn 和 DCGCn 来控制外设时钟选通功能
原型 void SysCtlPeripheralClockGating(tBoolean bEnable)
参数
bEnable:取值为 true 或 false
当值为 true 时,睡眠或深度睡眠模式中外设时钟选通由 SCGCn 和 DCGCn 来控制
当值为 false 时,睡眠或深度睡眠模式中外设时钟选通由运行模式下的 RCGCn 来控制,
SCGCn 和 DCGCn 将不起作用
返回 无
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
3
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
4. SysCtlPeripheralSleepEnable( )
这个函数是用于使能睡眠模式下某个片内外设的时钟选通,如表 2.6所示。
表 2.6 函数 SysCtlPeripheralSleepEnable( )
功能 使能睡眠模式下的某个片内外设
原型 void SysCtlPeripheralSleepEnable(unsigned long ulPeripheral)
参数 ulPeripheral:要使能的片内外设,与函数 SysCtlPeripheralEnable( )当中参数 ulPeripheral 的取值相同
返回 无
5. SysCtlPeripheralSleepDisable( )
这个函数是用于禁能睡眠模式下某个片内外设的时钟选通,如表 2.7所示。
表 2.7 函数 SysCtlPeripheralSleepDisable( )
功能 禁能睡眠模式下的某个片内外设
原型 Void SysCtlPeripheralSleepDisable(unsigned long ulPeripheral)
参数 ulPeripheral:要禁能的片内外设,与函数 SysCtlPeripheralEnable( )当中参数 ulPeripheral 的取值相同
返回 无
6. SysCtlPeripheralDeepSleepEnable( )
这个函数是用于使能深度睡眠模式下某个片内外设的时钟选通,如表 2.8所示。
表 2.8 函数 SysCtlPeripheralDeepSleepEnable( )
功能 使能深度睡眠模式下的某个片内外设
原型 void SysCtlPeripheralDeepSleepEnable(unsigned long ulPeripheral)
参数 ulPeripheral:要使能的片内外设,与函数 SysCtlPeripheralEnable( )当中参数 ulPeripheral 的取值相同
返回 无
7. SysCtlPeripheralDeepSleepDisable( )
这个函数是用于禁能深度睡眠模式下某个片内外设的时钟选通,如表 2.9所示。
表 2.9 函数 SysCtlPeripheralDeepSleepDisable( )
功能 禁能深度睡眠模式下的某个片内外设
原型 void SysCtlPeripheralDeepSleepDisable(unsigned long ulPeripheral)
参数 ulPeripheral:要禁能的片内外设,与函数 SysCtlPeripheralEnable( )当中参数 ulPeripheral 的取值相同
返回 无
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
4
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2.4 睡眠模式配置操作
睡眠模式下,处理器内核和存储器子系统都不使用时钟。外设仅在相应的时钟选通位使
能时,才使用时钟。睡眠模式下,系统时钟源和频率均与运行模式下的相同。其配置
如
图 2.1所示。
图 2.1 睡眠模式的配置流程
2.5 睡眠模式操作的程序示例
本示例程序配置运行模式下的系统时钟源为主振荡器,采用外设定时器 0 超时溢出中断
将处理器从睡眠模式中唤醒,并返回到睡眠前的处理器状态,因此在睡眠模式下就必须使能
外设定时器 0 的时钟选通,且必须设置在异常向量表中定时器 0 的中断服务程序地址,主程
序如程序清单 2.1所示。
程序清单 2.1 睡眠模式操作
/******************************************************************************************
** Function name: main
** Descriptions: 主函数
** input parameters: 无
** output parameters: 无
******************************************************************************************/
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
5
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
int main(void)
{
SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |
SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN ); // 配置系统时钟为 6MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // 使能外设 TIMER0
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER); // 配置定时器 0 为 32BIT 周期模式
TimerLoadSet(TIMER0_BASE, TIMER_A, 30000000); // 加载值=3000000,即睡眠时间 5S
TimerControlStall(TIMER0_BASE,TIMER_A,true); // 单步调试程序,TIMER 暂停计数
TimerIntClear(TIMER0_BASE,0x70F); // 清除定时器 0 中断
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT); // 超时溢出中断使能
IntEnable(INT_TIMER0A); // 对应外设 TIMER0A 中断使能
IntMasterEnable(); // 中断总使能
TimerEnable(TIMER0_BASE,TIMER_A); // 启动定时器
SysCtlPeripheralClockGating(true); // 置位 ACG,开启自动时钟门控
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER0); // 在睡眠模式下使能 TIMER0
SysCtlSleep(); // 使处理器进入睡眠模式,
// 等待定时器溢出中断唤醒处理器
while(1)
{
……
}
}
/******************************************************************************************
** Function name: TIMERA_ISR
** Descriptions: 定时器 0 中断服务程序
** input parameters: 无
** output parameters: 无
******************************************************************************************/
void TIMERA_ISR(void)
{
unsigned long IntStatus;
IntStatus = TimerIntStatus(TIMER0_BASE,true);
TimerIntClear(TIMER0_BASE,IntStatus);
}
2.6 深度睡眠模式配置操作
深度睡眠模式下,处理器内核和存储器子系统都不使用时钟。外设仅在相应的时钟选通
位使能时,才使用时钟。在深度睡眠模式下,其系统时钟源默认为主振荡器,可通过对寄存
器DSLPCLKCFG进行配置,从而对系统时钟源进行选择,其配置参数及时钟源和系统时钟
频率如
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
6
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
表 2.10所示,其配置流程如图 2.2所示。
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
7
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
表 2.10 配置参数及时钟源和频率对比表
配置参数
睡眠前状态
DSOSCSRC
(选择时钟源)
DSDIVORIDE
(时钟分频值)
系统时钟源 系统时钟频率
0(PLL 不运行) 忽略 系统时钟源频率
0(PLL 运行)
主振荡器
1 内部 12MHz 振荡器
3 内部 30KHz 振荡器
PLL 运行
或
PLL 不运行
7
分频值 =
DSDIVORIDE+1
外部实时振荡器
分频值
系统时钟源频率
注:其中 DSOSCSRC和 DSDIVORIDE为 DSLPCLKCFG寄存器的两个有效位段。
图 2.2 深度睡眠模式的配置流程
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
8
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2.7 深度睡眠模式操作的程序示例
本示例程序配置运行模式下的系统时钟源为PLL输出,频率为 20MHz,而深度睡眠模
式下采用内部 30KHz振荡器作为系统时钟源,频率为(30 / (DSDIVORIDE + 1))KHz;采用外
设定时器 0 超时溢出中断将处理器从深度睡眠模式中唤醒,并返回到深度睡眠前的处理器状
态,因此在深度睡眠模式下就必须使能外设定时器 0 的时钟选通,且必须设置在异常向量表
中定时器 0 的中断服务程序地址,主程序如程序清单 2.2所示。
程序清单 2.2 深度睡眠模式操作
/******************************************************************************************
** Function name: main
** Descriptions: 主函数
** input parameters: 无
** output parameters: 无
******************************************************************************************/
int main(void)
{
SysCtlClockSet( SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL |
SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN ); // 配置系统时钟为 20MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // 使能外设 TIMER0
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER); // 配置定时器 0 为 32BIT 周期模式
TimerLoadSet(TIMER0_BASE, TIMER_A, 30000000); // 加载值=3000000,即睡眠时间 5S
TimerControlStall(TIMER0_BASE,TIMER_A,true); // 单步调试程序,TIMER 暂停计数
TimerIntClear(TIMER0_BASE,0x70F); // 清除定时器 0 中断
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT); // 超时溢出中断使能
IntEnable(INT_TIMER0A); // 对应外设 TIMER0A 中断使能
IntMasterEnable(); // 中断总使能
TimerEnable(TIMER0_BASE,TIMER_A); // 启动定时器
SysCtlPeripheralClockGating(true); // 置位 ACG,开启自动时钟门控
HWREG(SYSCTL_DSLPCLKCFG) = (0<<23) | // 设置分频值
(3 << 4); // 选择系统时钟源,此处为内部 30KHz
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_TIMER0); // 在深度睡眠模式下使能 TIMER0
SysCtlDeepSleep(); // 使处理器进入睡眠模式,
// 等待定时器溢出中断唤醒处理器
while(1)
{
……
}
}
/******************************************************************************************
** Function name: TIMERA_ISR
** Descriptions: 定时器 0 中断服务程序
** input parameters: 无
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
9
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
** output parameters: 无
******************************************************************************************/
void TIMERA_ISR(void)
{
unsigned long IntStatus;
IntStatus = TimerIntStatus(TIMER0_BASE,true);
TimerIntClear(TIMER0_BASE,IntStatus);
}
2.8 深度睡眠模式中串口通信的操作示例
由于在深度睡眠模式中,其系统时钟源频率与运行模式下可能不同,因此当微控制器运
用于一些通信场合中,就有可能发生因系统时钟源频率发生变化,而导致通信系统的不可靠。
所以在此种情况中,应对深度睡眠模式中系统时钟源的控制和片内通信外设要有详细的了解
和准确的配置。
本示例程序配置运行模式下的系统时钟源为PLL输出,频率为 20MHz;而深度睡眠模
式下的系统时钟源,由于串口通信中对波特率的参考时钟的频率精确度要求较高,而内部振
荡器的频率偏移较大,因此采用主时钟振荡器作为系统时钟源,频率为 6MHz;中断唤醒采
用片内外设UART0 的接收中断将处理器从深度睡眠模式中唤醒,并返回到深度睡眠前的处
理器状态,因此在深度睡眠模式下就必须使能外设UART0 的时钟选通,且必须设置在异常
向量表中UART0 的中断服务程序地址,程序如程序清单 2.3所示。
程序清单 2.3 深度睡眠中的串口通信
/******************************************************************************************
** Function name: main
** Descriptions: 主函数
** input parameters: 无
** output parameters: 无
******************************************************************************************/
#define SleepCLK (6000000) // 深度睡眠模式下的时钟频率
#define Baud (9600) // 通信波特率
int main(void)
{
WaitJTAG(); // 防止 JTAG 失效
SysCtlClockSet( SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL |
SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN); // 配置 PLL,系统时钟为 20MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能外设 GPIOA
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // 使能外设 UART0
GPIOPadConfigSet(USE_PORT,
RX_LED,
GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU); // 引脚配置
GPIODirModeSet(USE_PORT,
RX_LED,
GPIO_DIR_MODE_OUT); // 引脚输出配置
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
10
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
GPIOPinWrite(USE_PORT,RX_LED,~(RX_LED)); // 测试引脚功能
TimeDelay(500000);
GPIOPinWrite(USE_PORT,RX_LED,(RX_LED));
Uart0Init(Baud,1); // 初始化 UART0,设置中断优先级为 1
IntMasterEnable(); // 中断总使能
SysCtlPeripheralClockGating(true); // 置位 ACG,开启自动时钟门控
HWREG(SYSCTL_DSLPCLKCFG) = (0 << 23) |(0 << 4); // 深度睡眠模式下的时钟配置
Uart0Send("Enter Sleep!\r\n",strlen("Enter Sleep!\r\n")); // 提示进入睡眠
UARTConfigSetExpClk(UART0_BASE, // 根据深度睡眠模式下的时钟源频率,
SleepCLK, // 配置串口通信波特率和数据格式
Baud,
UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOA); // 在深度睡眠模式下使能 GPIOA
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_UART0); // 在深度睡眠模式下使能 UART0
SysCtlDeepSleep(); // 使 CM3 进入深度睡眠模式
UARTConfigSet(UART0_BASE , // CM3 被唤醒,重新根据系统时钟频率
Baud , // 配置相关串口通信参数
UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
Uart0Send("Exit Sleep!\r\n",strlen("Exit Sleep!\r\n")); // 提示 CM3 被唤醒
while(1)
{
if (ucBit)
{
Uart0Send("RX:",strlen("RX:"));
Uart0Send(ucBuffer,strlen(ucBuffer)); // 回发数据
Uart0Send("\r\n",strlen("\r\n"));
ucBit = 0; // 清发送标志
ucNum = 0;
memset(ucBuffer,0,200); // 重新初始化缓冲区
}
}
}
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
11
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2.9 中断唤醒睡眠状态时间参数测试
本节针对LM3S系列单片机在两种睡眠模式下的中断唤醒时间进行了测试,其具体的测
试条件和结果如表 2.11错误!未找到引用源。所示。
表 2.11 睡眠状态的中断唤醒时间测试表
项目 睡眠模式 深度睡眠模式
时钟源
PLL
(20MHz)
主振荡器
(6MHz)
内部振荡器
(12MHz)
内部振荡器
(30KHz)
外部实时振荡器
(32KHz)
串口接收中断唤醒时间 3.3ms 4.07ms 27.22ms 42.55ms 50.91ms
GPIO 中断唤醒时间 2.09us 774.70us 24.27ms 24.37ms 24.45ms
串口中断唤醒接收数据 正确 正确 错误 错误 正确
中断方式 串口接收中断 或 GPIO 下降沿中断
运行模式状态 系统时钟源为 PLL 输出,频率为 20MHz
测试方式
利用逻辑分析仪观察 PC 机串口发送数据或外部按键动作
到对应的中断服务程序中 IO 口电平翻转的时间间隔
测试方式的连接示意图如图 2.3所示。
图 2.3 测试连接示意图
根据以上测试方法,以下分别为测试时利用逻辑分析仪 LA1032 捕捉的时序波形图。
1. 睡眠模式下中断唤醒时间参数时序波形图如图 2.4所示。其中图中的第一次唤醒为
串口接收中断唤醒,通过LED线的电平变换指示唤醒发生,时间标签为M1-M2;第二次唤醒
为GPIO中断唤醒,通过KEYLED线的电平变换指示唤醒发生,时间标签为M3-M4。
第二次唤醒 第一次唤醒
图 2.4 睡眠模式下的中断唤醒时间参数时序图
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
12
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
2. 深度睡眠模式下时钟源采用主振荡器的中断唤醒时间参数时序波形图如图 2.5所
示。其中图中的第一次唤醒为串口接收中断唤醒,通过LED线的电平变换指示唤醒发生,时
间标签为M1-M2;第二次唤醒为GPIO中断唤醒,通过KEYLED线的电平变换指示唤醒发生,
时间标签为M3-M4。
第一次唤醒 第二次唤醒
图 2.5 深度睡眠模式下外部 6MHz 时钟源的中断唤醒时间参数时序图
3. 深度睡眠模式下时钟源采用内部 12MHz振荡器的中断唤醒时间参数时序波形图如
图 2.6所示。其中图中的第一次唤醒为串口接收中断唤醒,通过LED线的电平变换指示唤醒
发生,时间标签为M1-M2;第二次唤醒为GPIO中断唤醒,通过KEYLED线的电平变换指示
唤醒发生,时间标签为M3-M4。
图 2.6 深度睡眠模式下内部 12MHz 时钟源的中断唤醒时间参数时序图
4. 深度睡眠模式下时钟源采用内部 30KHz振荡器的中断唤醒时间参数时序波形图如
图 2.7所示。其中图中的第一次唤醒为串口接收中断唤醒,通过LED线的电平变换指示唤醒
发生,时间标签为M1-M2;第二次唤醒为GPIO中断唤醒,通过KEYLED线的电平变换指示
唤醒发生,时间标签为M3-M4。
第一次唤醒 第二次唤醒
第一次唤醒 第二次唤醒
图 2.7 深度睡眠模式下内部 30KHz 时钟源的中断唤醒时间参数时序图
工程技术笔记 ©2008 Guangzhou ZHIYUAN Electronics CO., LTD.
13
广州致远电子有限公司
LM3S 系列微控制器
睡眠与深度睡眠模式的操作
5. 深度睡眠模式下时钟源采用外