首页 PIC24系列单片机原理与开发_第3章_时钟和系统管理

PIC24系列单片机原理与开发_第3章_时钟和系统管理

举报
开通vip

PIC24系列单片机原理与开发_第3章_时钟和系统管理 PIC24系列单片机原理与开发 by Zeng 2012-6-9 振 荡 器 第 3章 系统时钟和系统管理 3.1 系统时钟 3.1.1 系统时钟概述 我们知道,所有的单片机都是在系统时钟的作用下工作的,因此系统时钟电路的稳定性 对整个嵌入式系统的运行可靠性至关重要。PIC24 系列的系统时钟电路较之前的 8位机更灵 活和完善,使用时也略微为复杂一点。PIC24 时钟系统具有以下特点:  可选择 4种外部和内部振荡器作为时钟源,提供 11 种不同的时钟模式。  片上锁相环(PLL)模块可所选的内部或...

PIC24系列单片机原理与开发_第3章_时钟和系统管理
PIC24系列单片机原理与开发 by Zeng 2012-6-9 振 荡 器 第 3章 系统时钟和系统管理 3.1 系统时钟 3.1.1 系统时钟概述 我们知道,所有的单片机都是在系统时钟的作用下工作的,因此系统时钟电路的稳定性 对整个嵌入式系统的运行可靠性至关重要。PIC24 系列的系统时钟电路较之前的 8位机更灵 活和完善,使用时也略微为复杂一点。PIC24 时钟系统具有以下特点:  可选择 4种外部和内部振荡器作为时钟源,提供 11 种不同的时钟模式。  片上锁相环(PLL)模块可所选的内部或外部振荡器进行4倍频。  可通过软件控制在各种时钟源之间切换。  可通过软件控制预分频器有选择地为 CPU 提供时钟,以节省系统功耗。  具有时钟故障监视(FSCM)功能,可检测时钟故障,以便用户在时钟失效期间采取 保护措施。  芯片的配置字中有专门的时钟配置位。 图 3-1 给出了时钟系统的简化图。从图中可见,系统时钟Fosc可以由以下4种之一提供:  主振荡器。芯片内提供振荡电路,芯片的OSC1和OSC2 引脚上需接的石英晶体等。  辅助振荡器。芯片内提供振荡电路,SOSCI和SOSCO引脚上需接的石英晶体等。  芯片内部的快速 RC 振荡器(FRC)。  芯片内部的低功耗 RC 振荡器(LPRC)。 PIC24 片内集成有性能优良的锁相环电路(PLL),可选择使用PLL对主振荡器或片内的 FRC进行四倍频,这样只需8MHz时钟源便可获得最高的系统时钟频率32MHz,对提高系统的电 磁兼容性十分有利。系统时钟二分频后产生内部指令周期时钟 Fcy。 对于大多数嵌入式应用而言,希望系统时钟频率尽可能高,以提高MCU的运行速度。对 于一些备用电池供电或直接由电池供电的应用场合,为了降低芯片的功耗,则可选用较低的 系统时钟频率。PIC24 的时钟电路提供了这种可由程序控制的系统时钟切换 机制 综治信访维稳工作机制反恐怖工作机制企业员工晋升机制公司员工晋升机制员工晋升机制图 ,如在待机 图 3-1 时钟系统的简化图 Fosc OSC1 OSC2 OSC1 主振荡器 快速RC振荡器 (FRC, 8MHz) 低功耗RC振荡器 (LPRC, 31kHz) PLL 4 倍频 SOSCO SOSCI OSC1 辅 振 荡 器 (32kHz) 时钟 选择 控制 Timer1 和 RTCC 时钟 时钟故障陷阱时钟故障检 测 FSCM Fcy 指令时钟 系统时钟 2分频 WDT 和 PWRT 时钟 分频器 PIC24系列单片机原理与开发 by Zeng 2012-6-9 方式时切换到低功耗RC振荡器(LPRC)。 3.1.2 振荡器配置 Flash存储器中的芯片配置字2(h文件中的宏定义_CONFIG2(x))中有五个位确定了振 荡器的配置模式。这五个配置位是:主振荡器配置位 POSCMD<1:0> (芯片配置字2<1:0>) 和振荡器配置位 FNOSC<2:0>(芯片配置字2<10:8>),用于选择在上电复位时使用的振荡器 源以及工作模式。通过编程这些位单元,用户可以选择 11 种不同的时钟模式,如 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 3-1 所 示。 表 3-1 时钟模式 振荡器模式 振荡器源 POSCMD<1:0> FNOSC<2:0> 快速RC 振荡器和预分频器 (FRCDIV) 内部 xx 111 (保留) 内部 xx 110 低功耗RC 振荡器(LPRC) 内部 xx 101 辅助(Timer1)振荡器 (SOSC) 辅助 xx 100 主振荡器(HS)和PLL 模块 (HSPLL)(注 1) 主,4 MHz-8 MHz 晶振, PLL 使能 10 011 主振荡器(XT)和PLL 模块 (XTPLL)(注 1) 主,4 MHz-8 MHz 晶振, PLL 使能 01 011 主振荡器 (EC)和 PLL 模块 (ECPLL)(注 2) 主,外部时钟(4-8 MHz), PLL 使能 00 011 主振荡器 (HS)(注 1) 主,10 MHz-32 MHz 晶振 10 010 主振荡器 (XT)(注 1) 主,3.5 MHz-10 MHz 晶振 01 010 主振荡器 (EC)(注 2) 主,外部时钟 (0-32 MHz) 00 010 快速 RC 振荡器和 PLL 模块 (FRCPLL) 内部 xx 001 快速 RC 振荡器 (FRC) 内部 xx 000 注 1:在这些模式中,外部晶振连接到引脚 OSC1 和 OSC2。 注 2:外部时钟接 OSC1引脚。 MPLAB C30 提供的各芯片头文件(例如:p24FJ128GA006.h)中已定义各配置位,建议 设计者在编程设计时直接使用芯片头文件中的宏定义。例如下面是头文件中芯片配置字 2 的宏和各配置位功能的定义: #define _CONFIG2(x) __attribute__((section("__CONFIG2.sec,code"))) int _CONFIG2 = (x); #define IESO_OFF 0x7FFF //禁止双速启动 #define IESO_ON 0xFFFF //允许双速启动 #define FNOSC_FRC 0xF8FF //使用内部快速 RC 振荡器(FRC) #define FNOSC_FRCPLL 0xF9FF //使用 FRC(带分频器),PLL 四倍频 #define FNOSC_PRI 0xFAFF //使用主振荡器(XT, HS, EC) #define FNOSC_PRIPLL 0xFBFF //使用主振荡器(XT, HS, EC), PLL 四倍频 #define FNOSC_SOSC 0xFCFF //使用辅振荡器 #define FNOSC_LPRC 0xFDFF //使用内部低功耗 RC 振荡器 #define FNOSC_FRCDIV 0xFFFF //使用内部快速 RC 振荡器,带分频器 PIC24系列单片机原理与开发 by Zeng 2012-6-9 #define FCKSM_CSECME 0xFF3F //允许时钟切换和监视 #define FCKSM_CSECMD 0xFF7F //允许时钟切换,禁止监视 #define FCKSM_CSDCMD 0xFFBF //禁止时钟切换和监视 #define OSCIOFNC_ON 0xFFDF // OSC2/CLKO/RC15 用作端口 I/O(RC15) #define OSCIOFNC_OFF 0xFFFF // OSC2/CLKO/RC15 用作 CLKO(Fosc/2) #define POSCMOD_EC 0xFFFC //外部时钟(0-32 MHz) #define POSCMOD_XT 0xFFFD //外接 XT 晶振(3.5MHz-10 MHz) #define POSCMOD_HS 0xFFFE //外接 HS 晶振(10 MHz-32 MHz) #define POSCMOD_NONE 0xFFFF //禁止主振荡器 设所需的配置为: 禁双速启动,使用主振荡器和 PLL 四倍频, OSC1 与 OSC2 引脚接 8MHz 的 XT 晶振,禁时钟切换和保护监视。在程序中加入下面的芯片配置字 2的宏便可实现所需配 置。 _CONFIG2(IESO_OFF & FNOSC_PRIPLL & FCKSM_CSDCMD & POSCMOD_ XT) 若配置改为使用片内快速RC振荡器(8MHz,不分频) 和PLL四倍频,禁止主振荡器,其余不 变,则芯片配置字2的宏为: _CONFIG2(IESO_OFF & POSCMOD_NONE & FCKSM_CSDCMD & FNOSC_FRCPLL) 因为没有启用主振荡器,因此 OSC1 与 OSC2 引脚可作 I/O 用。 3.1.3 控制寄存器 配置系统时钟的特殊功能寄存器有3个,他们是振荡器控制寄存器 OSCCON、时钟分频寄 存器 CLKDIV 和 片内快速RC振荡器(FRC) 的频率微调寄存器 OSCTUN。 1. 振荡器控制寄存器 OSCCON OSCCON 是振荡器的主要控制寄存器,它控制时钟源切换和时钟源监控。表 3-2 详 细列出 OSCCON 寄存器各位功能定义。只读位 COSC<2:0>或位域宏 OSCCONbits.COSC 的状态 指示当前系统时钟是选择的何种振荡器源,供用户在程序中查询。上电复位时 COSC<2:0>为 闪存配置字 2的位 FNOSC<2:0>的值。NOSC<2:0>位或 OSCCONbits.NOSC 用于设置待切换操作 的时钟源。若允许时钟切换(闪存配置字 2的位 FCKSM1=0),用户的应用程序可以随时在 4种时钟源(主振荡器、辅振荡器、快速 RC 振荡器、和低功耗 RC 振荡器)之间切换。为了 防止误操作时钟切换,PIC24 器件在切换过程中采用了保护锁定,只有执行了严格的操作时 序(解锁序列)才能有效写入。解锁序列对时序要求很高,OSCCON 寄存器字节仅在序列之后 的一个指令周期内可写,若用 C 语言编程进行时钟切换,其编译可能难以满足时序敏感的 指令序列,因此最好是用汇编编写程序代码,在需要时将其作为函数调用。时钟切换的步骤 说明:1. 当配置为禁止主振荡器时(POSCMD<1:0> = 11,宏定义为POSCMOD_NONE),引脚 OSC1 和 OSC2自动配置成数字I/O功能(RC12和RC15)。 2. 当主振荡器配置为外部时钟的EC 模式时 (POSCMD<1:0> = 00,宏定义为 POSCMOD_EC),外部时钟接OSC1引脚,若将 OSCIOFCN位(配置字2<5>)编程为0或引用 宏定义OSCIOFNC_ON,OSC2引脚仍可以为数字I/O,否则OSC2引脚上为Fosc/2 时钟输出, 可用于系统时钟测试或同步。 PIC24系列单片机原理与开发 by Zeng 2012-6-9 如下: (1)在 OSCCON 寄存器解锁和写序列期间禁止中断。 (2)用两条字节传送指令将 78h 和 9Ah 写入 OSCCON<15:8>,以执行 OSCCON 高字节的 解锁序列。 (3)紧接上面解锁序列之后将新的振荡器源写入 NOSC<2:0>。。 (4)用两条字节传送指令将 46h 和 57h 写入 OSCCON<7:0>,以执行 OSCCON 低字节的 解锁序列。 (5)紧接着将 OSWEN 位置 1。 (6)调用软件延时,使选中的振荡器和/或 PLL 启动并稳定。 (7)检查 OSWEN 位是否为 0,如果为 0,则说明切换成功。 下面是解锁 OSCCON 寄存器和启动时钟切换的核心序列。 例 3-1:时钟切换的基本代码序列 .global _Exam3_1 _Exam3_1: ;W0<2:0>为新的振荡器选择 PUSH SR ;状态寄存器入栈 MOV #0x0e0,w1 ;准备使 IPL<2:0>=0b111, MOV w1,SR ;CPU 中断优先级 7,禁止所有可屏蔽中断 MOV #OSCCONH,w1 ;OSCCONH (OSCCON 寄存器的高字节) 解锁序列 MOV #0x78, w2 MOV #0x9A, w3 MOV.b w2, [w1] MOV.b w3, [w1] MOV.b WREG, OSCCONH ;设置新的振荡器选择 MOV #OSCCONL,w1 ;OSCCONL(OSCCON 寄存器的低字节) 解锁序列 MOV #0x46, w2 MOV #0x57, w3 MOV.b w2, [w1] MOV.b w3, [w1] BSET OSCCON,#0 ; 启动时钟切换 POP SR ; 恢复状态寄存器 RETURN 上面的汇编子程序作为 C函数调用的格式为: void Exam3_1(int X)。参数 X的 bit2:0= 新振荡器选择位 NOSC<2:0>。例如将系统时钟切换成带分频的 FRC 为: Exam3_1(0b111); 在基本序列完成后,系统时钟硬件按以下方式自动响应: (1)若 COSC<2:0>位与 NOSC<2:0>位的值相同,则不进行切换操作,OSWEN 位自动清零, 时钟切换终止。 (2)如果启动了有效的时钟切换,则 LOCK 位(OSCCON<5>)和 CF 位(OSCCON<3>)清零。 (3)如果新的振荡器当前未运行,硬件会自动启动它。如果启动晶体振荡器,则硬件将等 待到振荡器起振定时器( OST)计时期满。如果新的振荡器源使用 PLL,则硬件将等待 到 PLL 锁定(位 LOCK = 1)。 (4)硬件等待新的时钟源达到稳定,然后执行时钟切换。 (5)硬件清零 OSWEN 位,指示时钟切换成功,并且 COSC<2:0>更新成 NOSC<2:0>位的值。 (6) 关闭旧时钟源。但是若旧时钟源是下面两种情况时例外:若闪存配置字 1中使能 WDT PIC24系列单片机原理与开发 by Zeng 2012-6-9 或 FSCM,则 LPRC 总是运行的;若 OSCCON 寄存器的位 SOSCEN 为“1”,则辅振荡器 SOSC 总是保持打开。 如果新时钟源不启动(例如主振荡器的晶振电路故障),则时钟切换硬件将无限期地等待 新时钟源,这时 OSWEN 位总是为“1”。用户编程时应避免这种情况发生。 新旧时钟源都是带锁相环(PLL)倍频的不能直接切换,需要先过渡到无锁相环的时钟源, 然后再切换到带锁相环的新时钟源。例如由带 PLL 的主振荡器(XTPLL)切换到带 PLL 的快速 RC 振荡器(FRCPLL),可先切换成无锁相环的 FRC,然后再切换到带锁相环的 FRCPLL。 若用户程序无需时钟切换功能,应将闪存配置字 2设置成禁止时钟切换(配置位 FCKSM1 =1),以增强程序的可靠性。 表3-2:振荡器控制寄存器 OSCCON 各位功能定义 其中: U=未用(读为0),R=可读, W=可写,-n =上电复位值, CO =只可清零,SO =只可置1, y = 上电复位或 掉电复位为闪存配置字2<10:8>( FNOSC<2:0>)的值 U-0 R-y R-y R-y U-0 R/W-y R/W-y R/W-y 未用 COSC<2:0> 未用 NOSC<2:0> bit 15 bit 8 R/SO-0 U-0 R -0 U-0 R/SO-0 U-0 R/W-0 R/W-0 CLKLOCK 未用 LOCK 未用 CF 未用 SOSCEN OSWEN bit 7 bit 0 bit 14-12 COSC<2:0> 当前选择的振荡器(与闪存配置2的FNOSC<2:0>相同): 111 = 带有分频器的快速 RC 振荡器 (FRCDIV) 110 = 保留 101 = 低功耗 RC 振荡器(LPRC) 100 = 辅助振荡器 (SOSC) 011 = 主振荡器, PLL 4倍频(XTPLL、HSPLL 和 ECPLL) 010 = 主振荡器 (XT、HS 和 EC) 001 = 快速RC振荡器(带分频器) PLL 4倍频(FRCPLL) 000 = 快速 RC 振荡器 (FRC) bit 10-8 NOSC<2:0> 新振荡器选择位,定义同上。 bit7 CLKLOCK 时钟选择锁定使能位: 1 = 时钟和 PLL 选择被锁定 0 = 时钟和 PLL 选择未锁定,可以通过将 OSWEN 位置 1而修改。 bit5 LOCK PLL 锁定状态位: 1 = PLL处于锁定状态 0 = PLL 处于失锁定状态,或 PLL 被禁止 bit4 CF 时钟故障检测位:1 = FSCM 检测到时钟故障 0 =未检测到时钟故障 bit1 SOSCEN 32KHz 辅助振荡器(SOSC)使能位:1 = 使能辅助振荡器 0 = 禁止辅助振荡器 bit0 OSWEN 振荡器切换使能位: 1 = 启动振荡器切换,切换为 NOSC<2:0> 位指定的振荡器类型 0 = 振荡器切换完成 其余位 未用 读为0 注1: 对不同型号的芯片,OSCCON的位分配可能有所不同,清查阅具体型号的数据 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 。 CF 位(OSCCON<3>)是可读/可清零状态位,若其为“1”指示时钟发生故障。当发生有 PIC24系列单片机原理与开发 by Zeng 2012-6-9 效时钟切换时,该位复位。 SOSCEN位(OSCCON<1>)用于使能或禁止辅助振荡器(32.768 kHz的SOSC )。 2. 时钟分频寄存器 CLKDIV CLKDIV寄存器的RCDIV 位(CLKDIV<10:8>)用于设置内部快速RC振荡器(FRC) 的分频数,使用户可以选择低于标称 8 MHz的时钟频率。内部快速RC振荡器只有在FRCDIV 和FRCPLL方式时使用分频器。若系统时钟不使用FRC,则编程时可以不管此。 CLKDIV寄存器的高5位与所谓的打盹模式(Doze Mode)有关。打盹模式是一种简单有 效的降低芯片功耗 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。在此模式下,系统时钟和外设模块时钟保持不变,但 CPU的时钟速 度降低。这样可保持外设正常工作,例如定时器的定时、串口通信的接收/发送等正常工作, 只是 CPU 以较慢的速率执行代码。 将DOZEN 位(CLKDIV<11>)置“1” 使能打盹模式,外设与CPU的时钟速度之比由 DOZE2:DOZE0位(CLKDIV<14:12>)决定。用户可编程选择比率,从 1:1到 1:256,上电复 位时默认为 1:1 的比率。将DOZEN 位(CLKDIV<11>)清“0” 退出打盹模式。 若置ROI 位(CLKDIV<15>)为“1”,则任一中断响应将退出打盹模式,并自动将CPU 和外设时钟的比率置为1:1,并清零DOZEN 位。若ROI 位清零,则中断不影响打盹模式。 表3-3:时钟分频寄存器 CLKDIV 各位功能定义 其中: U=未用(读为0),R=可读, W=可写,-n =上电复位值 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 DOZE<2:0> DOZEN RCDIV<2:0> bit 15 bit 8 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 未用 未用 未用 未用 未用 未用 未用 未用 bit 7 bit 0 bit 15 ROI 中断恢复位 1 = 发生中断时清零 DOZEN 位,并将 CPU/ 外设时钟比率复位为 1:1 0 = 中断对 DOZEN 位无影响 bit 14-12 DOZE<2:0> 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 = DOZE2:DOZE0 位指定CPU/ 外设时钟比 0 =CPU时钟/ 外设时钟比为1:1 bit 10-8 RCDIV<2:0> 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(直接FRC 输出) 其余位 未用 读为0 PIC24系列单片机原理与开发 by Zeng 2012-6-9 3. FRC 的频率微调寄存器 OSCTUN OSCTUN 是片内快速RC振荡器( FRC,标称频率为8MHz)的频率为微调寄存器。通过 设置OSCTUN 寄存器,用户可以对 FRC 的振荡频率在大约在 ±12% 的范围内进行微调。 OSCTUN寄存器只使用其低6位 TUN<5:0>。将TUN<5:0>视为6位的二进制补码,TUN<5:0> 的取值范围为-32~+31。MPLAB C30 的芯片头文件已有该位域宏定义: OSCTUNbits.TUN。OSCTUNbits.TUN=0 为振荡器出厂校准频率(中心频率,上电复位值), OSCTUNbits.TUN>0 频率增加,OSCTUNbits.TUN=0x3f 为最大增量; OSCTUNbits.TUN<0(-1~-32) 频率降低,OSCTUNbits.TUN=0x40为最大减量。 若用户未使用片内快速RC振荡器,则编程时无需考虑 OSCTUN 寄存器的设置。 3.1.4 使用主振荡器 1. 主振荡器电路和元件参数选择 图3-2为主振荡器的外部元件连接。在 XT 和 HS 模式下,晶振或陶瓷谐振器连接到 OSC1 和 OSC2 引脚,与芯片内部的反相器一起构成典型的振荡电路。内部反馈电阻 Rf 的 阻值范围通常为2至 。电容C1、C2的值一般应根据晶振生产厂商提供的参数来取,通 常在22 pF 至 33 pF 范围内。通 常情况下无需串接电阻Rs,即 Rs=0。但对于 AT 条形切割的晶体 可能需要这样一个串联电阻 Rs。 XT 和 HS 振荡器模式之间 的主要区别在于振荡器电路的内 部反相器的增益不同,从而使频率 范围也不同。通常,用户应选择具 有最低增益但仍满足振荡器正常 工作,这样可以产生较小的动态电 流(IDD)。 改善起振的一种方法是使 C2 电容值大于 C1。这使晶振在上电时产生较大的相移扰动 信号,从而加速振荡器起振。这两个电容除了与晶振产生频率谐振外,提高它们的电容值 还能降低环路增益。可以通过选择 C2 来影响电路的增益。如果晶振过驱动,可增加 C2的 容量来降低增益。 振荡器在正常情况下,OSC2引脚为较平滑的正弦波,其峰-峰值为供电电压VDD的60 %左右。若输出的幅值不够,应增加环路增益,如减小电容值,或设置成HS振荡器 (POSCMOD_HS)。反之,若输出正弦波被削波,说明环路增益过高,晶振过驱动。晶振 过驱动时可尝试增加 C2的容量来进行补偿,但电容的取值应在规范值之内,若超出规范值 表3-4:FRC 的频率微调寄存器 OSCTUN 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 未用 未用 TUN<5:0> bit 7 bit 0 图 3-2 晶振或陶瓷谐振器(XT 或HS 振荡器模式) XTAL Rf C1 Rs 至内部电路 OSC2 OSC1 PIC24芯片 C2 使能 PIC24系列单片机原理与开发 by Zeng 2012-6-9 振 荡 器 过多,将导致振荡电流加大,电路的起振变慢。当然也可以改变振荡器工作模式(设置成XT 型:POSCMOD_XT),以降低增益。还可以在电路中增加一个串联电阻 Rs来消除晶振过驱动。 Rs 阻值不宜过大,一般在 以下,否则时钟容易受干扰噪声影响。 根据笔者的使用情况,建议用8MHz的晶振,启用片内PLL 4倍频(POSCMOD_XT & FNOSC_PRIPLL),电阻Rs可不要(Rs=0),电容C1、C2取20pf~30pf均可。 2. 使用外部时钟输入 在 EC(POSCMOD_EC)模式下,外部时钟接OSC1 引脚。OSC1 引脚为高阻态,可 以由 CMOS电路驱动。OSC1 和 OSC2 之间的反馈器件被关闭,以节省功耗。 OSC2 引 脚可以通过选择 OSCIOFCN 位 (配置字 2<5>)而配置为 I/O 或时钟输出 (FOSC/2)。 OSCIOFCN位置“1”时,时钟输出,可用于测试时钟信号或供外面作同步信号。OSCIOFCN 位清零时,OSC2 引脚成为通用 I/O 引脚(RC15)。除非用户所设计的装置中已有现成的 时钟脉冲源,否则很少用这种模式。 3.1.5 低功耗辅助振荡器 (SOSC) 低功耗辅助振荡器是专为使用32.768 kHz晶振的低功耗运行用户而设计的。同时它也是 实时时钟(RTC)的时钟源,也可以作为定时器Timer1的时钟源。辅振荡器的结构和参数的 选择与主振荡器类似,SOSC0、SOSCI引脚接32.768 kHz的晶振。 若振荡器配置位 FNOSC<2:0>(芯片闪存配置字2<10:8>)=0b100, 则上电复位时系统时 钟选择的是辅助振荡器,不过一般都不会这样设计,因为CPU的运行速度太低,在正常供电 的情况下应尽量使CPU在工作最高时钟频率(Fcy=16MHz)。对于使用 PIC24 实时时钟和日历 (RTCC)功能的用户,因为RTCC 模块使用外部32.768kHz晶振时钟源,所以必须将SOSCEN 位(OSCCON<1>)置“1”启用辅助振荡器,这时SOSCO 和 SOSCI 引脚由振荡器控制,不能 用作端口 I/O 或其他功能。当外部供电掉电而进入备用电池供电时,可将系统时钟切换到辅 助振荡器,以降低芯片的功耗。 关于 PIC24 实时时钟和日历的详细说明和应用程序请参见 第 12章 “实时时钟日历”。 3.1.6 内部快速 RC 振荡器(FRC) FRC是芯片内部的快速RC 振荡器,标称频率为 8 MHz,设置OSCTUN寄存器的 TUN<5:0>位的值可微调振荡频率。若用户程序对时间(如定时器的时间误差)没有较严格的 要求,可使用FRC作为系统时钟源。 上电复位时,芯片自动使能FRC 振荡器,作为器件初始化期间的参考时钟,在器件经过 配置和 PWRT(上电延时定时器)计时期满之后,FRC 仅在被选择作为系统时钟源时才继 续工作(由闪存配置字2的 FNOSC<2:0>取值确定)。 FRC有一个可选的后分频器(FRCDIV模式),设置RCDIV<2:0>位(CLKDIV<10:8>) 的分频系数,用户可选择8 种时钟频率输出: 8 MHz(1 分频), 4 MHz(2 分频),……,31 kHz (256 分频)。FRC 后分频器的输出可以经锁相环4倍频模块(4x PLL)产生最高为 32 MHz 的系统时钟。 3.1.7 内部低功耗 RC 振荡器(LPRC) LPRC是集成在芯片内部标称频率为 31 kHz的另一个RC 振荡器。LPRC 是上电延时 定时器(PWRT)、看门狗定时器(WDT) 和时钟保护监视器(FSCM)的时钟源。尽管LPRC PIC24系列单片机原理与开发 by Zeng 2012-6-9 振 荡 器 也可以选择作为系统时钟,但正常供电运行时一般不会这样选取,除非是在备用电池供电 下降低功耗维持运行。 上电复位时,LPRC 振荡器用作 PWRT 时钟源。在 PWRT 计时期满后,只有在使能 了故障保护时钟监视器、或使能WDT、或LPRC 被选择作为系统时钟时,LPRC 振荡器才会 保持工作,否则 LPRC 将在 PWRT 计时期满后关闭。 3.1.8 双速启动 双速启动是一种自动时钟切换功能。利用双速启动,芯片在上电复位时启用片内快速 RC 振荡器(FRC)作系统时钟,经短暂的复位延时(约40us)便开始执行代码。当配置位 FNOSC<2:0>(芯片闪存配置字2中)所指定的外部振荡器达到稳定时,它自动切换到该振 荡器源,从而使芯片最大限度地缩短从振荡器起振到代码执行之间的延时。 将芯片闪存配置字2中的配置位IESO设置为“1”使能双速启动,且与FCKSM 配置位的 取值无关。若使能了双速启动,则在省电休眠模式唤醒时,也使用双速启动功能。 3.2 复位管理 所有的 MCU在上电时都必须进入到一个特定的起始状态,使芯片的各引脚和相关特殊 功能寄存器、控制寄存器等复位成初始状态,然后从复位入口地址处执行程序代码。因此 MCU均有一个专门的复位电路,使芯片迅速进入有序工作状态,有条不紊地执行用户程序。 另外,为了提高芯片的运行可靠性,一旦发生系统运行出错时(如看门狗溢出、执行非法指 令,非法寻址等),应重新复位芯片,以尽可能避免程序跑飞后死机或运行逻辑紊乱。为此, PIC24 系列芯片提供了多种复位功能,如图 3-3所示。 任一复位源有效都产生芯片复位控制信号(即主复位信号),同时将复位控制寄存器 RCON中相应的位置 1,以指示复位类型,见表 3-5。上电复位时 RCON中的 POR 和 BOR 位为“1”,其余位均为“0”。其余复位源产生复位时只有与其对应的状态位置 “1”,不影响其 它的状态位。 RCON 寄存器中所有复位状态位都可读、写,若用软件人为地置“1”并不会产生芯片复 位。另外,在程序设计中若用到了RCON 寄存器中的复位状态位,则应该在读取这些状态位 后将其清零,这样下一次器件复位后的 RCON 寄存器的值才有意义。 任一复位源产生复位时,许多比较关键的寄存器,如CPU内核控制寄存器和外设控制寄 图3-3 系统复位模块框图 SYSRST 毛刺滤波 VDD上升检测 非法操作码,未初始化 W寄存器,陷阱冲突,配 置不匹配 VDD RESET指令 使能稳压器 休眠或空闲 WDT溢出 POR BOR欠压复位 或 MCLR 主复位信号 PIC24系列单片机原理与开发 by Zeng 2012-6-9 存器,会被强制为一个已知的复位状态。Microchip 公司提供的芯片数据手册对各外设控制 寄存器(又称特殊功能寄存器 ,SFR)一般都给出了上电复位(Power-on Reset,POR)的状态, 实际上也是其它类型复位时的状态,例如只要是复位,I/O端口的方向寄存器均配置为输入; 定时器的控制寄存器为POR值,中断控制寄存器为POR值等。 但是有两个SFR例外。一个是 复位寄存器 RCON 的复位值取决于器件的复位源类型,另一个是振荡器控制寄存器 OSCCON。对于非上电复位,OSCCON 寄存器保持复位前的系统时钟选择。另外,还有些 寄存器不受复位的影响,在 POR 时它们的状态未知,而在其他复位时它们的状态不变。作 为软件设计者,最好是将所有用到的寄存器均作上电复位初始化,而对其它复位也作相应的 初始化,或者用它们的备份(当然需用户自己建立)作恢复,具体可视情况而定。 表3-5:复位控制寄存器: RCON 其中: U=未用(读为0),R=可读, W=可写,-n =上电复位值 R/W-0 R/W-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 TRAPR IOPUWR 未用 CM VREGS bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-1 EXTR SWR SWDTEN WDTO SLEEP IDLE BOR POR bit 7 bit 0 bit 15 TRAPR 陷阱复位标志: 1 = 发生了陷阱冲突复位 0= 未发生陷阱冲突复位 bit 14 IOPUWR 非法操作复位标志: 1 =非法操作码、非法寻址模式或未初始化的W寄存器(用作地 址指针)而导致的复位 0= 未发生上述情况复位 bit 9 CM 配置不匹配标志:1 = 发生了配置不匹配复位 0 = 未发生配置不匹配复位 bit 8 VREGS 片内稳压器待机使能:1 = 稳压器在休眠期间保持工作 0 = 稳压器在休眠期间进入待机模式 bit 7 EXTR 外部引脚(MCLR)复位标志:1= 发生外部引脚复位 0 = 未发外部生引脚复位 bit 6 SWDTEN 看门狗(WDT)使能/ 禁止位: 1= 使能WDT0 = 禁止WDT 如果FWDTEN 配置位为1,WDT 总是使能的,与SWDTEN 位无关。 bit 5 SWR 软件复位(指令)标志位: 1 = 执行了RESET指令 0= 未执行RESET指令 bit 4 WDTO 看门狗定时器溢出标志:1= WDT 发生超时溢出 0= WDT 未发生超时溢出 bit 3 SLEEP 休眠模式唤醒标志: 1 = 芯片处于休眠模式 0= 芯片未处于休眠模式 bit 2 IDLE 空闲模式唤醒标志:1 = 芯片处于空闲模式 0 = 芯片未处于空闲模式 bit 1 BOR 欠压复位标志: 1 = 发生了欠压复位或上电复位。 0= 未发生欠压复位 bit 0 POR 上电复位标志: 1 = 发生了上电复位 0= 未发生上电复位 PIC24系列单片机原理与开发 by Zeng 2012-6-9 MCLR 3.2.1 上电复位(POR) 单片机上电时必须可靠地复位,这是嵌入式应用的最基本要求。但以往有很多种单片机 在这方面的表现不尽人意,实际应用中需要外加专门复位芯片才能获得复位可靠性。相对而 言,PIC24F具有完善的复位电路模块,一般无需外加复位芯片,也能可靠的上电复位。 上电时,片内POR 脉冲的产生需满足条件:起始电压小于VPOR(手册值为Vss,实际 值应小于1V), 电压上升速率大于SVDD(手册值为0.05V/ms), VPOR 和 SVDD的更多信息, 请参见具体器件数据手册的“电气特性”章节。 片内 POR 脉冲使芯片进入上电复位过程:  根据芯片闪存配置字2的振荡器配置位(FNOSC<2:0>)选择选择相应的时钟源。  POR 脉冲之后,延时TPOR(标称值为10µs),以使内部偏置电路稳定。  若使能了片上稳压器(引脚ENVREG接VDD)再延时 TSTARTUP(约10µs)。如果片上稳压器 被禁止,则启动上电延时定时器(PWRT),延时TSTARTUP(约64 ms)。  再延时TRST(标称值为 20us)。在此期间,闪存配置字的配置值传送到相应的寄存器,释 放主复位信号(SYSRST),BOR 和 POR状态位(RCON<1:0>)置“1”,并将PC置 为复位入口地址(0x000000)。TRST 延时结束后程序开始运行。 芯片实际开始执行代码的时间还与系统振荡器的延时有关,它包括振荡器起振定时器 延时TOST(10位计数器计满 1024 个振荡器周期后,才将振荡器时钟开放给系统使用)、 使用PLL倍频时的PLL 锁定时间TLOCK(标称值为 20us)和保护时钟监视器延时TFSCM(标 称值为 100us)。TOST 和TLOCK 与SYSRST的延时是同时开始的,TFSCM是在TPOR之后 开始。 例 3-2:设系统时钟为 8MHz主振荡器+PLL 4倍频(芯片闪存配置字2的初始振荡器选 择为FNOSC<2:0>=0b011,或宏定义_CONFIG2( )中使用配置位的定义 FNOSC_PRIPLL),禁止 保护时钟监视器(芯片闪存配置字2的FCKSM<1:0>=0b1x,或0b01),引脚ENVREG接VDD 启用片上稳压器。上电后,芯片VDD端的电压达到上电复位门槛值时(产生片内 POR 脉 冲),SYSRST延时时间约为: 10us(TPOR)+10us(TSTARTUP)+20us(TRST)=40us; 振荡器的延时约为: 1024*0.125us(TOST)+20us(TLOCK)=148us 。 可见,上电主要是振荡器的延时。若振荡器起振较慢,1024 个振荡器周期后还不能稳 定,则PLL的锁定时间会延长,在PLL未锁定之前,芯片保持复位状态。 对大多数应用而言,上电复位的一点延时并非至关重要,设计时也无需苛求。对确实 要求快速上电运行的用户,可采用双速启动,也可将片内的快速RC振荡器作为初始振荡器, 然后再切换到晶振的主振荡器,以缩短上电延时时间。 3.2.2 引脚复位 在芯片的 MCLR引脚加上持续时间大于 2us的低 电平时,则芯片进入复位,复位的延时从 MCLR引脚 释放(变为高电平)开始,经 TRST延时,芯片从复 位入口地址(0x000000)处执行程序。 如果只使用芯片内部的 POR 复位,只要将 MCLR引脚接 VDD,或通过电阻接 VDD即可。实际 应用中,为了简化电源电路的设计,同时又可避免 3.3V C RD PIC24FJ128GA MCLR R1 图 3-4 外部上电复位电路 PIC24系列单片机原理与开发 by Zeng 2012-6-9 电源上升速率过慢而导致 POR失效,常用图 3-4所示的外引脚复位电路。 电阻 R的取值可 1~10 kΩ,与之并联的二极管 D的作用是在掉电时使电容 C快速放电。 电容 C 有两个作用:一是上电时产生MCLR引脚的复位信号,另一作用是在正常工作时吸 收MCLR引脚的尖峰干扰,避免干扰而造成芯片复位。电容 C 最好是用高频特性好的,其 取值可 1000pF~1uF,也可以用 1~10uF的电解电容。电阻 R1的作用是限制流入复位端的 电流,可避免芯片进入所谓的“锁死”状态,其阻值可选择 50~100Ω。 3.2.3 欠压复位(BOR) Microchip的数据手册中欠压复位为“Brown-Out Reset”,缩写成BOR。其意为电源电压降 至于芯片运行可能不稳定的“褐色”区,因而产生复位。 当使能片上稳压器时,PIC24F 系列器件有一个简单的欠压保护功能。当VDD端的电压 下降到VBOR(2.3~2.7V)时,片内稳压器复位电路将产生欠压复位,同时复位控制寄存器的 BOR标志位(RCON<1>)置“1”。需注意的是,上电复位时BOR标志位也被置“1”,因此只有 BOR标志为“1”且上电复位POR标志为“0”才为欠压复位。 实际应用中,供VDD的电源电压应留有足够的稳压裕量,当供电电源波动或有“闪变”时, 也应保证VDD的稳定,不应产生欠压复位。只有在掉电时,才由BOR强制芯片进入复位状态, 避免芯片出现错误动作,这样系统方能可靠工作。 3.2.4 看门狗超时复位 (WDTR) 在嵌入式系统中,单片机受到外界的强电磁干扰时可能造成程序的跑飞,或陷入死循环, 或控制逻辑紊乱,造成整个系统发生不可预料的后果。为避免诸如此类的情况发生,希望在 干扰造成程序跑飞时尽可能恢复正常,由此而产生了所谓的"看门狗"(watchdog)技术。其基 本原理是:设置一个专用的看门狗定时器(WDT),正常情况下用户程序以一定的时间 间隔不断地复位 WDT,WDT 总是不会溢出;如果超过规定的时间未复位 WDT,(一 般在程序跑飞时 ),WDT 溢出,产生复位信号使单片机复位,通过用户程序的适当处 理,可让系统迅速恢复正常。 PIC24F 系列在芯片内集成了WDT控制模块,WDT 的时钟脉冲来自片内低功耗RC振荡 器(LPRC)。当使能 WDT 时,同时使能该时钟源。 LPRC(标称值31 kHz)的时钟信号经前、后两次分频(即前、后两个计数器)形成WDT 超时复位信号。WDT 超时周期由闪存配置字1中的前(WDTPS<3:0>)、后(FWPSA位)分 频配置位确定,共有16 种选择,可获得 1 ms到 131 秒的WDT超时周期,如表3-6所示。 表3-6: WDT 配置和超时周期 超时周期后分频器设置 WDTPS<3:0> 后分频系数 前32分频 (FWPSA = 0) 前128分频 (FWPSA = 1) 0000 1 1 ms 4 ms 0001 2 2 ms 8 ms 0010 4 4 ms 16 ms 0011 8 8 ms 32 ms 0100 16 16 ms 64 ms 0101 32 32 ms 128 ms PIC24系列单片机原理与开发 by Zeng 2012-6-9 0110 64 64 ms 256 ms 0111 128 128 ms 512 ms 1000 256 256 ms 1.024s 1001 512 512 ms 2.048s 1010 1024 1.024s 4.096s 1011 2048 2.048s 8.192s 1100 4096 4.096s 16.384s 1101 8192 8.192s 32.768s 1110 16384 16.384s 65.536s 1111 32768 32.768s 131.072s WDT(前、后分频器计数值)在以下条件复位(清零):  执行 CLRWDT 指令。  任何类型的复位。  在时钟切换完成时,由软件 (即改变 NOSC 位后将 OSWEN 位置“1”)或硬件引 起 (即故障保护时钟监视器动作。)  执行 PWRSAV 指令时(即进入休眠或待机模式)。  当CPU退出休眠(SLEEP)或待机(IDLE)模式恢复正常工作时。 在休眠或待机模式下WDT将继续运行,但发生 WDT 超时时,它只是唤醒CPU 恢复运 行,不会产生复位信号。 使用WDT的要点: (1) 芯片闪存配置字1中的FWDTEN位置“1”(芯片h文件中的定义:FWDTEN_ON), 使能WDT。 (2) 根据所需的WDT溢出周期和表3-6,定义好闪存配置字1中的前(WDTPS<3:0>)、 后(FWPSA位)分频配置值。 (3) 程序中以小于WDT溢出周期的间隔不断地复位WDT(执行 CLRWDT 指令)。复位 WDT通常在主程序中(main()中)进行,若在定时器中断服务中复位WDT,很有可能程序跑 飞后定时器中断服务仍正常工作,这样WDT没起到应有的作用。 (4) 程序的复位入口检测是否WDT复位。若标志位 WDT0(RCON<4>)=1,清零 该标志,并作相应的现场恢复处理。 (5) WDT不是万能的,设计者首先应在硬件设计上特别是PCB的布线上花功夫,使系 统在恶劣的干扰环境中能正常工作才是最重要的。 3.2.5 其余复位信号 以下几种类型复位(包括WDT 超时复位),均不影响系统时钟,复位延时为TRST(20us), 复位入口地址均为 0x000000。 1. RESET 复位指令(SWR) 任何时候只要执行了 RESET 指令,芯片立即复位,并将SWR 状态位(RCON<5>) 置“1”。 2. 非法操作码复位 如果 CPU 试图执行非法操作码(无定义的操作码),芯片立即复位,并将状态位 IOPUWR(RCON<14>)置“1”。 PIC24系列单片机原理与开发 by Zeng 2012-6-9 3.未初始化的 W 寄存器复位 芯片复位后,工作寄存器 W0~W14被自动清零,并视为未被初始化。若用户程序试图 对这些未作初始化(即未作一次写操作)的 W 寄存器作为指针寻址,芯片立即复位,并 将 IOPUWR 状态位(RCON<14>)置“1”。 4.配置不匹配复位 所有的器件配置位都在其对应的后台寄存器中存储其互补值:对于每个位,当寄存器 中的值为“1”时,则在其对应的后台寄存器中的相应位为 “0”,反之亦然。每次匹配时都会比 较每对配置位。如果发现配置位的值彼此不互补,则产生配置不匹配事件,芯片立即复位, 并将CM 状态位(RCON<9>)置“1”。 5. 陷阱冲突复位 在同时发生硬陷阱和软陷阱时,产生陷阱冲突复位,并将TRAPR状态位(RCON<15>) 置“1”。 除了RESET指令外,程序在正常运行时不应发生上述(包括WDT 超时)复位,否则是 程序设计问题,可通过实时在线调试等手段把问题排除。在干扰情况下若发生非期望的复 位,首先要在硬件采取措施,使系统不产生复位。当然,在软件也可针对不同的复位作相 应的现场恢复处理。 3.3 中断系统 3.3.1 中断系统简介 PIC24 系列的中断系统较之通常的 8 位单片机作了很多扩充,总的来说设计得比较完 善,功能很强。因为 PIC24 片内集成的多种功能接口模块(称之为外设),所以中断源较多。 各外设中断源均有自己的申请标志位、中断允许控制位、优先级设置和入口向量。 表 3-7和表 3-8 所列是 PIC24FJ128GA 系列中断源的中断向量 IVT 和芯片 gld 文件定 义的 C程序中断服务程序入口(主向量名,ISR)以及中断标志位、允许控制位、优先级设置的 寄存器。 表 3-7 GA 系列的中断向量和入口(按中断号排列) 中断位地址 中断源 中断 号 IVT 地址 中断服务入口 (中断向量名) 标志 允许 优先级 振荡器故障陷阱 无 0x000006 _OscillatorFail INTCON1<1> 无 14 非法地址陷阱 无 0x000008 _AddressError INTCON1<3> 无 13 堆栈错误陷阱 无 0x00000A _StackError INTCON1<2> 无 12 运算错误陷阱 无 0x00000C _MathError INTCON1<4> 无 11 外部中断 0 0 0x000014 _INT0Interrupt IFS0<0> IEC0<0> IPC0<2:0> 输入捕捉 1 1 0x000016 _IC1Interrupt IFS0<1> IEC0<1> IPC0<6:4> 输出比较 1 2 0x000018 _OC1Interrupt IFS0<2> IEC0<2> IPC0<10:8> Timer1 3 0x00001A _T1Interrupt IFS0<3> IEC0<3> IPC0<14:12> 输入捕捉 2 5 0x00001E _IC2Interrupt IFS0<5> IEC0<5> IPC1<6:4> 输出比较 2 6 0x000020 _OC2Interrupt IFS0<6> IEC0<6> IPC1<10:8> Timer2 7 0x000022 _T2Interrupt IFS0<7> IEC0<7> IPC1<14:12> Timer3 8 0x000024 _T3Interrupt IFS0<8> IEC0<8> IPC2<2:0> SPI1 错误 9 0x000026 _SPI1ErrInterrupt IFS0<9> IEC0<9> IPC2<6:4>
本文档为【PIC24系列单片机原理与开发_第3章_时钟和系统管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_486227
暂无简介~
格式:pdf
大小:358KB
软件:PDF阅读器
页数:23
分类:互联网
上传时间:2013-05-13
浏览量:54