如下图:需要注意几个时钟的概念,
#define CLOCK_SETUP 1 #define MAIN_PLL_SETUP 1 #define MAIN_CLKSRCSEL_Val 0x00000001 #define MAIN_PLL_M_Val 0x00000003 #define MAIN_PLL_P_Val 0x00000001 #define SYS_AHB_DIV_Val 1 /* 1 through 255, typical is 1 or 2 or 4 */ #define XTAL (12000000UL) /* Oscillator frequency */ #define OSC_CLK ( XTAL) /* Main oscillator frequency */ #define IRC_OSC (12000000UL) /* Internal RC oscillator frequency */ #define WDT_OSC ( 250000UL) /* WDT oscillator frequency */ uint32_t ClockSource = IRC_OSC; uint32_t SystemFrequency = IRC_OSC; /*!< System Clock Frequency (Core Clock) */ uint32_t SystemAHBFrequency = IRC_OSC; void Main_PLL_Setup ( void ) { uint32_t regVal; ClockSource = OSC_CLK; LPC_SYSCON->SYSPLLCLKSEL = MAIN_CLKSRCSEL_Val; /* Select system OSC--系统振荡器 */ LPC_SYSCON->SYSPLLCLKUEN = 0x01; /* Update clock source */ LPC_SYSCON->SYSPLLCLKUEN = 0x00; /* toggle Update register once */ LPC_SYSCON->SYSPLLCLKUEN = 0x01; while ( !(LPC_SYSCON->SYSPLLCLKUEN & 0x01) ); /* Wait until updated */ regVal = LPC_SYSCON->SYSPLLCTRL; regVal &= ~0x1FF; LPC_SYSCON->SYSPLLCTRL = (regVal | (MAIN_PLL_P_Val<<5) | MAIN_PLL_M_Val);/* P=1, M=4 FCLKOUT=12*4=48Mhz */ /* Enable main system PLL, main system PLL bit 7 in PDRUNCFG. */ LPC_SYSCON->PDRUNCFG &= ~(0x1<<7); /* PDRUNCFG第七位写0,即系统PLL上电 */ while ( !(LPC_SYSCON->SYSPLLSTAT & 0x01) ); /* Wait until it's locked 确定PLL锁定以后向下执行 */ LPC_SYSCON->MAINCLKSEL = 0x03; /* Select PLL clock output--选择PLL输出作为主时钟 */ LPC_SYSCON->MAINCLKUEN = 0x01; /* Update MCLK clock source --允许更新主时钟*/ LPC_SYSCON->MAINCLKUEN = 0x00; /* Toggle update register once */ LPC_SYSCON->MAINCLKUEN = 0x01; while ( !(LPC_SYSCON->MAINCLKUEN & 0x01) ); /* Wait until updated 确定主时钟锁定以后向下执行 */ LPC_SYSCON->SYSAHBCLKDIV = SYS_AHB_DIV_Val; /* SYS AHB clock, typical is 1 or 2 or 4 --SYSAHBCLKDIV的值为1,即不分频 使AHB时钟设置为48Mhz */ #if MAIN_PLL_SETUP SystemFrequency = ClockSource * (MAIN_PLL_M_Val+1); #else SystemFrequency = ClockSource; #endif SystemAHBFrequency = (uint32_t)(SystemFrequency/SYS_AHB_DIV_Val); return; } /** * Initialize the system * * @param none * @return none * * @brief Setup the microcontroller system. * Initialize the System and update the SystemFrequency variable. */ void SystemInit (void) { uint32_t i; #ifdef __DEBUG_RAM LPC_SYSCON->SYSMEMREMAP = 0x1; /* remap to internal RAM */ #else #ifdef __DEBUG_FLASH LPC_SYSCON->SYSMEMREMAP = 0x2; /* remap to internal flash */ #endif #endif #if (CLOCK_SETUP) /* Clock Setup */ /* bit 0 default is crystal bypass, bit1 0=0~20Mhz crystal input, 1=15~50Mhz crystal input. */ LPC_SYSCON->SYSOSCCTRL = 0x00; /* main system OSC run is cleared, bit 5 in PDRUNCFG register */ LPC_SYSCON->PDRUNCFG &= ~(0x1<<5); /* PDRUNCFG的第五位写0,即系统系统振荡器上电 */ /* Wait 200us for OSC to be stablized, no status indication, dummy wait. */ for ( i = 0; i < 0x100; i++ ); #if (MAIN_PLL_SETUP) Main_PLL_Setup(); #endif #endif /* endif CLOCK_SETUP */ /* System clock to the IOCON needs to be enabled or most of the I/O related peripherals won't work. */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); //使能IO模块的时钟 return; }
上一篇:NXP_LPC1114延时函数集合
下一篇:Tiny6410开发小小总结下
推荐阅读最新更新时间:2024-03-16 14:24
设计资源 培训 开发板 精华推荐
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位