| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*********************************************************************************************************
- * 模块名称:RCU.c
- * 摘 要:RCU模块,包含各种时钟的配置
- * 当前版本:1.0.0
- * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
- * 完成日期:2021年07月01日
- * 内 容:
- * 注 意:
- **********************************************************************************************************
- * 取代版本:
- * 作 者:
- * 完成日期:
- * 修改内容:
- * 修改文件:
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 包含头文件
- *********************************************************************************************************/
- #include "Rcu.h"
- #include "gd32e230x_conf.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- unsigned int CLK_SYS;
- unsigned int CLK_AHB;
- unsigned int CLK_APB1;
- unsigned int CLK_APB2;
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- static void ConfigRCU(void); //配置RCU
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:ConfigRCU
- * 函数功能:配置RCU
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:配置的时钟如下:
- * (1)PLLCLK(PLL时钟) = 72MHz
- * (2)SYSCLK(系统时钟) = 72MHz
- * (3)HCLK(AHB总线时钟) = 72MHz
- * (4)PCLK1(APB1总线时钟)= 36MHz
- * (5)PCLK2(APB2总线时钟)= 72MHz
- *********************************************************************************************************/
- static void ConfigRCU(void)
- {
- ErrStatus HXTALStartUpStatus;
-
- rcu_deinit(); //RCU配置恢复默认值
-
- rcu_osci_on(RCU_HXTAL); //使能外部高速晶振
- HXTALStartUpStatus = rcu_osci_stab_wait(RCU_HXTAL); //等待外部晶振稳定
-
- if(HXTALStartUpStatus == SUCCESS) //外部晶振已经稳定
- {
- fmc_wscnt_set(WS_WSCNT_1);
-
- rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1); //设置高速AHB时钟(HCLK) = SYSCLK
-
- rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1); //设置高速APB2时钟(PCLK2) = AHB
-
- rcu_apb1_clock_config(RCU_APB1_CKAHB_DIV2); //设置低速APB1时钟(PCLK1) = AHB/2
-
- //设置锁相环PLL = HXTAL / 2 * 18 = 72 MHz
- rcu_hxtal_prediv_config(RCU_PLL_PREDV1);
- rcu_pll_config(RCU_PLLSRC_HXTAL, RCU_PLL_MUL9);
-
- rcu_osci_on(RCU_PLL_CK);
-
- //等待锁相环稳定
- while(0U == rcu_flag_get(RCU_FLAG_PLLSTB))
- {
- }
- //选择PLL作为系统时钟
- rcu_system_clock_source_config(RCU_CKSYSSRC_PLL);
-
- //等待PLL成功用于系统时钟
- while(0U == rcu_system_clock_source_get())
- {
- }
- }
- }
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:InitRCU
- * 函数功能:初始化RCU模块
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void InitRCU(void)
- {
- ConfigRCU(); //配置RCU
- }
- /*********************************************************************************************************
- * 函数名称:ViewRcuClock
- * 函数功能:查看各个时钟频率
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void ViewRcuClock(void)
- {
- CLK_SYS=rcu_clock_freq_get(CK_SYS); //读取系统时钟频率
- CLK_AHB=rcu_clock_freq_get(CK_AHB); //读取系统时钟频率
- CLK_APB1=rcu_clock_freq_get(CK_APB1); //读取系统时钟频率
- CLK_APB2=rcu_clock_freq_get(CK_APB2); //读取系统时钟频率
- }
|