mcuinit.c

来自「只是一个基于飞思卡尔十六位单片机编写的C一个例程SPI」· C语言 代码 · 共 38 行

C
38
字号
//[MCUInit.c]DG128芯片初始化函数-------------------------------------------*
//功  能:                                                                  *
//    芯片初始化设置:通过设置CLKSEL寄存器,确定内部总线的时钟源;通过PLL编  *
//    程,设置PLLCLK;通过设置INTCR和COPCTL寄存器,分别决定是否允许IRQ中断和  *
//    看门狗。                                                             *
//    (1)外部晶振= 4Mhz BusClock=25Mhz                                     *
//    (2)使能IRQ中断                                                       *
//    (3)使能看门狗                                                        *
//参  数:无                                                                *
//返  回:无                                                                *
//-------------------------------------------------------------------------*

//头文件
#include "MCUInit.h"    //芯片初始化头文件

void MCUInit(void)
{
    //(1)CLKSEL的第7位置0,选择系统时钟源为OSCCLK
    //在PLL程序执行前,内部总线频率=OSCCLK/2
    //clksel.7(PLL选择位)决定内部总线时钟来源
    CLKSEL = 0x7F;      //此时:BusClock=OSCCLK/2
    //(2)禁止PLL
    PLLCTL = 0xB3;//PLLCTL.6(pllon)设为0;先关闭PLL
    //(3)根据需要的时钟频率设置SYNR和REFDV寄存器
    //计算公式:PLLCLK=2*OSCCLK*((SYNR+1)/(REFDV+1))
    SYNR = 0x18;         //对PLLCLK增频的因子
    REFDV = 0x07;        //对PLLCLK分频的因子
    //(4)使能PLL
    PLLCTL |= (1<<6);    //PLLCTL.6(pllon)设为1;开PLL
    //(5)通过判断CRGFLG寄存器的LOCK位,确定PLL是否稳定 
    while ((CRGFLG&0x08) == 0x00);
    //(6)时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
    CLKSEL |= (1<<7);    //若Foscclk=4Mhz,本句执行后:Fpllclk=25Mhz
    //(7)设置是否允许看门狗
    INTCR  = 0x40;       //IRQCR.6(IRQEN) =1使能IRQ中断 
    COPCTL = 0x87;       //COPCTL.2-0(cr2:cr0) =111使能看门狗
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?