blob: 11a922465984800643a9295736bbd32bae7180a1 [file] [log] [blame]
Kévin Redon69b92d92019-01-24 16:39:20 +01001/**
2 * \file
3 *
4 * \brief SAM SysTick
5 *
6 * Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
7 *
8 * \asf_license_start
9 *
10 * \page License
11 *
12 * Subject to your compliance with these terms, you may use Microchip
13 * software and any derivatives exclusively with Microchip products.
14 * It is your responsibility to comply with third party license terms applicable
15 * to your use of third party software (including open source software) that
16 * may accompany Microchip software.
17 *
18 * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
19 * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
20 * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
21 * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
22 * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
23 * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
24 * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
25 * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
26 * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
27 * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
28 * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
29 *
30 * \asf_license_stop
31 *
32 */
33
34#ifdef _SAME54_SysTick_COMPONENT_
35#ifndef _HRI_SysTick_E54_H_INCLUDED_
36#define _HRI_SysTick_E54_H_INCLUDED_
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#include <stdbool.h>
43#include <hal_atomic.h>
44
45#if defined(ENABLE_SysTick_CRITICAL_SECTIONS)
46#define SysTick_CRITICAL_SECTION_ENTER() CRITICAL_SECTION_ENTER()
47#define SysTick_CRITICAL_SECTION_LEAVE() CRITICAL_SECTION_LEAVE()
48#else
49#define SysTick_CRITICAL_SECTION_ENTER()
50#define SysTick_CRITICAL_SECTION_LEAVE()
51#endif
52
53typedef uint32_t hri_systick_calib_reg_t;
54typedef uint32_t hri_systick_csr_reg_t;
55typedef uint32_t hri_systick_cvr_reg_t;
56typedef uint32_t hri_systick_rvr_reg_t;
57
58static inline bool hri_systick_get_CALIB_SKEW_bit(const void *const hw)
59{
60 return (((Systick *)hw)->CALIB.reg & SysTick_CALIB_SKEW) >> 30;
61}
62
63static inline bool hri_systick_get_CALIB_NOREF_bit(const void *const hw)
64{
65 return (((Systick *)hw)->CALIB.reg & SysTick_CALIB_NOREF) >> 31;
66}
67
68static inline hri_systick_calib_reg_t hri_systick_get_CALIB_TENMS_bf(const void *const hw, hri_systick_calib_reg_t mask)
69{
70 return (((Systick *)hw)->CALIB.reg & SysTick_CALIB_TENMS(mask)) >> 0;
71}
72
73static inline hri_systick_calib_reg_t hri_systick_read_CALIB_TENMS_bf(const void *const hw)
74{
75 return (((Systick *)hw)->CALIB.reg & SysTick_CALIB_TENMS_Msk) >> 0;
76}
77
78static inline hri_systick_calib_reg_t hri_systick_get_CALIB_reg(const void *const hw, hri_systick_calib_reg_t mask)
79{
80 uint32_t tmp;
81 tmp = ((Systick *)hw)->CALIB.reg;
82 tmp &= mask;
83 return tmp;
84}
85
86static inline hri_systick_calib_reg_t hri_systick_read_CALIB_reg(const void *const hw)
87{
88 return ((Systick *)hw)->CALIB.reg;
89}
90
91static inline void hri_systick_set_CSR_reg(const void *const hw, hri_systick_csr_reg_t mask)
92{
93 SysTick_CRITICAL_SECTION_ENTER();
94 ((Systick *)hw)->CSR.reg |= mask;
95 SysTick_CRITICAL_SECTION_LEAVE();
96}
97
98static inline hri_systick_csr_reg_t hri_systick_get_CSR_reg(const void *const hw, hri_systick_csr_reg_t mask)
99{
100 uint32_t tmp;
101 tmp = ((Systick *)hw)->CSR.reg;
102 tmp &= mask;
103 return tmp;
104}
105
106static inline void hri_systick_write_CSR_reg(const void *const hw, hri_systick_csr_reg_t data)
107{
108 SysTick_CRITICAL_SECTION_ENTER();
109 ((Systick *)hw)->CSR.reg = data;
110 SysTick_CRITICAL_SECTION_LEAVE();
111}
112
113static inline void hri_systick_clear_CSR_reg(const void *const hw, hri_systick_csr_reg_t mask)
114{
115 SysTick_CRITICAL_SECTION_ENTER();
116 ((Systick *)hw)->CSR.reg &= ~mask;
117 SysTick_CRITICAL_SECTION_LEAVE();
118}
119
120static inline void hri_systick_toggle_CSR_reg(const void *const hw, hri_systick_csr_reg_t mask)
121{
122 SysTick_CRITICAL_SECTION_ENTER();
123 ((Systick *)hw)->CSR.reg ^= mask;
124 SysTick_CRITICAL_SECTION_LEAVE();
125}
126
127static inline hri_systick_csr_reg_t hri_systick_read_CSR_reg(const void *const hw)
128{
129 return ((Systick *)hw)->CSR.reg;
130}
131
132static inline void hri_systick_set_RVR_reg(const void *const hw, hri_systick_rvr_reg_t mask)
133{
134 SysTick_CRITICAL_SECTION_ENTER();
135 ((Systick *)hw)->RVR.reg |= mask;
136 SysTick_CRITICAL_SECTION_LEAVE();
137}
138
139static inline hri_systick_rvr_reg_t hri_systick_get_RVR_reg(const void *const hw, hri_systick_rvr_reg_t mask)
140{
141 uint32_t tmp;
142 tmp = ((Systick *)hw)->RVR.reg;
143 tmp &= mask;
144 return tmp;
145}
146
147static inline void hri_systick_write_RVR_reg(const void *const hw, hri_systick_rvr_reg_t data)
148{
149 SysTick_CRITICAL_SECTION_ENTER();
150 ((Systick *)hw)->RVR.reg = data;
151 SysTick_CRITICAL_SECTION_LEAVE();
152}
153
154static inline void hri_systick_clear_RVR_reg(const void *const hw, hri_systick_rvr_reg_t mask)
155{
156 SysTick_CRITICAL_SECTION_ENTER();
157 ((Systick *)hw)->RVR.reg &= ~mask;
158 SysTick_CRITICAL_SECTION_LEAVE();
159}
160
161static inline void hri_systick_toggle_RVR_reg(const void *const hw, hri_systick_rvr_reg_t mask)
162{
163 SysTick_CRITICAL_SECTION_ENTER();
164 ((Systick *)hw)->RVR.reg ^= mask;
165 SysTick_CRITICAL_SECTION_LEAVE();
166}
167
168static inline hri_systick_rvr_reg_t hri_systick_read_RVR_reg(const void *const hw)
169{
170 return ((Systick *)hw)->RVR.reg;
171}
172
173static inline void hri_systick_set_CVR_reg(const void *const hw, hri_systick_cvr_reg_t mask)
174{
175 SysTick_CRITICAL_SECTION_ENTER();
176 ((Systick *)hw)->CVR.reg |= mask;
177 SysTick_CRITICAL_SECTION_LEAVE();
178}
179
180static inline hri_systick_cvr_reg_t hri_systick_get_CVR_reg(const void *const hw, hri_systick_cvr_reg_t mask)
181{
182 uint32_t tmp;
183 tmp = ((Systick *)hw)->CVR.reg;
184 tmp &= mask;
185 return tmp;
186}
187
188static inline void hri_systick_write_CVR_reg(const void *const hw, hri_systick_cvr_reg_t data)
189{
190 SysTick_CRITICAL_SECTION_ENTER();
191 ((Systick *)hw)->CVR.reg = data;
192 SysTick_CRITICAL_SECTION_LEAVE();
193}
194
195static inline void hri_systick_clear_CVR_reg(const void *const hw, hri_systick_cvr_reg_t mask)
196{
197 SysTick_CRITICAL_SECTION_ENTER();
198 ((Systick *)hw)->CVR.reg &= ~mask;
199 SysTick_CRITICAL_SECTION_LEAVE();
200}
201
202static inline void hri_systick_toggle_CVR_reg(const void *const hw, hri_systick_cvr_reg_t mask)
203{
204 SysTick_CRITICAL_SECTION_ENTER();
205 ((Systick *)hw)->CVR.reg ^= mask;
206 SysTick_CRITICAL_SECTION_LEAVE();
207}
208
209static inline hri_systick_cvr_reg_t hri_systick_read_CVR_reg(const void *const hw)
210{
211 return ((Systick *)hw)->CVR.reg;
212}
213
214#ifdef __cplusplus
215}
216#endif
217
218#endif /* _HRI_SysTick_E54_H_INCLUDED */
219#endif /* _SAME54_SysTick_COMPONENT_ */