clock.c 970 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "clock.h"
  2. #include "gd32f3x0.h"
  3. extern uint32_t SystemCoreClock;
  4. void delay_us(uint32_t us){
  5. uint32_t insr_num = (SystemCoreClock /40000000 + 1) * us;// 1000000;
  6. while(insr_num-->0);
  7. }
  8. uint32_t get_sys_clock(void){
  9. return SystemCoreClock;
  10. }
  11. uint32_t get_ahb_clock(void){
  12. return rcu_clock_freq_get(CK_AHB);
  13. }
  14. uint32_t get_apb1_clock(void){
  15. return rcu_clock_freq_get(CK_APB1);
  16. }
  17. uint32_t get_apb2_clock(void){
  18. return rcu_clock_freq_get(CK_APB2);
  19. }
  20. uint32_t get_adc_clock(void){
  21. return rcu_clock_freq_get(CK_ADC);
  22. }
  23. uint32_t get_apb1_timer_clock(void){
  24. uint32_t apb1psc = 0U;
  25. apb1psc = RCU_CFG0;
  26. uint32_t div = GET_BITS(apb1psc, 8, 10);
  27. if (div == 0){ //DIV1
  28. return get_apb1_clock();
  29. }
  30. return get_apb1_clock() * 2;
  31. }
  32. uint32_t get_apb2_timer_clock(void){
  33. uint32_t apb2psc = 0U;
  34. apb2psc = RCU_CFG0;
  35. uint32_t div = GET_BITS(apb2psc, 11, 13);
  36. if (div == 0){ //DIV1
  37. return get_apb2_clock();
  38. }
  39. return get_apb2_clock() * 2;
  40. }