#ifdef ZIVUOS_PLATFORM_WCH_RISCV #include #include #include #include #include #ifndef FUNCONF_SYSTEM_CORE_CLOCK #error "MCU core clock (FUNCONF_SYSTEM_CORE_CLOCK) not defined." #endif #define ZV_TICKS_PER_US ((uint32_t) FUNCONF_SYSTEM_CORE_CLOCK / 1000000) #define ZV_TICKS_PER_MS ((uint32_t) FUNCONF_SYSTEM_CORE_CLOCK / 1000) volatile zv_time_t __zv_current_time_miliseconds; void zv_platform_init(void) { __zv_current_time_miliseconds = 0; SysTick->CTLR = ( SYSTICK_CTLR_STE | SYSTICK_CTLR_STCLK | SYSTICK_CTLR_STIE ); NVIC_EnableIRQ(SysTick_IRQn); SysTick->CNT = 0x00; SysTick->CMP = ZV_TICKS_PER_MS; } void SysTick_Handler(void) __attribute__((interrupt)); void SysTick_Handler(void) { SysTick->CMP += ZV_TICKS_PER_MS; SysTick->SR = 0x00; ++__zv_current_time_miliseconds; } zv_time_t __zv_platform_get_time_ms(void) { return __zv_current_time_miliseconds; } zv_ticks_t __zv_platform_get_time_us(void) { return SysTick->CNT / ZV_TICKS_PER_US; } #endif