-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsystem_timer.h
183 lines (140 loc) · 5.92 KB
/
system_timer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* Copyright (C) 2022 (Unix69@github)
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
#ifndef SYSTEM_TIMER_H
#define SYSTEM_TIMER_H
#include "mmu.h"
#include "types.h"
#define N_STIMERS 4
//system timer 0
#define SYSTEM_TIMER_0 0
//system timer 1
#define SYSTEM_TIMER_1 1
//system timer 2
#define SYSTEM_TIMER_2 2
//system timer 3
#define SYSTEM_TIMER_3 3
typedef struct sys_timer sys_timer_t;
//BrainOS System Timer internal routines
/// @brief boot system timers
void sys_timer_boot();
/// @brief shutdown system timers
void sys_timer_shutdown();
//BrainOS System Timer control level API
/// @brief acquire a system timer
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_irq_handler
/// @param sys_timer_fiq_handler
/// @param sys_timer_err_handler
/// @param sys_timer_sync_handler
void sys_timer_acquire(register uint32_t sys_timer, register uint8_t sys_timer_owner, void* sys_timer_irq_handler, void* sys_timer_fiq_handler, void* sys_timer_err_handler, void* sys_timer_sync_handler);
/// @brief start a system timer
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_cmp_val
void sys_timer_start(register uint32_t sys_timer, register uint8_t sys_timer_owner, uint32_t sys_timer_cmp_val);
/// @brief stop a system timer
/// @param sys_timer
/// @param sys_timer_owner
void sys_timer_stop(register uint32_t sys_timer, register uint8_t sys_timer_owner);
/// @brief restart a system timer
/// @param sys_timer
/// @param sys_timer_owner
void sys_timer_restart(register uint32_t sys_timer, register uint8_t sys_timer_owner);
/// @brief release a system timer
/// @param sys_timer
/// @param sys_timer_owner
void sys_timer_release(register uint32_t sys_timer, register uint8_t sys_timer_owner);
/// @brief set system timer irq handler
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_irq_handler
void sys_timer_irq_handler_set(register uint32_t sys_timer,register uint8_t sys_timer_owner, void* sys_timer_irq_handler);
/// @brief set system timer fiq handler
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_fiq_handler
void sys_timer_fiq_handler_set(register uint32_t sys_timer,register uint8_t sys_timer_owner, void* sys_timer_fiq_handler);
/// @brief set system timer sync handler
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_sync_handler
void sys_timer_sync_handler_set(register uint32_t sys_timer, register uint8_t sys_timer_owner, void* sys_timer_sync_handler);
/// @brief set system timer err handler
/// @param sys_timer
/// @param sys_timer_owner
/// @param sys_timer_err_handler
void sys_timer_err_handler_set(register uint32_t sys_timer, register uint8_t sys_timer_owner, void* sys_timer_err_handler);
/// @brief enable system timer
/// @param sys_timer
/// @param sys_timer_owner
void sys_timer_enable(register uint8_t sys_timer, register uint8_t sys_timer_owner);
/// @brief disable system timer
/// @param sys_timer
/// @param sys_timer_owner
void sys_timer_disable(register uint8_t sys_timer, register uint8_t sys_timer_owner);
//BrainOS System Timer system level API
/// @brief set system timer control/status
/// @param sys_timer the timer to select
void sys_timer_stat_set(register uint8_t sys_timer);
/// @brief reset system timer control/status
/// @param sys_timer the timer to select
void sys_timer_stat_reset(register uint8_t sys_timer);
/// @brief clear system timer control/status
/// @param sys_timer the timer to select
void sys_timer_stat_clear(register uint8_t sys_timer);
/// @brief get system timer control/status
/// @param sys_timer the timer to select
/// @return sys_timer status value
uint8_t sys_timer_stat_get(register uint8_t sys_timer);
/// @brief get system timer counter value
/// @return sys_timer counter value
uint64_t sys_timer_cnt_get();
/// @brief get system timer counter low value
/// @return sys_timer low counter value
uint32_t sys_timer_cnt_lo_get();
/// @brief get system timer counter high value
/// @return sys_timer high counter value
uint32_t sys_timer_cnt_hi_get();
/// @brief get system timer compare value
/// @param sys_timer the timer to select
/// @return sys_timer compare value
uint32_t sys_timer_cmp_get(register uint8_t sys_timer);
/// @brief set system timer compare value
/// @param sys_timer the timer to select
/// @param sys_timer_cmp_val the timer compare value to set
void sys_timer_cmp_set(register uint8_t sys_timer,register uint32_t sys_timer_cmp_val);
/// @brief reset system timer compare value
/// @param sys_timer
void sys_timer_cmp_reset(register uint8_t sys_timer);
/// @brief check if system timer is expired
/// @param sys_timer the timer to select
/// @return 1 if sys_timer is expired, 0 otherwhise
int sys_timer_is_expired(register uint8_t sys_timer);
/// @brief check if system timer is matched
/// @param sys_timer the timer to select
/// @return 1 if sys_timer is matched, 0 otherwhise
int sys_timer_is_match(register uint8_t sys_timer);
#endif