#include "hdl_clk.h" /******************************************************************************************************** * @函数名 hdl_xtal_init * @描述 外部晶振初始化 * @参数 无 * @返回值 无 * @注意 无 ********************************************************************************************************/ #if USING_XTAL static void hdl_xtal_init(void) { stc_clock_xtal_init_t stcXtalInit; /* XTAL 引脚配置 */ GPIO_AnalogCmd(GPIO_PORT_H, GPIO_PIN_00 | GPIO_PIN_01, ENABLE); (void)CLK_XtalStructInit(&stcXtalInit); /* 配置XTAL和启用XTAL */ stcXtalInit.u8State = CLK_XTAL_ON; stcXtalInit.u8Mode = CLK_XTAL_MD_OSC; stcXtalInit.u8Drv = CLK_XTAL_DRV_ULOW; stcXtalInit.u8StableTime = CLK_XTAL_STB_2MS; (void)CLK_XtalInit(&stcXtalInit); } #endif /******************************************************************************************************** * @函数名 hdl_pll_init * @描述 锁相环倍频初始化 * @参数 无 * @返回值 无 * @注意 无 ********************************************************************************************************/ static void hdl_pll_init(void) { stc_clock_pll_init_t stcMPLLInit; (void)CLK_PLLStructInit(&stcMPLLInit); /* MPLL 配置 */ /* 16MHz/M*N = 16/2*50/2 = 200MHz */ stcMPLLInit.PLLCFGR = 0UL; stcMPLLInit.PLLCFGR_f.PLLM = (2UL - 1UL); stcMPLLInit.PLLCFGR_f.PLLN = (50UL - 1UL); stcMPLLInit.PLLCFGR_f.PLLP = (2UL - 1UL); stcMPLLInit.PLLCFGR_f.PLLQ = (2UL - 1UL); stcMPLLInit.PLLCFGR_f.PLLR = (2UL - 1UL); stcMPLLInit.u8PLLState = CLK_PLL_ON; stcMPLLInit.PLLCFGR_f.PLLSRC = CLK_PLL_SRC_HRC; /* HRC = 16MHz */ (void)CLK_PLLInit(&stcMPLLInit); } /******************************************************************************************************** * @函数名 hdl_clk_init * @描述 时钟初始化 * @参数 无 * @返回值 无 * @注意 无 ********************************************************************************************************/ void hdl_clk_init(void) { /* 解除写保护 */ LL_PERIPH_WE(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM); /* 设置时钟分频 */ CLK_SetClockDiv(CLK_BUS_CLK_ALL, (CLK_HCLK_DIV1 | CLK_EXCLK_DIV2 | CLK_PCLK0_DIV1 | CLK_PCLK1_DIV2 | \ CLK_PCLK2_DIV4 | CLK_PCLK3_DIV4 | CLK_PCLK4_DIV2)); /* SRAM初始化包括读/写等待周期设置 */ SRAM_SetWaitCycle(SRAM_SRAM_ALL, SRAM_WAIT_CYCLE1, SRAM_WAIT_CYCLE1); SRAM_SetWaitCycle(SRAM_SRAMH, SRAM_WAIT_CYCLE0, SRAM_WAIT_CYCLE0); /* 闪存读取等待周期设置 */ EFM_SetWaitCycle(EFM_WAIT_CYCLE5); /* XTAL 初始化 */ // hdl_xtal_init(); /* XTAL32 初始化 */ /* MPLL 初始化 */ hdl_pll_init(); /* enable LRC */ /* enable HRC */ /* 3 cycles for 126MHz ~ 200MHz */ GPIO_SetReadWaitCycle(GPIO_RD_WAIT3); /* 切换驱动能力 */ PWC_HighSpeedToHighPerformance(); EFM_DataCacheResetCmd(ENABLE); EFM_DataCacheResetCmd(DISABLE); /* Enable cache */ EFM_CacheCmd(ENABLE); /* 使能写保护 */ LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_GPIO | LL_PERIPH_SRAM); /* 设置系统时钟源 */ CLK_SetSysClockSrc(CLK_SYSCLK_SRC_PLL); /* 使能systick */ (void)SysTick_Init(1000U); } void hdl_delay_us(uint16_t us) { for(int i=0;i