• 沒有找到結果。

振荡器配置

在文檔中 的 64/80/100 引脚 (頁 111-121)

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 5

LOCK: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

在文檔中 的 64/80/100 引脚 (頁 111-121)