PIC24FJ256GB110 系列器件的振荡器系统具有以下特 性:
• 可选择 4 个外部和内部振荡器作为时钟源,提供 11 种 不同的时钟模式
• 一个片上 USB PLL 模块,为 USB 模块提供稳定的 48 MHz 时钟,并为系统时钟提供较大范围的频率 选择
• 可通过软件控制在各种时钟源之间切换
• 可通过软件控制预分频器有选择地为 CPU 提供时 钟,以节省系统功耗
• 具有故障保护时钟监视器 (Fail-Safe Clock Monitor, FSCM),可检测时钟故障,以使应用可 安全地恢复或关闭
• 用于同步外部硬件的可单独使用且独立配置的系统 时钟输出
图7-1 给出了振荡器系统的简化框图。
图
7-1: PIC24FJ256GB110 系列时钟框图
注: 本数据手册总结了PIC24F 器件的功能。但是不应把本手册当作无所不包的参考手册 来使用。更多信息,请参见《PIC24F 系列 参 考 手 册》的 “第
6 章
振 荡 器”(DS39700A_CN)。
PIC24FJ256GB110 系列
辅助振荡器
SOSCEN 使能 振荡器 SOSCO
SOSCI
时钟源选择
(供其他模块使用)
OSCI OSCO
主振荡器
XT、HS 和 EC
CPU 后分频器 外设
CLKDIV<10:8>
WDT 和 PWRT 8 MHz
FRCDIV
31 kHz(标称值)
FRC 振荡器
LPRC 振荡器
SOSC LPRC
后分频器
时钟控制逻辑 故障保护
时钟 监视器
CLKDIV<14:12>
FRC CLKO
(标称值)
XTPLL、 HSPLL ECPLL 和FRCPLL
8 MHz 4 MHz PLL 和
DIV
PLLDIV<2:0> CPDIV<1:0>
48 MHz USB 时钟
USB PLL
参考时钟 发生器
REFO REFOCON<15:8>
PIC24FJ256GB110 系列
DS39897B_CN 第 110 页
初稿
2009 Microchip Technology Inc.7.1 CPU 时钟机制
系统时钟源可以由以下4 种之一提供:
• OSCI 和 OSCO 引脚上的主振荡器 (POSC)
• SOSCI 和 SOSCO 引脚上的辅助振荡器(SOSC)
• 内部快速 RC (FRC)振荡器
• 内部低功耗 RC (LPRC)振荡器
主振荡器和FRC 源可以选择使用内部 USB PLL 模块,
用来产生USB 模块时钟和来自 96 MHZ PLL 的独立系 统时钟。更多信息,请参见第
7.5 节 “振荡器模式和 USB 操作”。
内部FRC 提供 8 MHz 时钟源。可选择用可编程时钟分 频降低它,从而提供一系列系统时钟频率。
选定的时钟源将产生处理器和外设时钟。处理器时钟源 需进行二分频,以产生内部指令周期时钟FCY。在本文 档中,指令周期时钟也表示为FOSC/2。内部指令周期时 钟FOSC/2 可以在 OSCO I/O 引脚提供,用于主振荡器 的一些工作模式。
7.2 POR 时的初始配置
在发生器件上电复位事件时使用的振荡器源(以及工作 模式)使用配置位设置进行选择。振荡器配置位在程序 存储器中的配置寄存器中进行设置(更多详细信息,请 参 见 第
25.1 节 “配置 位” ) 。主振 荡 器配 置 位
POSCMD1:POSCMD0 (配置字 2<1:0>)和初始振荡 器选择配置位FNOSC2:FNOSC0 (配置字 2<10:8>)用于选择在上电复位时使用的振荡器源。默认情况下
(未 编 程 时)将 选 择 带 后 分 频 器 的 FRC 主振荡器
(FRCDIV)。通过编程这些位,可以选择辅助振荡器或 一个内部振荡器。
这些配置位使用户可以选择多种时钟模式,如表7-1 所 示。
7.2.1 时钟切换模式配置位
FCKSM 配置位(配置字 2<7:6>)用于联合配置器件时 钟 切 换 和 故 障 保 护 时 钟 监 视 器 (FSCM) 。只 有 将 FCKSM1 编程 (0)时,才会使能时钟切换。只有同时 将FCKSM1:FCKSM0 编程(00)时,才会使能FSCM。
表
7-1:
时钟选择的配置位值振荡器模式 振荡器源
POSCMD1:
POSCMD0
FNOSC2:
FNOSC0
注带后分频器的快速RC 振荡器
(FRCDIV)
内部
11 111 1, 2
(保留) 内部
xx 110 1
低功耗RC 振荡器 (LPRC) 内部
11 101 1
辅助 (Timer1)振荡器 (SOSC) 辅助
11 100 1
带PLL 模块的主振荡器 (XT)
(XTPLL)
主
01 011
带PLL 模块的主振荡器 (EC)
(ECPLL)
主
00 011
主振荡器 (HS) 主
10 010
主振荡器 (XT) 主
01 010
主振荡器 (EC) 主
00 010
带PLL 模块的快速 RC 振荡器
(FRCPLL)
内部
11 001 1
快速RC 振荡器 (FRC) 内部
11 000 1
注
1: OSCO 引脚功能由 OSCIOFCN 配置位决定。
2: 这是未编程 (已擦除)器件的默认振荡器模式。
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 111 页PIC24FJ256GB110 系列
7.3 控制寄存器
振荡器的操作由3 个特殊功能寄存器控制:
• OSCCON
• CLKDIV
• OSCTUN
OSCCON 寄存器 (寄存器 7-1)是振荡器的主要控制 寄存器。它控制时钟源切换和时钟源监控。
CLKDIV 寄存器 (寄存器 7-2)控制与打盹模式相关的 功能,以及FRC 振荡器的后分频器。OSCTUN 寄存器
(寄存器7-3)使用户可以对 FRC 振荡器在大约 ±12%
的范围内进行微调。
寄存器
7-1: OSCCON:振荡器控制寄存器
U-0 R-0 R-0 R-0 U-0 R/W-x(1) R/W-x(1) R/W-x(1)
— COSC2 COSC1 COSC0 — NOSC2 NOSC1 NOSC0
bit 15 bit 8
R/SO-0 R/W-0 R-0(3) U-0 R/CO-0 R/W-0 R/W-0 R/W-0 CLKLOCK IOLOCK(2) LOCK — CF POSCEN SOSCEN OSWEN
bit 7 bit 0
图注: CO = 只可清零位 SO = 只可置 1 位
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15 未实现:读为
0
bit 14-12
COSC2:COSC0: 当前振荡器选择位
111 = 带后分频器的快速 RC 振荡器 (FRCDIV)
110 = 保留
101 = 低功耗 RC 振荡器 (LPRC)
100 = 辅助振荡器 (SOSC)
011 = 带 PLL 模块的主振荡器 (XTPLL、 HSPLL 和 ECPLL)
010 = 主振荡器 (XT、 HS 和 EC)
001 = 带后分频器和 PLL 模块的快速 RC 振荡器 (FRCPLL)
000 = 快速 RC 振荡器 (FRC)
bit 11 未实现:读为
0
bit 10-8
NOSC2:NOSC0:新振荡器选择位
(1)111 = 带后分频器的快速 RC 振荡器 (FRCDIV)
110 = 保留
101 = 低功耗 RC 振荡器 (LPRC)
100 = 辅助振荡器 (SOSC)
011 = 带 PLL 模块的主振荡器 (XTPLL、 HSPLL 和 ECPLL)
010 = 主振荡器 (XT、 HS 和 EC)
001 = 带后分频器和 PLL 模块的快速 RC 振荡器 (FRCPLL)
000 = 快速 RC 振荡器 (FRC)
注
1: 这些位的复位值由 FNOSC 配置位决定。
2: IOLOCK 位的状态只能在执行解锁序列后更改。此外,如果 IOL1WAY 配置位为 1,则
IOLOCK 位置 1 后 它不能清零。3: 在任意有效时钟切换期间,或者每当选择了非 PLL 时钟模式时,也复位为 0。
PIC24FJ256GB110 系列
DS39897B_CN 第 112 页
初稿
2009 Microchip Technology Inc.bit 7
CLKLOCK:时钟选择锁定使能位
如果使能FSCM (FCKSM1 = 1):1 = 时钟和 PLL 选择被锁定
0 = 时钟和 PLL 选择未锁定,可以通过将 OSWEN 位置 1 进行修改
如果禁止FSCM (FCKSM1 = 0):时钟和PLL 选择始终未锁定,可以通过将 OSWEN 位置 1 进行修改。
bit 6
IOLOCK:I/O 锁定使能位
(2)1 = I/O 锁定工作
0 = I/O 锁定不工作
bit 5LOCK:PLL 锁定状态位
(3)1 = PLL 模块处于锁定状态,或者满足 PLL 模块起振定时器
0 = PLL 模块脱离锁定状态, PLL 起振定时器正在运行或 PLL 被禁止
bit 4 未实现:读为0
bit 3
CF:时钟故障检测位 1 = FSCM 检测到时钟故障 0 = 未检测到时钟故障
bit 2
POSCEN: 主振荡器休眠使能位 1 = 主振荡器在休眠模式下继续工作 0 = 主振荡器在休眠模式下禁止
bit 1
SOSCEN:32 kHz 辅助振荡器 (SOSC)使能位 1 = 使能辅助振荡器
0 = 禁止辅助振荡器
bit 0
OSWEN: 振荡器切换使能位
1 = 启动振荡器切换,切换为 NOSC2:NOSC0 位指定的时钟源 0 = 振荡器切换完成
寄存器
7-1: OSCCON:振荡器控制寄存器 (续)
注
1: 这些位的复位值由 FNOSC 配置位决定。
2: IOLOCK 位的状态只能在执行解锁序列后更改。此外,如果 IOL1WAY 配置位为 1,则
IOLOCK 位置 1 后 它不能清零。3: 在任意有效时钟切换期间,或者每当选择了非 PLL 时钟模式时,也复位为 0。
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 113 页PIC24FJ256GB110 系列
寄存器
7-2: CLKDIV:时钟分频器寄存器
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1 ROI DOZE2 DOZE1 DOZE0 DOZEN(1) RCDIV2 RCDIV1 RCDIV0
bit 15 bit 8
R/W-0 R/W-0 U-0 U-0 U-0 U-0 U-0 U-0
CPDIV1 CPDIV0 — — — — — —
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15
ROI:中断恢复位
1 = 发生中断时清零 DOZEN 位,并将 CPU 外设时钟比复位为 1:1 0 = 中断对 DOZEN 位无影响
bit 14-12
DOZE2:DOZE0: CPU 外设时钟比选择位 111 = 1:128
110 = 1:64 101 = 1:32 100 = 1:16 011 = 1:8 010 = 1:4 001 = 1:2 000 = 1:1
bit 11
DOZEN:打盹使能位
(1)1 = DOZE2:DOZE0 位指定 CPU 外设时钟比 0 = CPU 外设时钟比设置为 1:1
bit 10-8
RCDIV2:RCDIV0: FRC 后分频比选择位 111 = 31.25 kHz (256 分频)
110 = 125 kHz (64 分频)
101 = 250 kHz (32 分频)
100 = 500 kHz (16 分频)
011 = 1 MHz (8 分频)
010 = 2 MHz (4 分频)
001 = 4 MHz (2 分频)
000 = 8 MHz (1 分频)
bit 7-6
CPDIV1:CPDIV0:USB 系统时钟选择位 (通过将 32 MHz 时钟进行后分频)
11 = 4 MHz (8 分频)
(2)10 = 8 MHz (4 分频)
(2)01 = 16 MHz (2 分频)
00 = 32 MHz (1 分频)
bit 5-0 未实现:读为
0
注
1: 该位在 ROI 位置 1 和发生中断时自动清零。
2: 当 USB 模块使能时,不允许该设置。
PIC24FJ256GB110 系列
DS39897B_CN 第 114 页
初稿
2009 Microchip Technology Inc.7.4 时钟切换操作
在 软 件 控 制 下,应 用 程 序 可 以 随 时 在 4 种时钟源
(POSC、 SOSC、 FRC 和 LPRC)之间自由切换,几 乎没有什么限制。为了限制这种灵活性可能带来的副作 用,PIC24F 器件在切换过程中采用了保护锁定。
7.4.1 使能时钟切换
要使能时钟切换,CW2 中的 FCKSM1 配置位必须编程 为
0
。(更多详细信息,请参见第25.1 节“配置位”。)
如果FCKSM1 配置位未编程 (1),则时钟切换功能和 故障保护时钟监视器功能被禁止。这是默认设置。
当时钟切换被禁止时,NOSCx控制位(OSCCON<10:8>)
不控制时钟选择。但是,COSCx 位(OSCCON<14:12>)
将反映由FNOSCx 配置位选择的时钟源。
在时钟切换被禁止时,OSWEN 控制位(OSCCON<0>)
不起作用。它始终保持为
0。
寄存器
7-3: OSCTUN:FRC 振荡器调节寄存器
U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0
— — — — — — — —
bit 15 bit 8
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — TUN5(1) TUN4(1) TUN3(1) TUN2(1) TUN1(1) TUN0(1)
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15-6 未实现:读为
0
bit 5-0
TUN5:TUN0: FRC 振荡器调节位 011111 = 最大频率偏移
011110 =
• •
•
000001 =
000000 = 中心频率,振荡器以出厂校准频率工作 111111 =
• •
•
100001 =
100000 = 最小频率偏移
注
1: TUN5:TUN0 的递增和递减不能在 FRC 调节范围内同步更改 FRC 频率,并且频率的变化也可能不是单调
的。注: 主 振 荡 器 模 式 具 有 三 种 不 同 的 子 模 式
(XT、HS 和 EC),它们由 POSCMDx 配 置位决定。虽然在软件中,应用程序可以 从其他模式切换为主振荡器模式并从主振 荡器模式切换为其他模式,但它不能在不 重新编程器件的情况下在不同的主振荡器 子模式之间切换。
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 115 页PIC24FJ256GB110 系列
7.4.2 振荡器切换过程 执行时钟切换需要以下基本过程:
1. 根据需要读COSCx 位 (OSCCON<14:12>)以 确定当前的振荡器源。
2. 执行解锁序列以允许写入OSCCON 寄存器的高 字节。
3. 向NOSCx 位 (OSCCON<10:8>)写入新振荡 器源的对应值。
4. 执行解锁序列以允许写入OSCCON 寄存器的低 字节。
5. 将OSWEN 位置 1 以启动振荡器切换。
一旦基本过程完成,系统时钟硬件将自动进行如下响 应:
1. 时钟切换硬件将NOSCx 位的新值与 COSCx 位 进行比较。如果它们相同,则时钟切换是冗余操 作。在这种情况下,OSWEN 位自动清零,时钟 切换中止。
2. 如果启动了有效的时钟切换,则 LOCK
(OSCCON<5>)和 CF(OSCCON<3>)位清零。
3. 如果新的振荡器当前不在运行,则硬件会将其启 动。如果必须要启动晶振,则硬件会等待到OST 计时期满。如果新的振荡器源需要使用PLL,则 硬件将等待到检测到PLL 锁定 (LOCK = 1)。
4. 硬件将等待新的时钟源 10 个时钟周期,然后执 行时钟切换。
5. 硬件清零OSWEN 位表示时钟转换成功。此外,
NOSCx 位的值被传送到 COSCx 位。
6. 此时,原来的时钟源被关闭,LPRC(如果 WDT 或FSCM 使能)或 SOSC(如果 SOSCEN 保持 置1)除外。
时钟切换的建议代码序列包括以下:
1. 禁止在OSCCON 寄存器解锁和写序列期间的中 断。
2. 在两个紧接的指令中将 78h 和 9Ah 写入 OSCCON<15:8>,以执行 OSCCON 高字节的解 锁序列。
3. 在紧接解锁序列之后的指令中将新的振荡器源写 入NOSCx 位。
4. 在两个紧接的指令中将 46h 和 57h 写入 OSCCON<7:0>,以执行 OSCCON 低字节的解 锁序列。
5. 在紧接解锁序列之后的指令中将OSWEN位置1。
6. 继续执行对时钟时序要求不高的代码 (可选)。
7. 调用相应数量的软件延时 (周期计数),以使选 中的振荡器和/ 或 PLL 启动并稳定。
8. 检查OSWEN 是否为
0
。如果为0
,则说明切换 成功。如果OSWEN 仍然置 1,则检查 LOCK 位 以确定故障的原因。例7-1 中显示了解锁 OSCCON 寄存器和启动时钟切换 的核心序列。
例
7-1:
时钟切换的基本代码序列注
1: 在整个时钟切换过程中,处理器将继续执
行代码。在此期间,不应执行对时序要求 高的代码。2: 不允许在任何带 PLL 的主振荡器模式和
FRCPLL 模式之间进行直接时钟切换。这 适用于任何方向下的时钟切换。在这些情 况下,应用必须首先切换到FRC 模式将其 作为两个PLL 模式之间的过渡时钟源。;Place the new oscillator selection in W0
;OSCCONH (high byte) Unlock Sequence
MOV #OSCCONH, w1
MOV #0x78, w2
MOV #0x9A, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Set new oscillator selection MOV.b WREG, OSCCONH
;OSCCONL (low byte) unlock sequence
MOV #OSCCONL, w1
MOV #0x46, w2
MOV #0x57, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Start oscillator switch operation BSET OSCCON,#0