| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "clock.h"
- #include "gd32f3x0.h"
- extern uint32_t SystemCoreClock;
- static u8 delay_ticks_enable = 0;
- void delay_us(uint32_t us){
- if (delay_ticks_enable) {
- task_udelay(us);
- return;
- }
- uint32_t insr_num = (SystemCoreClock /1000000) * us * 4;// 1000000;
- while(insr_num-->0); //have 4 instr
- }
- void task_ticks_enable(void)
- {
- CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
- DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
- delay_ticks_enable = 1;
- }
- u32 task_ticks_abs(void)
- {
- return DWT->CYCCNT;
- }
- u32 task_ticks_rel(u32 start)
- {
- u32 ticks = DWT->CYCCNT;
- if (ticks >= start) {
- return ticks - start;
- }
- return 0xFFFFFFFF - start + ticks + 1;
- }
- void task_ticks_delay(u32 ticks)
- {
- u32 start;
- start = task_ticks_abs();
- while (task_ticks_rel(start) < ticks);
- }
- void task_udelay(u32 delay)
- {
- task_ticks_delay(delay * (SystemCoreClock / 1000000));
- }
- uint32_t get_sys_clock(void){
- return SystemCoreClock;
- }
- uint32_t get_ahb_clock(void){
- return rcu_clock_freq_get(CK_AHB);
- }
- uint32_t get_apb1_clock(void){
- return rcu_clock_freq_get(CK_APB1);
- }
- uint32_t get_apb2_clock(void){
- return rcu_clock_freq_get(CK_APB2);
- }
- uint32_t get_adc_clock(void){
- return rcu_clock_freq_get(CK_ADC);
- }
- uint32_t get_apb1_timer_clock(void){
- uint32_t apb1psc = 0U;
- apb1psc = RCU_CFG0;
- uint32_t div = GET_BITS(apb1psc, 8, 10);
- if (div == 0){ //DIV1
- return get_apb1_clock();
- }
- return get_apb1_clock() * 2;
- }
- uint32_t get_apb2_timer_clock(void){
- uint32_t apb2psc = 0U;
- apb2psc = RCU_CFG0;
- uint32_t div = GET_BITS(apb2psc, 11, 13);
- if (div == 0){ //DIV1
- return get_apb2_clock();
- }
- return get_apb2_clock() * 2;
- }
|