节能模式
节
能
10
第 10 章 节能模式
目录
本章包括下列主题:
10.1 简介 ......................................................................................................................... 10-2
10.2 节能模式控制寄存器 ...................................................................................
节
能
10
第 10 章 节能模式
目录
本章包括下列主题:
10.1 简介 ......................................................................................................................... 10-2
10.2 节能模式控制寄存器 ................................................................................................ 10-3
10.3 节能模式下的操作 .................................................................................................. 10-12
10.4 中断 ....................................................................................................................... 10-19
10.5 与节能模式相关的 I/O 引脚 .................................................................................... 10-19
10.6 DEBUG (调试)模式下的操作 ............................................................................. 10-20
10.7 复位 ....................................................................................................................... 10-20
10.8
技巧 ................................................................................................................ 10-21
10.9 相关应用笔记 ......................................................................................................... 10-22
10.10 版本历史 ................................................................................................................ 10-23
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-1 页
模
式
PIC32MX 系列参考手册
10.1 简介
本章介绍PIC32MX器件系列的节能工作模式。PIC32MX器件具有 9种低功耗模式(分为两类),
允许用户在功耗和器件性能之间寻求平衡。在下面所述的所有模式中,器件可以通过软件选择所
需的节能模式。
10.1.1 CPU 运行模式
在 CPU 运行模式下, CPU 保持运行,而外设可以选择开启或关闭。
• FRC RUN (运行)模式:CPU 时钟来自 FRC 时钟源(带或不带后分频器)。
• LPRC RUN (运行)模式:CPU 时钟来自 LPRC 时钟源。
• SOSC RUN (运行)模式:CPU 时钟来自 SOSC 时钟源。
• 外设总线分频模式:
外设所用时钟的频率为 CPU 时钟 (SYSCLK)的可编程分频。
10.1.2 CPU 暂停模式
在 CPU 暂停模式下, CPU 会暂停。根据所处模式,外设可以继续工作,也可以暂停。
• POSC IDLE (空闲)模式:系统时钟来自 POSC。系统时钟源继续工作。
外设继续工作,但可以选择单独禁止。
• FRC IDLE (空闲)模式:系统时钟来自 FRC (带或不带后分频器)。
外设继续工作,但可以选择单独禁止。
• SOSC IDLE (空闲)模式:系统时钟来自 SOSC。
外设继续工作,但可以选择单独禁止。
• LPRC IDLE (空闲)模式:系统时钟来自 LPRC。
外设继续工作,但可以选择单独禁止。这是时钟运行时器件的最低功耗模式。
• SLEEP (休眠)模式:暂停 CPU、系统时钟源以及工作在系统时钟源下的任何外设。
使用特定时钟源的某些外设可在 Sleep (休眠)模式下继续工作。这是器件的最低功耗模式。
DS61130E_CN 第 10-2 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
10.2 节能模式控制寄存器
节能模式控制包含以下特殊功能寄存器(Special Function Register, SFR):
• OSCCON:振荡器模块控制寄存器
OSCCONCLR、 OSCCONSET 和 OSCCONINV:OSCCON 的原子级位操作只写寄存器
• WDTCON:看门狗定时器模块控制寄存器
WDTCONCLR、 WDTCONSET 和 WDTCONINV:WDTCON 的原子级位操作只写寄存器
• RCON:复位模块控制寄存器
RCONCLR、 RCONSET 和 RCONINV:RCON 的原子级位操作只写寄存器
下表汇总了所有与节能模式相关的寄存器。该汇总表之后列出了相应的寄存器,并且每个寄存器
均附有详细的说明。
表 10-1: 节能模式 SFR 汇总
名称 Bit31/23/15/7
Bit
30/22/14/6
Bit
29/21/13/5
Bit
28/20/12/4
Bit
27/19/11/3
Bit
26/18/10/2
Bit
25/17/9/1
Bit
24/16/8/0
OSCCON 31:24 — — PLLODIV<2:0> FRCDIV<2:0>
23:16 — SOSCRDY — PBDIV<1:0> PLLMULT<2:0>
15:8 — COSC<2:0> — NOSC<2:0>
7:0 CLKLOCK ULOCK LOCK SLPEN CF UFRCEN SOSCEN OSWEN
OSCCONCLR 31:0 写入时会将 OSCCON 中的选定位清零,读取时获得的值未定义
OSCCONSET 31:0 写入时会将 OSCCON 中的选定位置 1,读取时获得的值未定义
OSCCONINV 31:0 写入时会将 OSCCON 中的选定位取反,读取时获得的值未定义
WDTCON 31:24 — — — — — — — —
23:16 — — — — — — — —
15:8 ON — — — — — — —
7:0 — SWDTPS<4:0> — WDTCLR
WDTCONCLR 31:0 写入时会将 WDTCON 中的选定位清零,读取时获得的值未定义
WDTCONSET 31:0 写入时会将 WDTCON 中的选定位置 1,读取时获得的值未定义
WDTCONINV 31:0 写入时会将 WDTCON 中的选定位取反,读取时获得的值未定义
RCON 31:24 — — — — — — — —
23:16 — — — — — — — —
15:8 — — — — — — CM VREGS
7:0 EXTR SWR — WDTO SLEEP IDLE BOR POR
RCONCLR 31:0 写入时会将 RCON 中的选定位清零,读取时获得的值未定义
RCONSET 31:0 写入时会将 RCON 中的选定位置 1,读取时获得的值未定义
RCONINV 31:0 写入时会将 RCON 中的选定位取反,读取时获得的值未定义
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-3 页
PIC32MX 系列参考手册
寄存器 10-1: OSCCON:振荡器控制寄存器
r-x r-x R/W-x R/W-x R/W-x R/W-0 R/W-0 R/W-1
— — PLLODIV<2:0> FRCDIV<2:0>
bit 31 bit 24
r-x R-0 r-x R/W-x R/W-x R/W-x R/W-x R/W-x
— SOSCRDY — PBDIV<1:0> PLLMULT<2:0>
bit 23 bit 16
r-x R-0 R-0 R-0 r-x R/W-x R/W-x R/W-x
— COSC<2:0> — NOSC<2:0>
bit 15 bit 8
R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-x R/W-0
CLKLOCK ULOCK LOCK SLPEN CF UFRCEN SOSCEN OSWEN
bit 7 bit 0
图注:
R = 可读位 W = 可写位 P = 可编程位 r = 保留位
U = 未实现位 -n = POR 时的值:(0, 1, x = 未知)
bit 29-27 PLLODIV<2:0>:PLL 输出分频比位
111 = PLL 输出 256 分频
110 = PLL 输出 64 分频
101 = PLL 输出 32 分频
100 = PLL 输出 16 分频
011 = PLL 输出 8 分频
010 = PLL 输出 4 分频
001 = PLL 输出 2 分频
000 = PLL 输出 1 分频
注: 发生复位时,这些位被设置为 FPLLODIV 配置位(DEVCFG2<18:16>)的值。
bit 26-24 FRCDIV<2:0>:快速内部 RC 时钟分频比位
111 = FRC 256 分频
110 = FRC 64 分频
101 = FRC 32 分频
100 = FRC 16 分频
011 = FRC 8 分频
010 = FRC 4 分频
001 = FRC 2 分频(默认设置)
000 = FRC 1 分频
bit 23 保留:写入 0;忽略读操作
bit 22 SOSCRDY: 辅助振荡器就绪指示位
1 = 指示辅助振荡器正在运行并且已稳定
0 = 辅助振荡器已关闭或仍在预热阶段
bit 21 未实现:读为 0
DS61130E_CN 第 10-4 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
bit 20-19 PBDIV<1:0>:外设总线时钟分频比位
11 = PBCLK 是 SYSCLK 的 8 分频 (默认)
10 = PBCLK 是 SYSCLK 的 4 分频
01 = PBCLK 是 SYSCLK 的 2 分频
00 = PBCLK 是 SYSCLK 的 1 分频
注: 发生复位时,这些位被设置为配置位 (DEVCFG1<13:12>)的值。
bit 18-16 PLLMULT<2:0>:PLL 倍频比位
111 = 时钟进行 24 倍频
110 = 时钟进行 21 倍频
101 = 时钟进行 20 倍频
100 = 时钟进行 19 倍频
011 = 时钟进行 18 倍频
010 = 时钟进行 17 倍频
001 = 时钟进行 16 倍频
000 = 时钟进行 15 倍频
注: 发生复位时,这些位被设置为 PLLMULT 配置位(DEVCFG2<6:4>)的值。
bit 15 保留:写入 0;忽略读操作
bit 14-12 COSC<2:0>:当前振荡器选择位
111 = 快速内部 RC 振荡器按照 OSCCON
位进行分频
110 = 快速内部 RC 振荡器 16 分频
101 = 低功耗内部 RC 振荡器(LPRC)
100 = 辅助振荡器 (SOSC)
011 = 带 PLL 模块的主振荡器(XTPLL、 HSPLL 或 ECPLL)
010 = 主振荡器 (XT、 HS 或 EC)
001 = 带 PLL 模块的快速 RC 振荡器 (通过后分频器)(FRCPLL)
000 = 快速 RC 振荡器(FRC)
注: 发生复位时,这些位被设置为 FNOSC 配置位(DEVCFG1<2:0>)的值。
bit 11 保留:写入 0;忽略读操作
bit 10-8 NOSC<2:0>:新振荡器选择位
111 = 快速内部 RC 振荡器按照 OSCCON 位进行分频
110 = 快速内部 RC 振荡器 16 分频
101 = 低功耗内部 RC 振荡器(LPRC)
100 = 辅助振荡器 (SOSC)
011 = 带 PLL 模块的主振荡器(XTPLL、 HSPLL 或 ECPLL)
010 = 主振荡器 (XT、 HS 或 EC)
001 = 带 PLL 模块的快速内部 RC 振荡器 (通过后分频器)(FRCPLL)
000 = 快速内部 RC 振荡器(FRC)
发生复位时,这些位被设置为 FNOSC 配置位(DEVCFG1<2:0>)的值。
bit 7 CLKLOCK: 时钟选择锁定使能位
如果使能 FSCM (FCKSM1 = 1):
1 = 时钟和 PLL 选择被锁定
0 = 时钟和 PLL 选择未被锁定,可以被修改
如果禁止 FSCM (FCKSM1 = 0):
时钟和 PLL 选择永不锁定,可以被修改
bit 6 ULOCK:USB PLL 锁定状态位
1 = 指示 USB PLL 模块处于锁定状态或 USB PLL 模块起振定时器延时结束
0 = 指示 USB PLL 模块处于失锁状态、 USB PLL 模块起振定时器正在运行或 USB PLL 被禁止
bit 5 LOCK: PLL 锁定状态位
1 = PLL 模块处于锁定状态或 PLL 模块起振定时器延时结束
0 = PLL 模块处于失锁状态、 PLL 起振定时器正在运行或 PLL 被禁止
bit 4 SLPEN: SLEEP (休眠)模式使能位
1 = 执行 WAIT指令后器件将进入 SLEEP (休眠)模式
0 = 执行 WAIT指令后器件将进入 IDLE (空闲)模式
寄存器 10-1: OSCCON:振荡器控制寄存器 (续)
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-5 页
PIC32MX 系列参考手册
bit 3 CF: 时钟故障位
1 = 故障保护时钟监视器 (Fail Safe Clock Monitor, FSCM)检测到时钟故障
0 = 未检测到时钟故障
bit 2 UFRCEN:USB FRC 时钟使能位
1 = 将 FRC 使能为 USB 时钟源
0 = 将主振荡器或 USB PLL 用作 USB 时钟源
bit 1 SOSCEN:32.768 kHz 辅助振荡器 (SOSC)使能位
1 = 使能辅助振荡器
0 = 禁止辅助振荡器
注: 发生复位时,该位被设置为 FSOSCEN 配置位(DEVCFG1<5>)的值。
bit 0 OSWEN: 振荡器切换使能位
1 = 启动振荡器切换,切换为 NOSC2:NOSC0 位指定的振荡器
0 = 振荡器切换完成
寄存器 10-1: OSCCON:振荡器控制寄存器 (续)
DS61130E_CN 第 10-6 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
寄存器 10-2: OSCCONCLR:振荡器控制清零寄存器
写入时会将 OSCCON 中的选定位清零,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 OSCCON 中的选定位清零
在一个或多个位中写入 1 会将 OSCCON 寄存器中的相应位清零,但不会影响未实现位或只读位。写
入 0不会影响该寄存器。
示例:OSCCONCLR = 0x00000001时,会将 OSCCON 寄存器中的 bit 0 清零。
寄存器 10-3: OSCCONSET:振荡器控制置 1 寄存器
写入时会将 OSCCON 中的选定位置 1,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 OSCCON 中的选定位置 1
在一个或多个位中写入 1会将 OSCCON 寄存器中的相应位置 1,但不会影响未实现位或只读位。写入
0不会影响该寄存器。
示例:OSCCONSET = 0x00000001时,会将 OSCCON 寄存器中的 bit 0 置 1。
寄存器 10-4: OSCCONINV:振荡器控制取反寄存器
写入时会将 OSCCON 中的选定位取反,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 OSCCON 中的选定位取反
在一个或多个位中写入 1 会将 OSCCON 寄存器中的相应位取反,但不会影响未实现位或只读位。写
入 0不会影响该寄存器。
示例:OSCCONINV = 0x00000001时,会将 OSCCON 寄存器中的 bit 0 取反。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-7 页
PIC32MX 系列参考手册
寄存器 10-5: WDTCON:看门狗定时器控制寄存器
r-x r-x r-x r-x r-x r-x r-x r-x
— — — — — — — —
bit 31 bit 24
r-x r-x r-x r-x r-x r-x r-x r-x
— — — — — — — —
bit 23 bit 16
R/W-0 r-x r-x r-x r-x r-x r-x r-x
ON — — — — — — —
bit 15 bit 8
r-x R-x R-x R-x R-x R-x r-0 R/W-0
— SWDTPS<4:0> — WDTCLR
bit 7 bit 0
图注:
R = 可读位 W = 可写位 P = 可编程位 r = 保留位
U = 未实现位 -n = POR 时的值:(0, 1, x = 未知)
bit 15 ON:看门狗外设使能位
1 = 使能看门狗外设。寄存器中其他位的状态不会受该位置 1 影响。进入 Sleep(休眠)模式时,LPRC
振荡器不会被禁止。
0 = 禁止看门狗外设,不会消耗电流。允许进行 SFR 修改。该寄存器中其他位的状态不会受该位清零
影响。
注: 使用 1:1 PBCLK 分频比时,在清零模块 ON 位的指令之后,用户的软件不应立即在 SYSCLK
周期中读 / 写外设的 SFR。
DS61130E_CN 第 10-8 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
寄存器 10-6: WDTCONCLR:看门狗定时器控制清零寄存器
写入时会将 WDTCON 中的选定位清零,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 WDTCON 中的选定位清零
在一个或多个位中写入 1 会将 WDTCON 寄存器中的相应位清零,但不会影响未实现位或只读位。写
入 0不会影响该寄存器。
示例: WDTCONCLR = 0x00008001时,会将 WDTCON 寄存器中的 bit 15 和 bit 0 清零。
寄存器 10-7: WDTCONSET:看门狗定时器控制置 1 寄存器
写入时会将 WDTCON 中的选定位置 1,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 WDTCON 中的选定位置 1
在一个或多个位中写入 1 会将 WDTCON 寄存器中的相应位置 1,但不会影响未实现位或只读位。写
入 0不会影响该寄存器。
示例: WDTCONSET = 0x00008001时,会将 WDTCON 寄存器中的 bit 15 和 bit 0 置 1。
寄存器 10-8: WDTCONINV:看门狗定时器控制取反寄存器
写入时会将 WDTCON 中的选定位取反,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 WDTCON 中的选定位取反
在一个或多个位中写入 1 会将 WDTCON 寄存器中的相应位取反,但不会影响未实现位或只读位。写
入 0不会影响该寄存器。
示例: WDTCONINV = 0x00008001时,会将 WDTCON 寄存器中的 bit 15 和 bit 0 取反。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-9 页
PIC32MX 系列参考手册
寄存器 10-9: RCON:复位控制寄存器
r-x r-x r-x r-x r-x r-x r-x r-x
— — — — — — — —
bit 31 bit 24
r-x r-x r-x r-x r-x r-x r-x r-x
— — — — — — — —
bit 23 bit 16
r-x r-x r-x r-x r-x r-0 R/W-0 R/W-0
— — — — — — CM VREGS
bit 15 bit 8
R/W-0 R/W-0 r-x R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
EXTR SWR — WDTO SLEEP IDLE BOR POR
bit 7 bit 0
图注:
R = 可读位 W = 可写位 P = 可编程位 r = 保留位
U = 未实现位 -n = POR 时的值:(0, 1, x = 未知)
bit 3 SLEEP:从休眠模式唤醒位
1 = 器件是从 SLEEP (休眠)模式唤醒的
0 = 器件不是从 SLEEP (休眠)模式唤醒的
注: 只有清零该位时,才能检测下一次从 SLEEP (休眠)模式唤醒的情况。
bit 2 IDLE:从空闲模式唤醒位
1 = 器件是从 IDLE (空闲)模式唤醒的
0 = 器件不是从 IDLE (空闲)模式唤醒的
注: 只有清零该位时,才能检测下一次从 IDLE (空闲)模式唤醒的情况。
DS61130E_CN 第 10-10 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
寄存器 10-10: RCONCLR:RCON 清零寄存器
写入时会将 RCON 中的选定位清零,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 RCON 中的选定位清零
在一个或多个位中写入 1会将 RCON 寄存器中的相应位清零,但不会影响未实现位或只读位。写入 0
不会影响该寄存器。
示例: RCONCLR = 0x0000000C时,会将 RCON 寄存器中的 bit 3 和 bit 2 清零。
寄存器 10-11: RCONSET:RCON 置 1 寄存器
写入时会将 RCON 中的选定位置 1,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 RCON 中的选定位置 1
在一个或多个位中写入 1 会将 RCON 寄存器中的相应位置 1,但不会影响未实现位或只读位。写入 0
不会影响该寄存器。
示例: RCONSET = 0x0000000C时,会将 RCON 寄存器中的 bit 3 和 bit 2 置 1。
寄存器 10-12: RCONINV:RCON 取反寄存器
写入时会将 RCON 中的选定位取反,读取时获得的值未定义
bit 31 bit 0
bit 31-0 将 RCON 中的选定位取反
在一个或多个位中写入 1会将 RCON 寄存器中的相应位取反,但不会影响未实现位或只读位。写入 0
不会影响该寄存器。
示例: RCONINV = 0x0000000C时,会将 RCON 寄存器中的 bit 3 和 bit 2 取反。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-11 页
PIC32MX 系列参考手册
10.3 节能模式下的操作
PIC32MX 器件系列具有 9 种低功耗模式。所有节能模式的目的都是通过降低器件时钟频率来降
低功耗。要实现该目的,可以选择多种低频时钟源。此外,还可以暂停或禁止外设和 CPU,以进
一步降低功耗。
10.3.1 SLEEP (休眠)模式
SLEEP(休眠)模式是器件节能工作模式中的最低功耗模式。CPU 和大部分外设暂停。选定外
设可以在 Sleep(休眠)模式下继续工作并可用于将器件从 Sleep(休眠)模式唤醒。关于 Sleep
(休眠)模式下外设行为的描述,请参见各外设模块章节。
SLEEP (休眠)模式具有以下特性:
• CPU 暂停。
• 系统时钟源通常关闭。具体信息,请参见第 10.3.1.1 节 “SLEEP (休眠)模式下的振荡器
关闭”。
• 针对所选的振荡器存在不同的唤醒延时(见表 10-2)。
• Sleep (休眠)模式期间,故障保护时钟监视器 (FSCM)不工作。
• 如果使能了 BOR 电路,那么在 SLEEP (休眠)模式期间,该电路继续工作。
• 如果使能了 WDT,它在进入 SLEEP (休眠)模式之前不会自动清零。
• 某些外设可在 SLEEP (休眠)模式下继续工作。这些外设包括检测输入信号电平变化的 I/O
引脚、 WDT、 RTCC、 ADC、 UART 以及使用外部时钟输入或内部 LPRC 振荡器的外设。
• I/O 引脚将继续按照器件未处于 Sleep (休眠)模式下的方式拉或灌电流。
• USB 模块可改写 POSC 或 FRC 的禁止状态。具体信息请参见 USB 章节。
• 为了进一步降低功耗,可在进入 SLEEP (休眠)模式之前用软件单独禁止模块。
发生以下任一事件时,处理器将退出 SLEEP (休眠)模式或从 SLEEP (休眠)模式“唤醒”:
• 在 Sleep (休眠)模式下继续工作的已允许中断源的任何中断。中断优先级必须大于当前
CPU 优先级。
• 任何形式的器件复位。
• WDT 超时。请参见第 10.4.2 节“在看门狗超时时从 SLEEP (休眠)或 IDLE (空闲)模式
唤醒(NMI)”。
如果中断优先级小于或等于当前优先级,CPU 将保持暂停,但 PBCLK 将开始运行且器件将进入
IDLE (空闲)模式。
示例代码请参见例 10-1。
注: 在本手册中,对于特定模块中使用的功耗模式和器件使用的功耗模式进行了区分;
例如,比较器的 Sleep(休眠)模式和 CPU 的 SLEEP(休眠)模式。为了指示所
期望功耗模式的类型,模块功耗模式使用大写字母加小写字母 (Sleep, Idle,
Debug)(休眠、空闲和调试)来表示,器件功耗模式使用全大写字母 (SLEEP,
IDLE, DEBUG)(休眠、空闲和调试)来表示。
注: 该模块没有 FRZ 模式。
DS61130E_CN 第 10-12 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
10.3.1.1 SLEEP (休眠)模式下的振荡器关闭
器件在 SLEEP(休眠)模式下禁止时钟源的条件为:振荡器类型、使用时钟源的外设,以及(选
定时钟源的)时钟使能位。
• 如果 CPU 时钟源为 POSC,则在 SLEEP (休眠)模式下会被关闭。关于从 SLEEP (休
眠)模式唤醒时适用的延时,请参见表 10-2。 USB 模块可改写 POSC 或 FRC 的禁止状态。
具体信息请参见 USB 章节。
• 如果 CPU 时钟源为 FRC,则在 SLEEP (休眠)模式下会被关闭。关于从 SLEEP (休眠)
模式唤醒时适用的延时,请参见表 10-2。 USB 模块可改写 POSC 或 FRC 的禁止状态。具体
信息请参见 USB 章节。
• 如果 CPU 时钟源为 SOSC,则 SOSCEN 位未置 1 时会被关闭。关于从 SLEEP (休眠)模
式唤醒时适用的延时,请参见表 10-2。
• 如果 CPU 时钟源为 LPRC,并且在 SLEEP (休眠)模式下工作的外设(例如 WDT)不使
用该时钟源,则会被关闭。关于从 SLEEP(休眠)模式唤醒时适用的延时,请参见表 10-2。
10.3.1.2 从 SLEEP (休眠)模式唤醒时的时钟选择
处理器将恢复代码执行并使用与在进入 SLEEP (休眠)模式时有效的相同时钟源。如果在器件
退出 SLEEP (休眠)模式时使用晶振和 / 或 PLL 作为时钟源,则器件会受启动延时影响。
10.3.1.3 从 SLEEP (休眠)模式唤醒的延时
表 10-2 中给出了与从 SLEEP(休眠)模式唤醒时关联的振荡器起振和故障保护时钟监视器延时
(如果使能)。
表 10-2: 从休眠模式退出的延时
10.3.1.4 使用晶振或 PLL 从 SLEEP (休眠)模式唤醒
如果系统时钟源来自晶振和 / 或 PLL,则在系统时钟源可供器件使用之前将应用一段振荡器起振
定时器(Oscillator Start-up Timer,OST)和 / 或 PLL 锁定延时。作为该规则的一个特例,如果
系统时钟源是 POSC 振荡器且在 SLEEP (休眠)模式下运行,则不应用振荡器延时。
时钟源 振荡器延时 FSCM 延时
EC 和 EXTRC — —
EC + PLL TLOCK TFSCM
XT + PLL TOST + TLOCK TFSCM
XT、 HS 和 XTL TOST TFSCM
LP (休眠期间关闭) TOST TFSCM
LP (休眠期间开启) — —
FRC 和 LPRC — —
注: 关于 TPOR、 TFSCM 和 TLOCK 的值,请参见 PIC32MX 器件数据手册的“电气
规范”章节。
注: 虽然应用了各种延时,但晶振 (和 PLL)还是可能在 TOST 或 TLOCK 延时结束时并
未启动和运行。为了正确工作,用户必须设计外部振荡器电路,以便可以在延时周
期内产生可靠的振荡。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-13 页
PIC32MX 系列参考手册
10.3.1.5 故障保护时钟监视器(FSCM)延时和 SLEEP (休眠)模式
在器件处于 Sleep(休眠)模式时,FSCM 不工作。如果使能了 FSCM,则它会在器件从 Sleep
(休眠)模式唤醒时继续开始工作。此时会应用一段 TFSCM 延时,让振荡器源可以在 FSCM 继续
开始监视之前稳定下来。
如果以下条件为真,则会在从 SLEEP (休眠)模式唤醒时应用一段 TFSCM 延时:
• 振荡器在处于 SLEEP (休眠)模式时被关闭。
• 系统时钟来自晶振源和 / 或 PLL。
在大多数情况下,在器件恢复执行指令之前,TFSCM 延时为 OST 超时和 PLL 进入稳定状态提供
足够时间。如果使能了 FSCM,它将在 TFSCM 延时结束后开始监视系统时钟源。
10.3.1.6 振荡器慢速起振
在振荡器慢速起振时, OST 和 PLL 锁定时间可能在 FSCM 发生超时之前还未结束。
如果使能了 FSCM,器件将检测到此条件并将其作为一个时钟故障,然后产生时钟故障陷阱。器
件将切换到 FRC 振荡器,用户可以在时钟故障中断服务程序中重新使能晶振源。
如果未使能 FSCM,器件在时钟稳定之前不会开始执行代码。从用户角度来看,器件将处于
SLEEP (休眠)模式直到振荡器时钟起振。
10.3.1.7 SLEEP (休眠)模式下振荡器的 USB 外设控制
在 USB 模块工作时,在器件进入休眠模式时该模块会阻止器件禁止其时钟源。虽然振荡器保持
工作,但 CPU 和外设将保持暂停。
例 10-1: 将器件置为 SLEEP (休眠)模式,然后通过 WDT 唤醒
// Code example to put the Device in sleep and then Wake the device
// with the WDT
OSCCONSET = 0x10; // set Power-Saving mode to Sleep
WDTCONCLR = 0x0002; // Disable WDT window mode
WDTCONSET = 0x8000; // Enable WDT
// WDT timeout period is set in the device configuration
while (1)
{
... user code ...
WDTCONSET = 0x01; // service the WDT
asm volatile( “wait” );// put device in selected Power-Saving mode
// code execution will resume here after wake
... user code ...
}
// The following code fragment is at the beginning of the ‘C’ start-up code
if ( RCON & 0x18 )
{
// The WDT caused a wake from Sleep
asm volatile( “eret” );// return from interrupt
}
DS61130E_CN 第 10-14 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
10.3.2 外设总线分频方法
器件上的大部分外设都使用 PBCLK 作为时钟。外设总线的时钟与 SYSCLK 成比例关系,以最大
程度降低外设的动态功耗。 PBCLK 分频比由 PBDIV<1:0> (OSCCON<20:19>)控制,允许的
SYSCLK 与 PBCLK 的比值为 1:1、1:2、1:4 和 1:8。当分频比改变时,所有使用 PBCLK 的外设
都会受影响。由于诸如 USB、中断控制器、 DMA、总线矩阵和预取高速缓存之类的外设都是直
接从 SYSCLK 获得时钟,因此,它们不受 PBCLK 分频比变化的影响。
改变 PBCLK 分频比会影响:
• CPU 到外设的访问延时。 CPU 必须等待下一个 PBCLK 边沿才能完成读操作。在 1:8 模式
下,这会产生 1 至 7 个 SYSCLK 延时。
• 外设的功耗。功耗与外设工作时钟的频率成正比。分频比越大,外设的功耗越低。
要使动态功耗最低,应选择适当的 PB 分频比,使外设在满足系统性能的前提下以最低频率运行。
当选择 PBCLK 分频比时,应考虑外设时钟要求(如波特率精度)。例如,根据 SYSCLK 的值,
UART 外设可能在某个 PBCLK 分频比处无法达到所有波特率值。
10.3.2.1 动态外设总线分频方法
PBCLK 可以通过软件进行动态分频,以便在器件处于低活动量模式时节省额外的功耗。对
PBCLK 进行分频时,需要考虑以下问题:
• 通过 PBCLK 提供时钟的所有外设将同时以相同比率进行分频。对于即使在低功耗模式下也
需要维持恒定波特率或脉冲周期的外设,需要考虑这一点。
• 如果在 PBCLK 改变时,有任何通信正通过外设总线上的某个外设,则可能会由于发送或接
收期间频率改变而导致数据或错误。
如果用户希望动态调节 PBCLK 分频比,建议使用以下步骤:
• 禁止波特率会受影响的所有通信外设。在禁止外设之前,应小心确保当前没有任何通信正在
进行,因为它可能导致协议错误。
• 根据需要更新外设的波特率发生器(Baud Rate Generator, BRG)设置,以便在新的
PBCLK 频率下工作。
• 将外设总线比率更改为所需值。
• 使能波特率受影响的所有通信外设。
注: 修改外设波特率的方式是写入关联的外设 SFR。要最大程度减小响应延时,应在
PBCLK 以最高频率运行的模式下修改外设。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-15 页
PIC32MX 系列参考手册
例 10-2: 改变 PB 时钟分频比
// Code example to change the PBCLK divisor
// This example is for a device running at 40 MHz
// Make sure that there is no UART send/receive in
progress
... user code ...
U1BRG = 0x81; // set baud rate for UART1 for 9600
... user code ...
SYSKEY = 0x0; // write invalid key to force lock
SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY
OSCCONCLR = 0x3 << 19; // set PB divisor to minimum (1:1)
SYSKEY = 0x0; // write invalid key to force lock
... user code ...
// Change Peripheral Clock value
U1BRG = 0x0F; // set baud rate for UART1 for 9600 based on
// new PB clock frequency
SYSKEY = 0x0; // write invalid key to force lock
SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY
OSCCONSET = 0x3 << 19; // set PB divisor to maximum (1:8)
SYSKEY = 0x0; // write invalid key to force lock
// Reset Peripheral Clock
SYSKEY = 0x0; // write invalid key to force lock
SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY
OSCCONCLR = 0x3 << 19; // set PB divisor to minimum (1:1)
SYSKEY = 0x0; // write invalid key to force lock
U1BRG = 0x81; // restore baud rate for UART1 to 9600 based
// on new PB clock frequency
DS61130E_CN 第 10-16 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
10.3.3 IDLE (空闲)模式
在 IDLE(空闲)模式下,CPU 暂停,但系统时钟(SYSCLK)源仍然使能。这允许外设在 CPU
暂停时继续工作。外设可单独配置为在进入 IDLE(空闲)模式时暂停,方法是将其相应的 SIDL
位置 1。由于 CPU 振荡器源保持活动状态,所以退出 Idle (空闲)模式时的延时非常小。
有 4 种空闲工作模式:POSC IDLE、 FRC IDLE、 SOSC IDLE 和 LPRC IDLE。
• POSC IDLE (空闲)模式:SYSCLK 来自 POSC。 CPU 暂停,但 SYSCLK 源继续工作。
外设继续工作,但可以选择单独禁止。如果使用了 PLL,则还可以降低倍频比值
PLLMULT<2:0> (OSCCON<18:16>),以降低外设的功耗。
• FRC IDLE (空闲)模式:SYSCLK 来自 FRC。 CPU 暂停。外设继续工作,但可以选择单
独禁止。如果使用了 PLL,则还可以降低倍频比值 PLLMULT<2:0> (OSCCON<18:16>),
以降低外设的功耗。 FRC 时钟可以通过后分频器通过 RCDIV<2:0>(OSCCON<26:24>)进
一步进行分频。
• SOSC IDLE (空闲)模式:SYSCLK 来自 SOSC。 CPU 暂停。外设继续工作,但可以选择
单独禁止。
• LPRC IDLE (空闲)模式:SYSCLK 来自 LPRC。 CPU 暂停。外设继续工作,但可以选择
单独禁止。
在 SLPEN(OSCCON<4>)位清零,并且执行 WAIT指令时,器件会进入 IDLE(空闲)模式。
发生以下事件时,处理器将从空闲模式唤醒或退出:
• 已允许中断源的任何中断事件。中断事件的优先级必须大于 CPU 的当前优先级。如果中断
事件的优先级小于或等于 CPU 的当前优先级, CPU 将保持暂停,器件将继续处于 IDLE
(空闲)模式。
• 任何器件复位源。
• WDT 超时中断。请参见第 10.4.2 节“在看门狗超时时从 SLEEP (休眠)或 IDLE (空闲)
模式唤醒(NMI)”和第 9 章“看门狗定时器和上电延时定时器”(DS61114)。
注: 更改 PBCLK 分频比要求重新计算外设时序。例如,假设 UART 配置为 9600 波特,
PB 时钟比为 1:1, POSC 为 8 MHz。当使用 1:2 的 PB 时钟分频比时,波特率时钟
的输入频率进行二分频;因此,波特率降为原先值的 1/2。由于计算中的数字截断
(例如波特率分频比),实际波特率可能会与期望的波特率有微小差别。因此,外设
所需的任何时序计算都应使用新的 PB 时钟频率执行,而不是根据 PB 分频比按比例
调节先前值。
注: 在切换为已被禁止并使用晶振和 / 或 PLL 的时钟源时,将会应用振荡器起振和 PLL
锁定延时。例如,假设时钟源在进入Sleep(休眠)模式之前从POSC切换为LPRC,
以便节省功耗。退出 Idle (空闲)模式时,将不会应用振荡器起振延时。但是,在
切换回 POSC 时,将会应用相应的 PLL 和 / 或振荡器起振 / 锁定延时。
© 2010 Microchip Technology Inc. 初稿 DS61130E_CN 第 10-17 页
PIC32MX 系列参考手册
例 10-3: 将器件置为 IDLE (空闲)模式,并通过 ADC 事件唤醒
// Code example to put the Device in Idle and then Wake the device
// when the ADC completes a conversion
SYSKEY = 0x0; // write invalid key to force lock
SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY
OSCCONCLR = 0x10; // set Power-Saving mode to Idle
SYSKEY = 0x0; // write invalid key to force lock
asm volatile ( "wait" ); // put device in selected Power-Saving mode
// code execution will resume here after wake and the ISR is
complete
... user code ...
// interrupt handler
void __ISR(27_ADC_VECTOR, ipl7) ADC_HANDLER(void)
{
// interrupt handler
unsigned long int result;
result = ADC1BUF0; // read the result
IFS1CLR = 2; // Clear ADC conversion interrupt flag
}
DS61130E_CN 第 10-18 页 初稿 © 2010 Microchip Technology Inc.
第 10 章 节能模式
节
能
模
式
10
10.4 中断
有两个中断源可以将器件从节能模式唤醒:节能模式下的外设中断和通过 WDT 产生的不可屏蔽
中断(Non-Maskable Interrupt, NMI)。
10.4.1 在发生外设中断时从 SLEEP (休眠)或 IDLE (空闲)模式唤醒
任何可通过 IECx 寄存器中的相应 IE 控制位单独允许中断且在当前节能模式下工作的中断源都能
将处理器从 SLEEP(休眠)或 IDLE(空闲)模式唤醒。在器件唤醒时,根据中断优先级,将产
生两个事件之一:
• 如果分配给中断的优先级小于或等于当前 CPU 优先级, CPU 将保持暂停,器件将进入或继
续处于 IDLE (空闲)模式。
• 如果分配给中断源的优先级大于当前 CPU 优先级,器件将被唤醒, CPU 将跳转到相应的中
断向量处。在 ISR 完成时, CPU 将开始执行 WAIT之后的下一条指令。
IDLE 状态位(RCON<2>)在从 IDLE(空闲)模式唤醒时被置 1。SLEEP 状态位(RCON<3>)
在从 SLEEP (休眠)模式唤醒时被置 1。
10.4.2 在看门狗超时时从 SLEEP (休眠)或 IDLE (空闲)模式唤醒(NMI)
当 WDT 在 SLEEP(休眠)或 IDLE(空闲)模式下发生超时时,会产生 NMI。NMI 会导致 CPU
代码执行跳转到器件复位向量处。虽然 CPU 会执行复位向量,但它不是器件复位——外设和大
多数 CPU 寄存器都不会改变状态。
要检测由于 WDT 计时结束导致的节能模式唤醒,则必须测试 WDTO (RCON<4>)、 SLEEP
(RCON<3>)和 IDLE (RCON<2>)位。如果 WDTO 位为 1,则说明事件是由于 WDT 超时而
发生的。然后,可以通过测试SLEEP和IDLE位,确定WDT事件是在休眠还是空闲模式下发生的。
要在 SLEEP(休眠)模式期间使用 WDT 超时作为唤醒中断,则必须在确定
本文档为【节能模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。