ciu32f003_std_rcc(2).c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_rcc.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief RCC STD库驱动。
  6. * 实现RCC时钟频率获取等API。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /************************************************************************************************/
  16. /**
  17. * @addtogroup CIU32F003_STD_Driver
  18. * @{
  19. */
  20. /**
  21. * @addtogroup RCC
  22. * @{
  23. *
  24. */
  25. /************************************************************************************************/
  26. /*------------------------------------------includes--------------------------------------------*/
  27. #include "ciu32f003_std.h"
  28. /*-------------------------------------------functions------------------------------------------*/
  29. /************************************************************************************************/
  30. /**
  31. * @addtogroup RCC_External_Functions
  32. * @{
  33. *
  34. */
  35. /************************************************************************************************/
  36. /**
  37. * @brief 获取当前系统时钟频率(SYSCLK)
  38. * @retval 返回系统时钟频率(Hz)
  39. */
  40. uint32_t std_rcc_get_sysclkfreq(void)
  41. {
  42. uint32_t frequency = 0;
  43. /* 获取当前系统时钟源 */
  44. switch(std_rcc_get_sysclk_source())
  45. {
  46. /* 系统时钟为EXTCLK,默认为8MHz */
  47. case RCC_SYSCLK_SRC_STATUS_EXTCLK:
  48. {
  49. frequency = EXTCLK_VALUE;
  50. }break;
  51. /* 系统时钟为RCHDIV3 */
  52. case RCC_SYSCLK_SRC_STATUS_RCHDIV3:
  53. {
  54. frequency = RCH_VALUE/3;
  55. }break;
  56. /* 系统时钟为RCH */
  57. case RCC_SYSCLK_SRC_STATUS_RCH:
  58. {
  59. frequency = RCH_VALUE;
  60. }break;
  61. /* 系统时钟为RCL */
  62. case RCC_SYSCLK_SRC_STATUS_RCL:
  63. {
  64. frequency = RCL_VALUE;
  65. }break;
  66. /* 系统时钟为RCHDIV6 */
  67. case RCC_SYSCLK_SRC_STATUS_RCHDIV6:
  68. default:
  69. {
  70. frequency = RCH_VALUE/6;
  71. }break;
  72. }
  73. return frequency;
  74. }
  75. /**
  76. * @brief 获取AHB时钟频率(HCLK)
  77. * @retval 返回HCLK时钟频率(Hz)
  78. */
  79. uint32_t std_rcc_get_hclkfreq(void)
  80. {
  81. uint32_t frequency = 0;
  82. uint32_t tmp, hclk_div;
  83. tmp = std_rcc_get_sysclkfreq();
  84. /* 获取AHB分频因子 */
  85. hclk_div = std_rcc_get_ahbdiv()>>RCC_CFG_HPRE_POS;
  86. frequency = tmp >> hclk_div;
  87. return frequency;
  88. }
  89. /**
  90. * @brief 获取APB时钟频率(PCLK)
  91. * @retval 返回PCLK1时钟频率(Hz)
  92. */
  93. uint32_t std_rcc_get_pclkfreq(void)
  94. {
  95. uint32_t frequency = 0;
  96. uint32_t tmp, pclk_div;
  97. tmp = std_rcc_get_hclkfreq();
  98. /* 获取APB分频因子 */
  99. pclk_div = std_rcc_get_apbdiv()>>RCC_CFG_PPRE_POS;
  100. if (pclk_div < 3)
  101. {
  102. frequency = tmp;
  103. }
  104. else
  105. {
  106. pclk_div -= 3;
  107. frequency = tmp >> pclk_div;
  108. }
  109. return frequency;
  110. }
  111. /**
  112. * @}
  113. */
  114. /**
  115. * @}
  116. */
  117. /**
  118. * @}
  119. */