📄 mcuinit.c
字号:
//[MCUInit.c]DG128芯片初始化函数-------------------------------------------*
//功 能: *
// 芯片初始化设置:通过设置CLKSEL寄存器,确定内部总线的时钟源;通过PLL编 *
// 程,设置PLLCLK;通过设置INTCR和COPCTL寄存器,分别决定是否允许IRQ中断和 *
// 看门狗。 *
// (1)外部晶振=9.8304Mhz BusClock=19.6608Mhz *
// (2)禁止IRQ中断 *
// (3)禁止看门狗 *
//参 数:无 *
//返 回:无 *
//-------------------------------------------------------------------------*
//头文件
#include "MCUInit.h" //芯片初始化头文件
void MCUInit(void)
{
//(1)禁止总中断
DISABLE_INTERRUPTS;
//(2)CLKSEL的第7位置0,选择系统时钟源为OSCCLK
//在PLL程序执行前,内部总线频率=OSCCLK/2
//clksel.7(PLL选择位)决定内部总线时钟来源
//=O,BusClock=OSCCLK/2; =1,BusClock=PLLCLK/2
CLKSEL &= 0x7f; //此时:BusClock=OSCCLK/2
//(3)禁止PLL
PLLCTL &= 0xbf;//PLLCTL.6(pllon)设为0;先关闭PLL
//(4)根据需要的时钟频率设置SYNR和REFDV寄存器
//计算公式:PLLCLK=2*OSCCLK*((SYNR+1)/(REFDV+1))
SYNR = 0x01; //对PLLCLK增频的因子
REFDV = 0x00; //对PLLCLK分频的因子
//(5)打开PLL
PLLCTL |= (1<<6); //PLLCTL.6(pllon)设为1;开PLL
//(6)通过判断CRGFLG寄存器的LOCK位,确定PLL是否稳定
while ((CRGFLG&0x08) == 0x00);
//(7)时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
CLKSEL |= (1<<7); //本句执行后:BusClock=PLLCLK/2
//(8)设置是否允许IRQ中断、是否允许看门狗
INTCR &= 0xbf; //IRQCR.6(IRQEN) =0禁止IRQ中断(默认开)
COPCTL = 0x00; //COPCTL.2-0(cr2:cr0) =000禁止看门狗
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -