1 /* 2 * Copyright (c) 2006-2021, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2017-01-01 Urey first version 9 */ 10 #include <rthw.h> 11 #include <rtthread.h> 12 13 #include "board.h" 14 #include "board_coretimer.h" 15 16 #include <stdint.h> 17 readreg32(volatile unsigned int * addr)18static inline unsigned int readreg32(volatile unsigned int *addr) 19 { 20 return *(volatile unsigned int *)addr; 21 } 22 writereg32(unsigned int b,volatile unsigned int * addr)23static inline void writereg32(unsigned int b, volatile unsigned int *addr) 24 { 25 *(volatile unsigned int *)addr = b; 26 } 27 CKTimerInit(uint32_t timer_id,uint32_t freq)28void CKTimerInit(uint32_t timer_id, uint32_t freq) 29 { 30 uint32_t reg; 31 32 writereg32(APB_DEFAULT_FREQ / freq, CORET_RVR); 33 writereg32(0, CORET_CVR); 34 35 reg = readreg32(CORET_CSR); 36 reg |= CORETIM_TXCONTROL_ENABLE; 37 reg |= CORETIM_TXCONTROL_INTMASK; 38 writereg32(reg, CORET_CSR); 39 40 return; 41 } 42 CKTimerClear(uint32_t timer_id)43void CKTimerClear(uint32_t timer_id) 44 { 45 uint32_t reg; 46 47 reg = readreg32(CORET_CSR); 48 reg |= ~CORETIM_TXCONTROL_MODE; 49 writereg32(reg, CORET_CSR); 50 } 51 CKTimer_CurrentValue(void)52uint32_t CKTimer_CurrentValue(void) 53 { 54 return readreg32(CORET_CVR); 55 } 56 SysTick_Handler(void)57void __attribute__((isr)) SysTick_Handler(void) 58 { 59 CKTimerClear(0x1); 60 /* enter interrupt */ 61 rt_interrupt_enter(); 62 63 rt_tick_increase(); 64 65 /* leave interrupt */ 66 rt_interrupt_leave(); 67 } 68