LCP4078时钟配置

阅读: 评论:0

LCP4078时钟配置

LCP4078时钟配置

void SystemInit (void)
{
#ifndef __CODE_RED
#ifdef CORE_M4
fpu_init();
#endif
#endif

#if (CLOCK_SETUP)                       /* Clock Setup                        */LPC_SC->SCS       = SCS_Val;			//#define SCS_Val  0x00000020 主振荡器被使能,且在正确的外部电路连接到XTAL1 和XTAL2引脚的情况下启动。if (SCS_Val & (1 << 5)) {             /* If Main Oscillator is enabled      */		//上面一条语句已使能Oscillator while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready    */		//等待Oscillator稳定标志位置1}

  LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;    /* Select Clock Source for sysclk/PLL0*/	//#define CLKSRCSEL_Val   0x00000001



 #if (PLL0_SETUP)LPC_SC->PLL0CFG   = PLL0CFG_Val;		//#define PLL0CFG_Val  0x00000009		12M*(9+1)=120MLPC_SC->PLL0CON   = 0x01;             /* PLL0 Enable                        */LPC_SC->PLL0FEED  = 0xAA;LPC_SC->PLL0FEED  = 0x55;while (!(LPC_SC->PLL0STAT & (1<<10)));/* Wait for PLOCK0                    */		//PLOCK
#endif#if (PLL1_SETUP)LPC_SC->PLL1CFG   = PLL1CFG_Val;LPC_SC->PLL1CON   = 0x01;             /* PLL1 Enable                        */LPC_SC->PLL1FEED  = 0xAA;LPC_SC->PLL1FEED  = 0x55;while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1                    */
#endif


LPC_SC->CCLKSEL   = CCLKSEL_Val;      /* Setup Clock Divider                */		//#define CCLKSEL_Val   0x00000101  120M/1=120MLPC_SC->USBCLKSEL = USBCLKSEL_Val;    /* Setup USB Clock Divider            */LPC_SC->EMCCLKSEL = EMCCLKSEL_Val;    /* EMC Clock Selection                */LPC_SC->SPIFICLKSEL  = SPIFICLKSEL_Val;  /* SPIFI Clock Selection              */LPC_SC->PCLKSEL   = PCLKSEL_Val;      /* Peripheral Clock Selection         */		//#define PCLKSEL_Val   0x00000002   120M/2=60MLPC_SC->PCONP     = PCONP_Val;        /* Power Control for Peripherals      */LPC_SC->CLKOUTCFG = CLKOUTCFG_Val;    /* Clock Output Configuration         */
#endif

 LPC_SC->PBOOST 	|= 0x03;			/* Power Boost control				*/			//120M以上开启

 #if (FLASH_SETUP == 1)                  /* Flash Accelerator Setup            */LPC_SC->FLASHCFG  = FLASHCFG_Val|0x03A;		//#define FLASHCFG_Val   0x00005000     //120M
#endif
#ifndef __CODE_RED
#ifdef  __RAM_MODE__SCB->VTOR  = 0x10000000 & 0x3FFFFF80;
#elseSCB->VTOR  = 0x00000000 & 0x3FFFFF80;
#endif
#endifSystemCoreClockUpdate();
}

void SystemCoreClockUpdate (void)            /* Get Core Clock Frequency      */
{/* Determine clock frequency according to clock register values             */if ((LPC_SC->CCLKSEL &0x100) == 0) {            /* cclk = sysclk    */if ((LPC_SC->CLKSRCSEL & 0x01) == 0) {    /* sysclk = irc_clk */SystemCoreClock = __CLK_DIV(IRC_OSC , (LPC_SC->CCLKSEL & 0x1F));PeripheralClock = __CLK_DIV(IRC_OSC , (LPC_SC->PCLKSEL & 0x1F));EMCClock        = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));}else {                                        /* sysclk = osc_clk */if ((LPC_SC->SCS & 0x40) == 0) {SystemCoreClock = 0;                      /* this should never happen! */PeripheralClock = 0;EMCClock        = 0;}else {SystemCoreClock = __CLK_DIV(OSC_CLK , (LPC_SC->CCLKSEL & 0x1F));PeripheralClock = __CLK_DIV(OSC_CLK , (LPC_SC->PCLKSEL & 0x1F));EMCClock        = (SystemCoreClock / ((LPC_SC->EMCCLKSEL & 0x01)+1));}}}else {                                          /* cclk = pll_clk */if ((LPC_SC->PLL0STAT & 0x100) == 0) {        /* PLL0 not enabled */SystemCoreClock = 0;                      /* this should never happen! */PeripheralClock = 0;EMCClock 		  = 0;}else {if ((LPC_SC->CLKSRCSEL & 0x01) == 0) {    /* sysclk = irc_clk */uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;SystemCoreClock = __CLK_DIV(IRC_OSC * mul , cpu_div);PeripheralClock = __CLK_DIV(IRC_OSC * mul , per_div);EMCClock        = SystemCoreClock / emc_div;}else {                                        /* sysclk = osc_clk */if ((LPC_SC->SCS & 0x40) == 0) {SystemCoreClock = 0;                      /* this should never happen! */PeripheralClock = 0;EMCClock 		  = 0;}else {uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);		//PLL0STAT=0x509, bit0~4, mul = 0x509 & 0x1F + 1 =  9 + 1 = 10uint8_t cpu_div = (LPC_SC->CCLKSEL & 0x1F);			//CCLKSEL=0x101, bit0~4, cpu_div = 0x101 & 0x1F = 1uint8_t per_div = (LPC_SC->PCLKSEL & 0x1F);			//PCLKSEL=0x2, bit0~4, per_div = 0x2 & 0x1F = 2   可取1~4uint8_t emc_div = (LPC_SC->EMCCLKSEL & 0x01)+1;
//#define XTAL        (12000000UL)        /* Oscillator frequency               */
//#define OSC_CLK     (      XTAL)        /* Main oscillator frequency          */
//#define __CLK_DIV(x,y) (((y) == 0) ? 0: (x)/(y))	SystemCoreClock = __CLK_DIV(OSC_CLK * mul , cpu_div);	//SystemCoreClock = 12M*10/1 = 120MPeripheralClock = __CLK_DIV(OSC_CLK * mul , per_div);		//PeripheralClock = 12M*10/2 = 60MEMCClock        = SystemCoreClock / emc_div;}}}}/* ---update USBClock------------------*/if(LPC_SC->USBCLKSEL & (0x01<<8))//Use PLL0 as the input to the USB clock divider{switch (LPC_SC->USBCLKSEL & 0x1F){case 0:USBClock = 0; //no clock will be provided to the USB subsystembreak;case 4:case 6:{uint8_t mul = ((LPC_SC->PLL0STAT & 0x1F) + 1);uint8_t usb_div = (LPC_SC->USBCLKSEL & 0x1F);if(LPC_SC->CLKSRCSEL & 0x01)	//pll_clk_in = main_oscUSBClock = OSC_CLK * mul / usb_div;else //pll_clk_in = irc_clkUSBClock = IRC_OSC * mul / usb_div;}break;default:USBClock = 0;  /* this should never happen! */}}else if(LPC_SC->USBCLKSEL & (0x02<<8))//usb_input_clk = alt_pll (pll1){if(LPC_SC->CLKSRCSEL & 0x01)	//pll1_clk_in = main_oscUSBClock = (OSC_CLK * ((LPC_SC->PLL1STAT & 0x1F) + 1));else //pll1_clk_in = irc_clkUSBClock = (IRC_OSC * ((LPC_SC->PLL0STAT & 0x1F) + 1));}elseUSBClock = 0; /* this should never happen! */
}

本文发布于:2024-01-29 13:25:56,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650596015591.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时钟
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23