单片机 > 单片机程序设计 > 详情

PIC16位单片机——彻底弄懂时钟

发布时间:2020-08-21 发布时间:
|

一直以来写程序都是看参考资料和书,这次的16位单片劫dsPIC33EP32GP502没有一点资料。因此趁机也好好深入学习一下!首先看振荡器的选择吧。


首先看一下时钟框图:
 

我们使用的是外部晶振,所以配置为HS,FCY是CPU时钟,FP是外设时钟,FCY=FP(除打盹模式外)。FCY=Fosc/2。也就是cpu时钟是晶振频率的1/2。下面还有分频。DOZE<2:0>:011 = FCY 被 8 分频 (默认)处理器时钟分频比选择位。


因此实际的FCY=0.5MHz(使用8M的外部晶振,并八分频8/2/8=0.5MHz)。

 

看一下振荡器选择配置位的说明:

  这里我们需要看的是FOSCSEL配置位 第二列是寄存器地址,需要设置的是IESO<7>和FNOSC<2:0>

看一下头文件p33EP32GP502.h里面的说明:

/* Register FOSCSEL (0x57f8)                               */

 

 

extern __attribute__((space(prog))) int _FOSCSEL;

#define _FOSCSEL(x) __attribute__((section("__FOSCSEL.sec"),space(prog))) int _FOSCSEL = (x);

 

 

/*

** Only one invocation of FOSCSEL should appear in a project,

** at the top of a C source file (outside of any function).

**

** The following constants can be used to set FOSCSEL.

** Multiple options may be combined, as shown:

**

** _FOSCSEL( OPT1_ON & OPT2_OFF & OPT3_PLL )

**

**   Oscillator Source Selection:

**     FNOSC_FRC            Internal Fast RC (FRC)

**     FNOSC_FRCPLL         Fast RC Oscillator with divide-by-N with PLL module (FRCPLL)

**     FNOSC_PRI            Primary Oscillator (XT, HS, EC)

**     FNOSC_PRIPLL         Primary Oscillator with PLL module (XT + PLL, HS + PLL, EC + PLL)

**     FNOSC_LPRC           Low-Power RC Oscillator (LPRC)

**     FNOSC_FRCDIVN        Internal Fast RC (FRC) Oscillator with postscaler

**

**   Two-speed Oscillator Start-up Enable bit:

**     IESO_OFF             Start up with user-selected oscillator source

**     IESO_ON              Start up device with FRC, then switch to user-selected oscillator source

**

*/

 

 

#define FNOSC_FRC            0xFFF8

#define FNOSC_FRCPLL         0xFFF9

#define FNOSC_PRI            0xFFFA

#define FNOSC_PRIPLL         0xFFFB

#define FNOSC_LPRC           0xFFFD

#define FNOSC_FRCDIVN        0xFFFF

 

 

#define IESO_OFF             0xFF7F

#define IESO_ON              0xFFFF


由头文件得知

1:Register FOSCSEL (0x57f8),也就是寄存器地址是0x57f8,和表格一致。

2:_FOSCSEL(FNOSC_PRI&IESO_OFF); 我们在程序开头由此句来声明我们的配置位是0XFFFA&0XFF7F=0XFF7A

 也就是FOSCSEL=0XFF7A  根据寄存器说明得知我们的配置是外部HS振荡器并使用用户选择的振荡器源启动器件

3:配置位只是说明使用的振荡器,并不设置分频比DOZE。因此DOZE还是默认的8分频。

 

总结:配置时钟有以下几个方面:

1:配置相应的配置位选择时钟源是内部时钟还是外部晶振等。

2:配置相应的寄存器选择分频比。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM基础知识八