void InitSysCtrl(void)
{
DisableDog();//关闭看门狗
InitPll(0xA);//初始化PLL时钟
InitPeripheralClocks();//初始化外设时钟
}
void InitPll(Uint16 val)//初始化PLL时钟
{
volatile Uint16 iVol;
if (SysCtrlRegs.PLLCR.bit.DIV != val)
{
EALLOW;
//设置系统时钟为150Mhz
SysCtrlRegs.PLLCR.bit.DIV = val;//CLKIN=(OSCCLK*10.0)/2=(30*10)/2=150Mhz
EDIS;
DisableDog();
for(iVol= 0; iVol< ( (131072/2)/12 ); iVol++)//PLL使能完成需要等待一段时间
{
}
}
}
void InitPeripheralClocks(void)//初始化外设时钟
{
EALLOW;
SysCtrlRegs.HISPCP.all = 0x0001;//高速时钟定标HSPCLK=SYSCLKOUT/(HISPCP*2)=150/(1*2)=75Mhz
SysCtrlRegs.LOSPCP.all = 0x0002;//低速时钟定标LSPCLK=SYSCLKOUT/(LOSPCP*2)=150/(2*2)=37.5Mhz
// 使能一些外设时钟:EVA,EVB,SCIA, SCIB ,MCBSP,SPI,ECAN,ADC的时钟被使能
// 通常为了降低功耗,没用到的外设,时钟关闭
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
EDIS;
}