您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > PIC24系列单片机原理与开发-第3章-时钟和系统管理
PIC24系列单片机原理与开发byZeng2012-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时钟系统的简化图FoscOSC1OSC2OSC1主振荡器快速RC振荡器(FRC,8MHz)低功耗RC振荡器(LPRC,31kHz)PLL4倍频SOSCOSOSCIOSC1辅振荡器(32kHz)时钟选择控制Timer1和RTCC时钟时钟故障陷阱时钟故障检测FSCMFcy指令时钟系统时钟2分频WDT和PWRT时钟分频器PIC24系列单片机原理与开发byZeng2012-6-9方式时切换到低功耗RC振荡器(LPRC)。3.1.2振荡器配置Flash存储器中的芯片配置字2(h文件中的宏定义_CONFIG2(x))中有五个位确定了振荡器的配置模式。这五个配置位是:主振荡器配置位POSCMD1:0(芯片配置字21:0)和振荡器配置位FNOSC2:0(芯片配置字210:8),用于选择在上电复位时使用的振荡器源以及工作模式。通过编程这些位单元,用户可以选择11种不同的时钟模式,如表3-1所示。表3-1时钟模式振荡器模式振荡器源POSCMD1:0FNOSC2:0快速RC振荡器和预分频器(FRCDIV)内部xx111(保留)内部xx110低功耗RC振荡器(LPRC)内部xx101辅助(Timer1)振荡器(SOSC)辅助xx100主振荡器(HS)和PLL模块(HSPLL)(注1)主,4MHz-8MHz晶振,PLL使能10011主振荡器(XT)和PLL模块(XTPLL)(注1)主,4MHz-8MHz晶振,PLL使能01011主振荡器(EC)和PLL模块(ECPLL)(注2)主,外部时钟(4-8MHz),PLL使能00011主振荡器(HS)(注1)主,10MHz-32MHz晶振10010主振荡器(XT)(注1)主,3.5MHz-10MHz晶振01010主振荡器(EC)(注2)主,外部时钟(0-32MHz)00010快速RC振荡器和PLL模块(FRCPLL)内部xx001快速RC振荡器(FRC)内部xx000注1:在这些模式中,外部晶振连接到引脚OSC1和OSC2。注2:外部时钟接OSC1引脚。MPLABC30提供的各芯片头文件(例如:p24FJ128GA006.h)中已定义各配置位,建议设计者在编程设计时直接使用芯片头文件中的宏定义。例如下面是头文件中芯片配置字2的宏和各配置位功能的定义:#define_CONFIG2(x)__attribute__((section(__CONFIG2.sec,code)))int_CONFIG2=(x);#defineIESO_OFF0x7FFF//禁止双速启动#defineIESO_ON0xFFFF//允许双速启动#defineFNOSC_FRC0xF8FF//使用内部快速RC振荡器(FRC)#defineFNOSC_FRCPLL0xF9FF//使用FRC(带分频器),PLL四倍频#defineFNOSC_PRI0xFAFF//使用主振荡器(XT,HS,EC)#defineFNOSC_PRIPLL0xFBFF//使用主振荡器(XT,HS,EC),PLL四倍频#defineFNOSC_SOSC0xFCFF//使用辅振荡器#defineFNOSC_LPRC0xFDFF//使用内部低功耗RC振荡器#defineFNOSC_FRCDIV0xFFFF//使用内部快速RC振荡器,带分频器PIC24系列单片机原理与开发byZeng2012-6-9#defineFCKSM_CSECME0xFF3F//允许时钟切换和监视#defineFCKSM_CSECMD0xFF7F//允许时钟切换,禁止监视#defineFCKSM_CSDCMD0xFFBF//禁止时钟切换和监视#defineOSCIOFNC_ON0xFFDF//OSC2/CLKO/RC15用作端口I/O(RC15)#defineOSCIOFNC_OFF0xFFFF//OSC2/CLKO/RC15用作CLKO(Fosc/2)#definePOSCMOD_EC0xFFFC//外部时钟(0-32MHz)#definePOSCMOD_XT0xFFFD//外接XT晶振(3.5MHz-10MHz)#definePOSCMOD_HS0xFFFE//外接HS晶振(10MHz-32MHz)#definePOSCMOD_NONE0xFFFF//禁止主振荡器设所需的配置为:禁双速启动,使用主振荡器和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.振荡器控制寄存器OSCCONOSCCON是振荡器的主要控制寄存器,它控制时钟源切换和时钟源监控。表3-2详细列出OSCCON寄存器各位功能定义。只读位COSC2:0或位域宏OSCCONbits.COSC的状态指示当前系统时钟是选择的何种振荡器源,供用户在程序中查询。上电复位时COSC2:0为闪存配置字2的位FNOSC2:0的值。NOSC2:0位或OSCCONbits.NOSC用于设置待切换操作的时钟源。若允许时钟切换(闪存配置字2的位FCKSM1=0),用户的应用程序可以随时在4种时钟源(主振荡器、辅振荡器、快速RC振荡器、和低功耗RC振荡器)之间切换。为了防止误操作时钟切换,PIC24器件在切换过程中采用了保护锁定,只有执行了严格的操作时序(解锁序列)才能有效写入。解锁序列对时序要求很高,OSCCON寄存器字节仅在序列之后的一个指令周期内可写,若用C语言编程进行时钟切换,其编译可能难以满足时序敏感的指令序列,因此最好是用汇编编写程序代码,在需要时将其作为函数调用。时钟切换的步骤说明:1.当配置为禁止主振荡器时(POSCMD1:0=11,宏定义为POSCMOD_NONE),引脚OSC1和OSC2自动配置成数字I/O功能(RC12和RC15)。2.当主振荡器配置为外部时钟的EC模式时(POSCMD1:0=00,宏定义为POSCMOD_EC),外部时钟接OSC1引脚,若将OSCIOFCN位(配置字25)编程为0或引用宏定义OSCIOFNC_ON,OSC2引脚仍可以为数字I/O,否则OSC2引脚上为Fosc/2时钟输出,可用于系统时钟测试或同步。PIC24系列单片机原理与开发byZeng2012-6-9如下:(1)在OSCCON寄存器解锁和写序列期间禁止中断。(2)用两条字节传送指令将78h和9Ah写入OSCCON15:8,以执行OSCCON高字节的解锁序列。(3)紧接上面解锁序列之后将新的振荡器源写入NOSC2:0。。(4)用两条字节传送指令将46h和57h写入OSCCON7:0,以执行OSCCON低字节的解锁序列。(5)紧接着将OSWEN位置1。(6)调用软件延时,使选中的振荡器和/或PLL启动并稳定。(7)检查OSWEN位是否为0,如果为0,则说明切换成功。下面是解锁OSCCON寄存器和启动时钟切换的核心序列。例3-1:时钟切换的基本代码序列.global_Exam3_1_Exam3_1:;W02:0为新的振荡器选择PUSHSR;状态寄存器入栈MOV#0x0e0,w1;准备使IPL2:0=0b111,MOVw1,SR;CPU中断优先级7,禁止所有可屏蔽中断MOV#OSCCONH,w1;OSCCONH(OSCCON寄存器的高字节)解锁序列MOV#0x78,w2MOV#0x9A,w3MOV.bw2,[w1]MOV.bw3,[w1]MOV.bWREG,OSCCONH;设置新的振荡器选择MOV#OSCCONL,w1;OSCCONL(OSCCON寄存器的低字节)解锁序列MOV#0x46,w2MOV#0x57,w3MOV.bw2,[w1]MOV.bw3,[w1]BSETOSCCON,#0;启动时钟切换POPSR;恢复状态寄存器RETURN上面的汇编子程序作为C函数调用的格式为:voidExam3_1(intX)。参数X的bit2:0=新振荡器选择位NOSC2:0。例如将系统时钟切换成带分频的FRC为:Exam3_1(0b111);在基本序列完成后,系统时钟硬件按以下方式自动响应:(1)若COSC2:0位与NOSC2:0位的值相同,则不进行切换操作,OSWEN位自动清零,时钟切换终止。(2)如果启动了有效的时钟切换,则LOCK位(OSCCON5)和CF位(OSCCON3)清零。(3)如果新的振荡器当前未运行,硬件会自动启动它。如果启动晶体振荡器,则硬件将等待到振荡器起振定时器(OST)计时期满。如果新的振荡器源使用PLL,则硬件将等待到PLL锁定(位LOCK=1)。(4)硬件等待新的时钟源达到稳定,然后执行时钟切换。(5)硬件清零OSWEN位,指示时钟切换成功,并且COSC2:0更新成NOSC2:0位的值。(6)关闭旧时钟源。但是若旧时钟源是下面两种情况时例外:若闪存配置字1中使能WDTPIC24系列单片机原理与开发byZeng2012-6-9或FSCM,则LPRC总是运行的;若OSCCON寄存器的位SOSCEN为“1”,则辅振荡器SOSC总是保持打开。如果新时钟源不启动(例如主振荡器的晶振电路故障),则时钟切换硬件将无限期地等待新时钟源,这时OSWEN位总是为“1”。用户编程时应避免这种情况发生。新旧时钟源都是带锁相环(PLL)倍频的不能直接切换,需要先过渡到无锁相环的时钟源,然后再切换到带锁相环的新时钟源。例如由带PLL的主振荡器(XTPLL)切换到带PLL的快速RC振荡器(FRCPLL),可先切换成无锁
本文标题:PIC24系列单片机原理与开发-第3章-时钟和系统管理
链接地址:https://www.777doc.com/doc-7491645 .html