VSF Documented
i_io_systick.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2018 by Gorgon Meducer<Embedded_zhuoran@hotmail.com> *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __I_IO_SYS_TICK_H__
19#define __I_IO_SYS_TICK_H__
20
21/*============================ INCLUDES ======================================*/
22
28#include <stdint.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34/*============================ MACROS ========================================*/
35
37#define SYSTICK_BASE_ADDRESS (0xE000E010UL)
38
40#define ARM_SYSTICK (*(systick_reg_t *)SYSTICK_BASE_ADDRESS)
41
42#ifndef __REG_MACRO__
43#define __REG_MACRO__
44#define DEF_REG \
45 union { \
46 struct {
47
48#define END_DEF_REG32(__NAME) \
49 }; \
50 reg32_t VALUE; \
51 }__NAME;
52#endif
53
56/* ---------------------------REGISTER DEFINE BEGIN ------------------------- */
57
58
60#define SYSTICK_CSR_REG ARM_SYSTICK.SYST_CSR
61#define SYSTICK_CSR SYSTICK_CSR_REG.VALUE
62#define SYSTICK_CSR_BIT SYSTICK_CSR_REG
63
65#define SYSTICK_RVR_REG ARM_SYSTICK.SYST_RVR
66#define SYSTICK_RVR SYSTICK_RVR_REG.VALUE
67#define SYSTICK_RVR_BIT SYSTICK_RVR_REG
68
69
71#define SYSTICK_CVR_REG ARM_SYSTICK.SYST_CVR
72#define SYSTICK_CVR SYSTICK_CVR_REG.VALUE
73#define SYSTICK_CVR_BIT SYSTICK_CVR_REG
74
76#define SYSTICK_CALIB_REG ARM_SYSTICK.SYST_CALIB
77#define SYSTICK_CALIB SYSTICK_CALIB_REG.VALUE
78#define SYSTICK_CALIB_BIT SYSTICK_CALIB_REG
79
80/* ----------------------------REGISTER DEFINE END-------------------------- */
82
85/* -----------------------DEFINE REGISTER OP MAC BETIN---------------------- */
86
88#define SYSTICK_CSR_ENABLE 0
89#define SYSTICK_CSR_ENABLE_MSK (1<<SYSTICK_CSR_ENABLE)
90
91#define SYSTICK_CSR_TICKINT 1
92#define SYSTICK_CSR_TICKINT_MSK (1<<SYSTICK_CSR_TICKINT)
93
94#define SYSTICK_CSR_CLKSOURCE 2
95#define SYSTICK_CSR_CLKSOURCE_MSK (1<<SYSTICK_CSR_CLKSOURCE)
96
97#define SYSTICK_CSR_COUNTFLAG 16
98#define SYSTICK_CSR_COUNTFLAG_MSK (1<<SYSTICK_CSR_COUNTFLAG)
99
101#define SYSTICK_CALIB_SKEW 30
102#define SYSTICK_CALIB_SKEW_MSK (1<<SYSTICK_CALIB_SKEW)
103
104#define SYSTICK_CALIB_NOREF 31
105#define SYSTICK_CALIB_NOREF_MSK (1<<SYSTICK_CALIB_NOREF)
106
107/* --------------------------DEFINE REGISTER OP MAC END-------------------- */
109
110/*============================ MACROFIED FUNCTIONS ===========================*/
111
112/*============================ TYPES =========================================*/
113
114// copied from utilities/compiler/__common/__type.h
115#ifndef __REG_TYPE__
116#define __REG_TYPE__
117
118typedef volatile uint8_t reg8_t;
119typedef volatile uint16_t reg16_t;
120typedef volatile uint32_t reg32_t;
121
122#define __REG_CONNECT(__A, __B) __A##__B
123#define __REG_RSVD_NAME(__NAME) __REG_CONNECT(__unused_, __NAME)
124
125#define ____REG_RSVD(__NAME, __BIT) \
126 reg##__BIT##_t __NAME : __BIT;
127#define ____REG_RSVD_N(__NAME, __BIT, __N) \
128 reg##__BIT##_t __NAME[__N];
129#define __REG_RSVD(__BIT) ____REG_RSVD(REG_RSVD_NAME, __BIT)
130#define __REG_RSVD_N(__BIT, __N) ____REG_RSVD_N(REG_RSVD_NAME, __BIT, (__N))
131
132#define REG_RSVD_NAME __REG_RSVD_NAME(__LINE__)
133#define REG_RSVD(__BIT) __REG_RSVD(__BIT)
134#define REG_RSVD_N(__BIT, __N) __REG_RSVD_N(__BIT, (__N))
135
136#define REG_RSVD_U8 REG_RSVD(8)
137#define REG_RSVD_U16 REG_RSVD(16)
138#define REG_RSVD_U32 REG_RSVD(32)
139
140#define REG_RSVD_U8N(__N) REG_RSVD_N(8, (__N))
141#define REG_RSVD_U16N(__N) REG_RSVD_N(16, (__N))
142#define REG_RSVD_U32N(__N) REG_RSVD_N(32, (__N))
143
144#define REG8_RSVD_N(__N) REG_RSVD_U8N(__N)
145#define REG8_RSVD_B(__BYTE_CNT) REG8_RSVD_N(__BYTE_CNT)
146#define REG8_RSVD_8B REG8_RSVD_B(8)
147#define REG8_RSVD_16B REG8_RSVD_B(16)
148#define REG8_RSVD_32B REG8_RSVD_B(32)
149#define REG8_RSVD_64B REG8_RSVD_B(64)
150#define REG8_RSVD_128B REG8_RSVD_B(128)
151#define REG8_RSVD_256B REG8_RSVD_B(256)
152#define REG8_RSVD_512B REG8_RSVD_B(512)
153#define REG8_RSVD_1K REG8_RSVD_B(1024)
154#define REG8_RSVD_2K REG8_RSVD_B(2048)
155#define REG8_RSVD_4K REG8_RSVD_B(4096)
156#define REG8_RSVD_8K REG8_RSVD_B(8192)
157#define REG8_RSVD_16K REG8_RSVD_B(16 * 1024)
158#define REG8_RSVD_32K REG8_RSVD_B(32 * 1024)
159#define REG8_RSVD_64K REG8_RSVD_B(64 * 1024)
160#define REG8_RSVD_128K REG8_RSVD_B(128 * 1024)
161#define REG8_RSVD_256K REG8_RSVD_B(256 * 1024)
162#define REG8_RSVD_512K REG8_RSVD_B(512 * 1024)
163#define REG8_RSVD_1M REG8_RSVD_B(1024 * 1024)
164
165#define REG16_RSVD_N(__N) REG_RSVD_U16N(__N)
166// __BYTE_CNT MUST be multiple of 2
167#define REG16_RSVD_B(__BYTE_CNT) REG16_RSVD_N(__BYTE_CNT >> 1)
168#define REG16_RSVD_8B REG16_RSVD_B(8)
169#define REG16_RSVD_16B REG16_RSVD_B(16)
170#define REG16_RSVD_32B REG16_RSVD_B(32)
171#define REG16_RSVD_64B REG16_RSVD_B(64)
172#define REG16_RSVD_128B REG16_RSVD_B(128)
173#define REG16_RSVD_256B REG16_RSVD_B(256)
174#define REG16_RSVD_512B REG16_RSVD_B(512)
175#define REG16_RSVD_1K REG16_RSVD_B(1024)
176#define REG16_RSVD_2K REG16_RSVD_B(2048)
177#define REG16_RSVD_4K REG16_RSVD_B(4096)
178#define REG16_RSVD_8K REG16_RSVD_B(8192)
179#define REG16_RSVD_16K REG16_RSVD_B(16 * 1024)
180#define REG16_RSVD_32K REG16_RSVD_B(32 * 1024)
181#define REG16_RSVD_64K REG16_RSVD_B(64 * 1024)
182#define REG16_RSVD_128K REG16_RSVD_B(128 * 1024)
183#define REG16_RSVD_256K REG16_RSVD_B(256 * 1024)
184#define REG16_RSVD_512K REG16_RSVD_B(512 * 1024)
185#define REG16_RSVD_1M REG16_RSVD_B(1024 * 1024)
186
187#define REG32_RSVD_N(__N) REG_RSVD_U32N(__N)
188// __BYTE_CNT MUST be multiple of 4
189#define REG32_RSVD_B(__BYTE_CNT) REG_RSVD_U32N(__BYTE_CNT >> 2)
190#define REG32_RSVD_8B REG32_RSVD_B(8)
191#define REG32_RSVD_16B REG32_RSVD_B(16)
192#define REG32_RSVD_32B REG32_RSVD_B(32)
193#define REG32_RSVD_64B REG32_RSVD_B(64)
194#define REG32_RSVD_128B REG32_RSVD_B(128)
195#define REG32_RSVD_256B REG32_RSVD_B(256)
196#define REG32_RSVD_512B REG32_RSVD_B(512)
197#define REG32_RSVD_1K REG32_RSVD_B(1024)
198#define REG32_RSVD_2K REG32_RSVD_B(2048)
199#define REG32_RSVD_4K REG32_RSVD_B(4096)
200#define REG32_RSVD_8K REG32_RSVD_B(8192)
201#define REG32_RSVD_16K REG32_RSVD_B(16 * 1024)
202#define REG32_RSVD_32K REG32_RSVD_B(32 * 1024)
203#define REG32_RSVD_64K REG32_RSVD_B(64 * 1024)
204#define REG32_RSVD_128K REG32_RSVD_B(128 * 1024)
205#define REG32_RSVD_256K REG32_RSVD_B(256 * 1024)
206#define REG32_RSVD_512K REG32_RSVD_B(512 * 1024)
207#define REG32_RSVD_1M REG32_RSVD_B(1024 * 1024)
208
209#endif // __REG_TYPE__
210
213typedef struct {
215 DEF_REG
221 END_DEF_REG32(SYST_CSR)
222
223
224 DEF_REG
226 END_DEF_REG32(SYST_RVR)
227
228
229 DEF_REG
231 END_DEF_REG32(SYST_CVR)
232
233
234 DEF_REG
236 reg32_t __RSVD0 : 6;
239 END_DEF_REG32(SYST_CALIB)
242
243/*============================ GLOBAL VARIABLES ==============================*/
244/*============================ LOCAL VARIABLES ===============================*/
245/*============================ PROTOTYPES ====================================*/
246
247#ifdef __cplusplus
248}
249#endif
250
251#endif
volatile uint32_t reg32_t
Definition i_io_systick.h:120
volatile uint16_t reg16_t
Definition i_io_systick.h:119
volatile uint8_t reg8_t
Definition i_io_systick.h:118
#define END_DEF_REG32(__NAME)
Definition i_io_systick.h:48
#define DEF_REG
Definition i_io_systick.h:44
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition i_io_systick.h:213
reg32_t TICKINT
Definition i_io_systick.h:217
reg32_t __RSVD0
Definition i_io_systick.h:219
reg32_t SKEW
Definition i_io_systick.h:237
DEF_REG reg32_t RELOAD
System Timer Reload value register.
Definition i_io_systick.h:225
DEF_REG reg32_t TENMS
System Timer Calibration value register.
Definition i_io_systick.h:235
reg32_t COUNTFLAG
Definition i_io_systick.h:220
DEF_REG reg32_t EN
SysTick Timer Control and status register.
Definition i_io_systick.h:216
reg32_t CLKSOURCE
Definition i_io_systick.h:218
DEF_REG reg32_t CURRENT
System Timer Current value register.
Definition i_io_systick.h:230
reg32_t NOREF
Definition i_io_systick.h:238