DSP

DSP的InitSysCtrl()函数详谈

2019-07-13 09:58发布

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;
}