123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /************************************************************************************************/
- /**
- * @file ciu32f003_std_rcc.c
- * @author MCU Ecosystem Development Team
- * @brief RCC STD库驱动。
- * 实现RCC时钟频率获取等API。
- *
- *
- **************************************************************************************************
- * @attention
- * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
- *
- **************************************************************************************************
- */
- /************************************************************************************************/
- /**
- * @addtogroup CIU32F003_STD_Driver
- * @{
- */
- /**
- * @addtogroup RCC
- * @{
- *
- */
- /************************************************************************************************/
- /*------------------------------------------includes--------------------------------------------*/
- #include "ciu32f003_std.h"
- /*-------------------------------------------functions------------------------------------------*/
- /************************************************************************************************/
- /**
- * @addtogroup RCC_External_Functions
- * @{
- *
- */
- /************************************************************************************************/
- /**
- * @brief 获取当前系统时钟频率(SYSCLK)
- * @retval 返回系统时钟频率(Hz)
- */
- uint32_t std_rcc_get_sysclkfreq(void)
- {
- uint32_t frequency = 0;
-
- /* 获取当前系统时钟源 */
- switch(std_rcc_get_sysclk_source())
- {
- /* 系统时钟为EXTCLK,默认为8MHz */
- case RCC_SYSCLK_SRC_STATUS_EXTCLK:
- {
- frequency = EXTCLK_VALUE;
- }break;
-
- /* 系统时钟为RCHDIV3 */
- case RCC_SYSCLK_SRC_STATUS_RCHDIV3:
- {
- frequency = RCH_VALUE/3;
- }break;
-
- /* 系统时钟为RCH */
- case RCC_SYSCLK_SRC_STATUS_RCH:
- {
- frequency = RCH_VALUE;
- }break;
-
- /* 系统时钟为RCL */
- case RCC_SYSCLK_SRC_STATUS_RCL:
- {
- frequency = RCL_VALUE;
- }break;
-
- /* 系统时钟为RCHDIV6 */
- case RCC_SYSCLK_SRC_STATUS_RCHDIV6:
- default:
- {
- frequency = RCH_VALUE/6;
- }break;
- }
- return frequency;
- }
- /**
- * @brief 获取AHB时钟频率(HCLK)
- * @retval 返回HCLK时钟频率(Hz)
- */
- uint32_t std_rcc_get_hclkfreq(void)
- {
- uint32_t frequency = 0;
- uint32_t tmp, hclk_div;
-
- tmp = std_rcc_get_sysclkfreq();
-
- /* 获取AHB分频因子 */
- hclk_div = std_rcc_get_ahbdiv()>>RCC_CFG_HPRE_POS;
- frequency = tmp >> hclk_div;
- return frequency;
- }
- /**
- * @brief 获取APB时钟频率(PCLK)
- * @retval 返回PCLK1时钟频率(Hz)
- */
- uint32_t std_rcc_get_pclkfreq(void)
- {
- uint32_t frequency = 0;
- uint32_t tmp, pclk_div;
-
- tmp = std_rcc_get_hclkfreq();
-
- /* 获取APB分频因子 */
- pclk_div = std_rcc_get_apbdiv()>>RCC_CFG_PPRE_POS;
-
- if (pclk_div < 3)
- {
- frequency = tmp;
- }
- else
- {
- pclk_div -= 3;
- frequency = tmp >> pclk_div;
- }
-
- return frequency;
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
|