为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

深度睡眠模式操作技术笔记

2011-11-28 21页 pdf 1MB 39阅读

用户头像

is_004283

暂无简介

举报
深度睡眠模式操作技术笔记 广州致远电子有限公司 工程技术笔记 LM3S 系列微控制器 AN01010101 V1.00 Date:2008/07/24 睡眠与深度睡眠模式的操作 类别 内容 关键词 睡眠、深度睡眠、系统时钟源、系统时钟频率 摘 要 本文主要介绍了如何对 LM3S 系列微控制器的睡眠和深度睡眠模式的操作 Note Technical 广州致远电子有限公司 LM3S 系列微控制器 睡眠与深度睡眠模式的操作 修订历史 版本 日期 原...
深度睡眠模式操作技术笔记
广州致远电子有限公司 工程技术 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. 深度睡眠模式下时钟源采用外
/
本文档为【深度睡眠模式操作技术笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索