NavHAL 0.1.0
NAVRobotec's architecture-agnostic HAL for embedded systems.
Loading...
Searching...
No Matches
timer.h
Go to the documentation of this file.
1
10
11#ifndef CORTEX_M4_TIMER_H
12#define CORTEX_M4_TIMER_H
13#include "common/hal_types.h"
14#include "utils/timer_types.h"
15#include <stdint.h>
16
17// APB1
18#define RCC_APB1ENR_TIM2_OFFSET 0
19#define RCC_APB1ENR_TIM3_OFFSET 1
20#define RCC_APB1ENR_TIM4_OFFSET 2
21#define RCC_APB1ENR_TIM5_OFFSET 3
22// APB2
23#define RCC_APB2ENR_TIM1_OFFSET 0
24#define RCC_APB2ENR_TIM9_OFFSET 16
25#define RCC_APB2ENR_TIM10_OFFSET 17
26#define RCC_APB2ENR_TIM11_OFFSET 18
27
28// SysTick Control and Status Register
29#define SYST_CSR (*(__IO uint32_t *)0xE000E010)
30// SysTick Reload Value Register
31#define SYST_RVR (*(__IO uint32_t *)0xE000E014)
32// SysTick Current Value Register
33#define SYST_CVR (*(__IO uint32_t *)0xE000E018)
34// SysTick Calibration Register
35#define SYST_CALIB (*(__IO uint32_t *)0xE000E01C)
36#define SYST_CSR_EN_BIT 0
37#define SYST_CSR_TICKINT_BIT 1
38#define SYST_CSR_CLKSOURCE_BIT 2
39
40// SysTick Timer Functions
41// TIM5 is used for systick
42void systick_init(uint32_t tick_us);
43void delay_ms(uint32_t ms);
44void delay_us(uint64_t us);
45uint64_t hal_get_tick(void);
46uint32_t hal_get_tick_duration_us(void);
47uint32_t hal_get_tick_reload_value(void);
48uint32_t hal_get_millis(void);
49uint32_t hal_get_micros(void);
50void SysTick_Handler(void); // ISR for systick interrupts
51void hal_systick_set_callback(void (*cb)(void));
52
53// General Purpose Timer (TIMx) Initialization & Control
54void timer_init(hal_timer_t timer, uint32_t prescaler, uint32_t auto_reload);
59
60// Timer Interrupt Management
63 hal_timer_t timer); // [TODO]Add support for all timers
65 hal_timer_t timer); // [TODO]Add support for all timers
67 hal_timer_t timer,
68 void (*callback)(void)); //[TODO] Add support for all timers
70 hal_timer_t timer); // [TODO] Add support for all timers
71
72// Timer IRQ Handlers
73void TIM2_IRQHandler(void);
74void TIM3_IRQHandler(void);
75void TIM4_IRQHandler(void);
76void TIM5_IRQHandler(void);
77void TIM9_IRQHandler(void);
79
80// PWM and Output Compare (Future Stage)
81void timer_set_compare(hal_timer_t timer, uint8_t channel,
82 uint32_t compare_value);
83uint32_t timer_get_compare(hal_timer_t timer, uint32_t channel);
84uint32_t timer_get_arr(hal_timer_t timer, uint32_t channel);
85void timer_set_arr(hal_timer_t timer, uint32_t channel, uint32_t arr);
86void timer_enable_channel(hal_timer_t timer, uint32_t channel);
87
88void timer_disable_channel(hal_timer_t timer, uint32_t channel);
89
90// Utility Functions
92void timer_set_prescaler(hal_timer_t timer, uint32_t prescaler);
93void timer_set_auto_reload(hal_timer_t timer, uint32_t arr);
94
95#endif // !CORTEX_M4_TIMER_H
Hardware Abstraction Layer (HAL) common type definitions.
void delay_us(uint64_t us)
Busy-wait delay in microseconds.
Definition timer.c:79
uint32_t timer_get_compare(hal_timer_t timer, uint32_t channel)
void timer_set_arr(hal_timer_t timer, uint32_t channel, uint32_t arr)
void timer_disable_channel(hal_timer_t timer, uint32_t channel)
void timer_set_auto_reload(hal_timer_t timer, uint32_t arr)
void timer_stop(hal_timer_t timer)
uint32_t timer_get_count(hal_timer_t timer)
void TIM2_IRQHandler(void)
void timer_set_compare(hal_timer_t timer, uint8_t channel, uint32_t compare_value)
uint32_t hal_get_tick_reload_value(void)
Get SysTick reload value.
Definition timer.c:109
void timer_attach_callback(hal_timer_t timer, void(*callback)(void))
void timer_disable_interrupt(hal_timer_t timer)
void timer_start(hal_timer_t timer)
void timer_enable_interrupt(hal_timer_t timer)
void systick_init(uint32_t tick_us)
Initialize the SysTick timer.
Definition timer.c:61
uint32_t timer_get_arr(hal_timer_t timer, uint32_t channel)
void TIM5_IRQHandler(void)
void timer_clear_interrupt_flag(hal_timer_t timer)
uint32_t timer_get_frequency(hal_timer_t timer)
void TIM4_IRQHandler(void)
uint32_t hal_get_millis(void)
Get system uptime in milliseconds.
Definition timer.c:115
void timer_detach_callback(hal_timer_t timer)
uint64_t hal_get_tick(void)
Get current system tick count.
Definition timer.c:97
void TIM9_IRQHandler(void)
void TIM12_IRQHandler(void)
void timer_reset(hal_timer_t timer)
void SysTick_Handler(void)
SysTick interrupt handler.
Definition timer.c:129
void timer_enable_channel(hal_timer_t timer, uint32_t channel)
void delay_ms(uint32_t ms)
Busy-wait delay in milliseconds.
Definition timer.c:91
uint32_t hal_get_tick_duration_us(void)
Get configured tick duration.
Definition timer.c:103
void hal_systick_set_callback(void(*cb)(void))
void TIM3_IRQHandler(void)
void timer_set_prescaler(hal_timer_t timer, uint32_t prescaler)
uint32_t hal_get_micros(void)
Get system uptime in microseconds.
Definition timer.c:121
void timer_init(hal_timer_t timer, uint32_t prescaler, uint32_t auto_reload)
Initialize timer based on type.
Definition timer.c:215
hal_timer_t
Definition timer_types.h:5