dsPIC33FJ256GP710——弄懂时钟

本项目为- 老化车

先看系统时钟框图

dsPIC33FJ256GP710——弄懂时钟_第1张图片 振荡器系统框图

先研究两个振荡器配置寄存器

分别是:

  1.  FOSCSEL:振荡器源选择寄存器
  2.  FOSC:振荡器配置寄存器

他两的值可以从文件中找到

/*
*********************************************************************************************************
*                                       MPLAB CONFIGURATION MACROS

#define GSS_OFF              0xFFFF
#define GWRP_OFF             0xFFFF

#define FNOSC_PRIPLL         0xFFFB
#define IESO_OFF             0xFF7F

#define FCKSM_CSDCMD         0xFFBF
#define POSCMD_EC            0xFFFC
#define OSCIOFNC_ON          0xFFFB

#define ICS_PGD2             0xFFFE
#define JTAGEN_OFF           0xFFDF

#define FWDTEN_OFF           0xFF7F
*********************************************************************************************************
*/
_FGS(GSS_OFF & GWRP_OFF);                     //0xFFFF & 0xFFFF          = 0xFFFF
_FOSCSEL(FNOSC_PRIPLL& IESO_OFF);             //0xFFFB & 0xFF7F          = 0xFF7B
_FOSC(FCKSM_CSDCMD & POSCMD_EC & OSCIOFNC_ON);//0xFFBF & 0xFFFC & 0xFFFB = 0xFFB8
_FICD(ICS_PGD2&JTAGEN_OFF);                   //0xFFFF & 0xFFDF          = 0xFFDF
_FWDT(FWDTEN_OFF);                            //0xFF7F 
  

 接下来看三个振荡器特殊功能控制寄存器

  1. OSCCON:振荡器控制寄存器
  2. CLKDIV  :时钟分频比寄存器
  3. PLLFBD : PLL 反馈分频比寄存器

OSCCON找不到其定义,只能在文件中找到如下宏定义,所以只好去看其寄存器了

/*
*********************************************************************************************************
*                                       CHIP SPECIFIC MACROS
*********************************************************************************************************
*/
                                                                        /* OSCCON register bits  */
#define  XT_HS_EC_PLL_SEL           (CPU_INT16U)(3 <<  0)
#define  COSC_MASK                  (CPU_INT16U)(7 << 12) 
#define  LOCK                       (CPU_INT16U)(1 <<  5)
#define  OSWEN                      (CPU_INT16U)(1 <<  0)

View =》 File Register 的观察结果,在其中找到了寄存器 OSCCON 的值

dsPIC33FJ256GP710——弄懂时钟_第2张图片  File Register

 

CLKDIV、PLLBD  能直接找到其赋值语句,也是在文件中

/*
*********************************************************************************************************
*                                      BSP_PLL_Init()
*
* Description : This function configures and enables the PLL with the external oscillator
*               selected as the input clock to the PLL.
*
* Notes       : 1) The PLL output frequency is calculated by FIN * (M / (N1 * N2)).
*               2) FIN is the PLL input clock frequency, defined in bsp.h as
*                  CPU_PRIMARY_OSC_FR. This is the same as the external primary
*                  oscillator on the Explorer 16 Evaluation Board.
*               3) M is the desired PLL multiplier
*               4) N1 is the divider for FIN before FIN enters the PLL block (Pre-Divider)
*               5) N2 is the PLL output divider (Post-Divider)
*
* Summary     :    The PLL is configured as (8MHZ) * (40 / (2 * 2)) = 80MHZ
*                  The processor clock is (1/2) of the PLL output.
*                  Performance = 40 MIPS.
*********************************************************************************************************
*/

static  void  CPU_PLL_Init(void)
{
    PLLFBD = 38;  /* Set the Multiplier (M) to 40 (2 added automatically)  */
    CLKDIV = 0;   /* Clear the PLL Pre Divider bits, N1 = N2 = 2           */
}

 

下面是这五个寄存器的详细信息

1、FOSCSEL:振荡器源选择寄存器

dsPIC33FJ256GP710——弄懂时钟_第3张图片 FOSCSEL:振荡器源选择寄存器

2、FOSC:振荡器配置寄存器

dsPIC33FJ256GP710——弄懂时钟_第4张图片 标题

3、OSCCON:振荡器控制寄存器

dsPIC33FJ256GP710——弄懂时钟_第5张图片 OSCCON:振荡器控制寄存器

4、CLKDIV:时钟分频比寄存器

dsPIC33FJ256GP710——弄懂时钟_第6张图片 CLKDIV:时钟分频比寄存器

5、PLLFBD: PLL 反馈分频比寄存器

dsPIC33FJ256GP710——弄懂时钟_第7张图片 PLLFBD: PLL 反馈分频比寄存器

 

顺水推舟

知道了以上信息,就可以得到系统时钟 (FOSC)了

dsPIC33FJ256GP710——弄懂时钟_第8张图片 dsPIC33F PLL 框图

因为采用的是外部时钟模式,所以Fin=8MHz

POSCMD<1:0>=00;//00 = EC (外部时钟)模式

dsPIC33FJ256GP710——弄懂时钟_第9张图片 FOSC 计算

 

你可能感兴趣的:(项目经验)