tag 标签: 时钟配置

相关博文
  • 热度 18
    2012-8-4 17:27
    3206 次阅读|
    0 个评论
      调试LPC1768, NXP的库好像不如Luminary的好用(大家都这么说,也就跟着人云亦云了)。对照LPC1768的手册看了看Keil例程的PLL0配置过程,记录如下:                #if (CLOCK_SETUP)                       /* Clock Setup                        */   LPC_SC-SCS       = SCS_Val;          // 启用外部主时钟   if (SCS_Val (1 5)) {             /* If Main Oscillator is enabled      */     while ((LPC_SC-SCS (16)) == 0);/* Wait for Oscillator to be ready    */   } //PLL倍频出来的时钟送给CPU前的分频,CCLKCFG_Val=3,为4分频   LPC_SC-CCLKCFG   = CCLKCFG_Val;      /* Setup Clock Divider                */   LPC_SC-PCLKSEL0  = PCLKSEL0_Val;     /* Peripheral Clock Selection         */   LPC_SC-PCLKSEL1  = PCLKSEL1_Val;   LPC_SC-CLKSRCSEL = CLKSRCSEL_Val;    /* Select Clock Source for PLL0       */ #if (PLL0_SETUP) //PLL0CFG_Val = 0x00050063, 5为pre-div的值既N,所以除数为N+1=6 // 0x63为乘数M,M+1=100,记得要把16进制换算为10进制 //Fcco = 2*100*12/6 = 400,然后再除以CPU clock的4,即该设置主频为100M   LPC_SC-PLL0CFG   = PLL0CFG_Val;   LPC_SC-PLL0CON   = 0x01;             /* PLL0 Enable                        */ //确认序列   LPC_SC-PLL0FEED  = 0xAA;   LPC_SC-PLL0FEED  = 0x55;   while (!(LPC_SC-PLL0STAT (126)));/* Wait for PLOCK0                    */   LPC_SC-PLL0CON   = 0x03;             /* PLL0 Enable Connect              */   LPC_SC-PLL0FEED  = 0xAA;   LPC_SC-PLL0FEED  = 0x55; #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 (110)));/* Wait for PLOCK1                    */   LPC_SC-PLL1CON   = 0x03;             /* PLL1 Enable Connect              */   LPC_SC-PLL1FEED  = 0xAA;   LPC_SC-PLL1FEED  = 0x55; #else   LPC_SC-USBCLKCFG = USBCLKCFG_Val;    /* Setup USB Clock Divider            */ #endif   LPC_SC-PCONP     = PCONP_Val;        /* Power Control for Peripherals      */   LPC_SC-CLKOUTCFG = CLKOUTCFG_Val;    /* Clock Output Configuration         */ #endif   /* Determine clock frequency according to clock register values             */   if (((LPC_SC-PLL0STAT 24)3)==3) {/* If PLL0 enabled and connected      */     switch (LPC_SC-CLKSRCSEL 0x03) {       case 0:                           /* Internal RC oscillator = PLL0     */       case 3:                           /* Reserved, default to Internal RC   */         SystemFrequency = (IRC_OSC *                           ((2 * ((LPC_SC-PLL0STAT 0x7FFF) + 1)))  /                           (((LPC_SC-PLL0STAT 16) 0xFF) + 1)    /                           ((LPC_SC-CCLKCFG 0xFF)+ 1));         break;       case 1:                           /* Main oscillator = PLL0            */      //待Pll锁定和连接后PLL0STAT中有M和N,可以计算出实际频率         SystemFrequency = (OSC_CLK *                           ((2 * ((LPC_SC-PLL0STAT 0x7FFF) + 1)))  /                           (((LPC_SC-PLL0STAT 16) 0xFF) + 1)    /                           ((LPC_SC-CCLKCFG 0xFF)+ 1));         break;       case 2:                           /* RTC oscillator = PLL0             */         SystemFrequency = (RTC_CLK *                           ((2 * ((LPC_SC-PLL0STAT 0x7FFF) + 1)))  /                           (((LPC_SC-PLL0STAT 16) 0xFF) + 1)    /                           ((LPC_SC-CCLKCFG 0xFF)+ 1));         break;     }   } else {     switch (LPC_SC-CLKSRCSEL 0x03) {       case 0:                           /* Internal RC oscillator = PLL0     */       case 3:                           /* Reserved, default to Internal RC   */         SystemFrequency = IRC_OSC / ((LPC_SC-CCLKCFG 0xFF)+ 1);         break;       case 1:                           /* Main oscillator = PLL0            */         SystemFrequency = OSC_CLK / ((LPC_SC-CCLKCFG 0xFF)+ 1);         break;       case 2:                           /* RTC oscillator = PLL0             */         SystemFrequency = RTC_CLK / ((LPC_SC-CCLKCFG 0xFF)+ 1);         break;     }   }
相关资源