| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #ifdef ZIVUOS_PLATFORM_WCH_RISCV
- #include <stdint.h>
- #include <stddef.h>
- #include <stdbool.h>
- #include <ch32fun.h>
- #include <zivuos.h>
- #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
|