初始版本
This commit is contained in:
+132
@@ -0,0 +1,132 @@
|
||||
#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<us;i++)
|
||||
{
|
||||
for(int j=0;j<35;j++)
|
||||
{
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hdl_delay_ms(uint16_t ms)
|
||||
{
|
||||
for(int i=0;i<ms;i++)
|
||||
{
|
||||
for(int j=0;j<13000;j++)
|
||||
{
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user