]> git.sur5r.net Git - freertos/blob
d18cf6366254e6e83ef4ea7d76b7baa9993b2810
[freertos] /
1 /******************************************************************************
2 *
3 * (c) Copyright 2010-12 Xilinx, Inc. All rights reserved.
4 *
5 * This file contains confidential and proprietary information of Xilinx, Inc.
6 * and is protected under U.S. and international copyright and other
7 * intellectual property laws.
8 *
9 * DISCLAIMER
10 * This disclaimer is not a license and does not grant any rights to the
11 * materials distributed herewith. Except as otherwise provided in a valid
12 * license issued to you by Xilinx, and to the maximum extent permitted by
13 * applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL
14 * FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS,
15 * IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
16 * MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE;
17 * and (2) Xilinx shall not be liable (whether in contract or tort, including
18 * negligence, or under any other theory of liability) for any loss or damage
19 * of any kind or nature related to, arising under or in connection with these
20 * materials, including for any direct, or any indirect, special, incidental,
21 * or consequential loss or damage (including loss of data, profits, goodwill,
22 * or any type of loss or damage suffered as a result of any action brought by
23 * a third party) even if such damage or loss was reasonably foreseeable or
24 * Xilinx had been advised of the possibility of the same.
25 *
26 * CRITICAL APPLICATIONS
27 * Xilinx products are not designed or intended to be fail-safe, or for use in
28 * any application requiring fail-safe performance, such as life-support or
29 * safety devices or systems, Class III medical devices, nuclear facilities,
30 * applications related to the deployment of airbags, or any other applications
31 * that could lead to death, personal injury, or severe property or
32 * environmental damage (individually and collectively, "Critical
33 * Applications"). Customer assumes the sole risk and liability of any use of
34 * Xilinx products in Critical Applications, subject only to applicable laws
35 * and regulations governing limitations on product liability.
36 *
37 * THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE
38 * AT ALL TIMES.
39 *
40 ******************************************************************************/
41 /****************************************************************************/
42 /**
43 *
44 * @file xscutimer_hw.h
45 *
46 * This file contains the hardware interface to the Timer.
47 *
48 * <pre>
49 * MODIFICATION HISTORY:
50 *
51 * Ver   Who Date     Changes
52 * ----- --- -------- ---------------------------------------------
53 * 1.00a nm  03/10/10 First release
54 * 1.01a sdm 02/02/12 Added low level macros to read/write load, counter, control
55 *                    and interrupt registers
56 * 1.02a  sg 07/17/12 Included xil_assert.h for CR 667947. This is an issue
57 *                    when the xstatus.h in the common driver overwrites
58 *                    the xstatus.h of the standalone BSP during the
59 *                    libgen.
60 * </pre>
61 *
62 ******************************************************************************/
63 #ifndef XSCUTIMER_HW_H          /* prevent circular inclusions */
64 #define XSCUTIMER_HW_H          /* by using protection macros */
65
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69
70 /***************************** Include Files *********************************/
71 #include "xil_types.h"
72 #include "xil_io.h"
73 #include "xil_assert.h"
74 /************************** Constant Definitions *****************************/
75
76 /** @name Register Map
77  * Offsets of registers from the start of the device
78  * @{
79  */
80
81 #define XSCUTIMER_LOAD_OFFSET           0x00 /**< Timer Load Register */
82 #define XSCUTIMER_COUNTER_OFFSET        0x04 /**< Timer Counter Register */
83 #define XSCUTIMER_CONTROL_OFFSET        0x08 /**< Timer Control Register */
84 #define XSCUTIMER_ISR_OFFSET            0x0C /**< Timer Interrupt
85                                                   Status Register */
86 /* @} */
87
88 /** @name Timer Control register
89  * This register bits control the prescaler, Intr enable,
90  * auto-reload and timer enable.
91  * @{
92  */
93
94 #define XSCUTIMER_CONTROL_PRESCALER_MASK        0x0000FF00 /**< Prescaler */
95 #define XSCUTIMER_CONTROL_PRESCALER_SHIFT       8
96 #define XSCUTIMER_CONTROL_IRQ_ENABLE_MASK       0x00000004 /**< Intr enable */
97 #define XSCUTIMER_CONTROL_AUTO_RELOAD_MASK      0x00000002 /**< Auto-reload */
98 #define XSCUTIMER_CONTROL_ENABLE_MASK           0x00000001 /**< Timer enable */
99 /* @} */
100
101 /** @name Interrupt Status register
102  * This register indicates the Timer counter register has reached zero.
103  * @{
104  */
105
106 #define XSCUTIMER_ISR_EVENT_FLAG_MASK           0x00000001 /**< Event flag */
107 /*@}*/
108
109 /**************************** Type Definitions *******************************/
110
111 /***************** Macros (Inline Functions) Definitions *********************/
112
113 /****************************************************************************/
114 /**
115 *
116 * Write to the timer load register. This will also update the
117 * timer counter register with the new value. This macro can be used to
118 * change the time-out value.
119 *
120 * @param        BaseAddr is the base address of the scu timer.
121 * @param        Value is the count to be loaded in to the load register.
122 *
123 * @return       None.
124 *
125 * @note         C-style signature:
126 *               void XScuTimer_SetLoadReg(u32 BaseAddr, u32 Value)
127 *
128 ******************************************************************************/
129 #define XScuTimer_SetLoadReg(BaseAddr, Value)                           \
130         XScuTimer_WriteReg(BaseAddr, XSCUTIMER_LOAD_OFFSET, Value)
131
132 /****************************************************************************/
133 /**
134 *
135 * Returns the current timer load register value.
136 *
137 * @param        BaseAddr is the base address of the scu timer.
138 *
139 * @return       Contents of the timer load register.
140 *
141 * @note         C-style signature:
142 *               u32 XScuTimer_GetLoadReg(u32 BaseAddr)
143 *
144 ******************************************************************************/
145 #define XScuTimer_GetLoadReg(BaseAddr)                                  \
146         XScuTimer_ReadReg(BaseAddr, XSCUTIMER_LOAD_OFFSET)
147
148 /****************************************************************************/
149 /**
150 *
151 * Write to the timer counter register.
152 *
153 * @param        BaseAddr is the base address of the scu timer.
154 * @param        Value is the count to be loaded in to the counter register.
155 *
156 * @return       None.
157 *
158 * @note         C-style signature:
159 *               void XScuTimer_SetCounterReg(u32 BaseAddr, u32 Value)
160 *
161 ******************************************************************************/
162 #define XScuTimer_SetCounterReg(BaseAddr, Value)                        \
163         XScuTimer_WriteReg(BaseAddr, XSCUTIMER_COUNTER_OFFSET, Value)
164
165 /****************************************************************************/
166 /**
167 *
168 * Returns the current timer counter register value.
169 *
170 * @param        BaseAddr is the base address of the scu timer.
171 *
172 * @return       Contents of the timer counter register.
173 *
174 * @note         C-style signature:
175                 u32 XScuTimer_GetCounterReg(u32 BaseAddr)
176 *
177 ******************************************************************************/
178 #define XScuTimer_GetCounterReg(BaseAddr)                               \
179         XScuTimer_ReadReg(BaseAddr, XSCUTIMER_COUNTER_OFFSET)
180
181 /****************************************************************************/
182 /**
183 *
184 * Write to the timer load register. This will also update the
185 * timer counter register with the new value. This macro can be used to
186 * change the time-out value.
187 *
188 * @param        BaseAddr is the base address of the scu timer.
189 * @param        Value is the count to be loaded in to the load register.
190 *
191 * @return       None.
192 *
193 * @note         C-style signature:
194 *               void XScuTimer_SetControlReg(u32 BaseAddr, u32 Value)
195 *
196 ******************************************************************************/
197 #define XScuTimer_SetControlReg(BaseAddr, Value)                        \
198         XScuTimer_WriteReg(BaseAddr, XSCUTIMER_CONTROL_OFFSET, Value)
199
200 /****************************************************************************/
201 /**
202 *
203 * Returns the current timer load register value.
204 *
205 * @param        BaseAddr is the base address of the scu timer.
206 *
207 * @return       Contents of the timer load register.
208 *
209 * @note         C-style signature:
210                 u32 XScuTimer_GetControlReg(u32 BaseAddr)
211 *
212 ******************************************************************************/
213 #define XScuTimer_GetControlReg(BaseAddr)                               \
214         XScuTimer_ReadReg(BaseAddr, XSCUTIMER_CONTROL_OFFSET)
215
216 /****************************************************************************/
217 /**
218 *
219 * Write to the timer counter register.
220 *
221 * @param        BaseAddr is the base address of the scu timer.
222 * @param        Value is the count to be loaded in to the counter register.
223 *
224 * @return       None.
225 *
226 * @note         C-style signature:
227 *               void XScuTimer_SetIntrReg(u32 BaseAddr, u32 Value)
228 *
229 ******************************************************************************/
230 #define XScuTimer_SetIntrReg(BaseAddr, Value)                           \
231         XScuTimer_WriteReg(BaseAddr, XSCUTIMER_ISR_OFFSET, Value)
232
233 /****************************************************************************/
234 /**
235 *
236 * Returns the current timer counter register value.
237 *
238 * @param        BaseAddr is the base address of the scu timer.
239 *
240 * @return       Contents of the timer counter register.
241 *
242 * @note         C-style signature:
243                 u32 XScuTimer_GetIntrReg(u32 BaseAddr)
244 *
245 ******************************************************************************/
246 #define XScuTimer_GetIntrReg(BaseAddr)                                  \
247         XScuTimer_ReadReg(BaseAddr, XSCUTIMER_ISR_OFFSET)
248
249 /****************************************************************************/
250 /**
251 *
252 * Read from the given Timer register.
253 *
254 * @param        BaseAddr is the base address of the device
255 * @param        RegOffset is the register offset to be read
256 *
257 * @return       The 32-bit value of the register
258 *
259 * @note         C-style signature:
260 *               u32 XScuTimer_ReadReg(u32 BaseAddr, u32 RegOffset)
261 *
262 *****************************************************************************/
263 #define XScuTimer_ReadReg(BaseAddr, RegOffset)          \
264         Xil_In32((BaseAddr) + (RegOffset))
265
266 /****************************************************************************/
267 /**
268 *
269 * Write to the given Timer register.
270 *
271 * @param        BaseAddr is the base address of the device
272 * @param        RegOffset is the register offset to be written
273 * @param        Data is the 32-bit value to write to the register
274 *
275 * @return       None.
276 *
277 * @note         C-style signature:
278 *               void XScuTimer_WriteReg(u32 BaseAddr, u32 RegOffset, u32 Data)
279 *
280 *****************************************************************************/
281 #define XScuTimer_WriteReg(BaseAddr, RegOffset, Data)   \
282         Xil_Out32((BaseAddr) + (RegOffset), (Data))
283
284 /************************** Function Prototypes ******************************/
285
286 /************************** Variable Definitions *****************************/
287
288 #ifdef __cplusplus
289 }
290 #endif
291
292 #endif  /* end of protection macro */