2 ** ###################################################################
3 ** Compilers: Keil ARM C/C++ Compiler
4 ** Freescale C/C++ for Embedded ARM
6 ** IAR ANSI C/C++ Compiler for ARM
8 ** Reference manual: K64P144M120SF5RM, Rev.2, January 2014
9 ** Version: rev. 2.5, 2014-02-10
13 ** Extension to the CMSIS register access layer header.
15 ** Copyright (c) 2014 Freescale Semiconductor, Inc.
16 ** All rights reserved.
18 ** Redistribution and use in source and binary forms, with or without modification,
19 ** are permitted provided that the following conditions are met:
21 ** o Redistributions of source code must retain the above copyright notice, this list
22 ** of conditions and the following disclaimer.
24 ** o Redistributions in binary form must reproduce the above copyright notice, this
25 ** list of conditions and the following disclaimer in the documentation and/or
26 ** other materials provided with the distribution.
28 ** o Neither the name of Freescale Semiconductor, Inc. nor the names of its
29 ** contributors may be used to endorse or promote products derived from this
30 ** software without specific prior written permission.
32 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33 ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34 ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
36 ** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37 ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38 ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
39 ** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41 ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 ** http: www.freescale.com
44 ** mail: support@freescale.com
47 ** - rev. 1.0 (2013-08-12)
49 ** - rev. 2.0 (2013-10-29)
50 ** Register accessor macros added to the memory map.
51 ** Symbols for Processor Expert memory map compatibility added to the memory map.
52 ** Startup file for gcc has been updated according to CMSIS 3.2.
53 ** System initialization updated.
54 ** MCG - registers updated.
55 ** PORTA, PORTB, PORTC, PORTE - registers for digital filter removed.
56 ** - rev. 2.1 (2013-10-30)
57 ** Definition of BITBAND macros updated to support peripherals with 32-bit acces disabled.
58 ** - rev. 2.2 (2013-12-09)
59 ** DMA - EARS register removed.
60 ** AIPS0, AIPS1 - MPRA register updated.
61 ** - rev. 2.3 (2014-01-24)
62 ** Update according to reference manual rev. 2
63 ** ENET, MCG, MCM, SIM, USB - registers updated
64 ** - rev. 2.4 (2014-02-10)
65 ** The declaration of clock configurations has been moved to separate header file system_MK64F12.h
66 ** Update of SystemInit() and SystemCoreClockUpdate() functions.
67 ** - rev. 2.5 (2014-02-10)
68 ** The declaration of clock configurations has been moved to separate header file system_MK64F12.h
69 ** Update of SystemInit() and SystemCoreClockUpdate() functions.
70 ** Module access macro module_BASES replaced by module_BASE_PTRS.
72 ** ###################################################################
76 * WARNING! DO NOT EDIT THIS FILE DIRECTLY!
78 * This file was generated automatically and any changes may be lost.
80 #ifndef __HW_PIT_REGISTERS_H__
81 #define __HW_PIT_REGISTERS_H__
84 #include "fsl_bitaccess.h"
89 * Periodic Interrupt Timer
91 * Registers defined in this header file:
92 * - HW_PIT_MCR - PIT Module Control Register
93 * - HW_PIT_LDVALn - Timer Load Value Register
94 * - HW_PIT_CVALn - Current Timer Value Register
95 * - HW_PIT_TCTRLn - Timer Control Register
96 * - HW_PIT_TFLGn - Timer Flag Register
98 * - hw_pit_t - Struct containing all module registers.
101 #define HW_PIT_INSTANCE_COUNT (1U) /*!< Number of instances of the PIT module. */
103 /*******************************************************************************
104 * HW_PIT_MCR - PIT Module Control Register
105 ******************************************************************************/
108 * @brief HW_PIT_MCR - PIT Module Control Register (RW)
110 * Reset value: 0x00000006U
112 * This register enables or disables the PIT timer clocks and controls the
113 * timers when the PIT enters the Debug mode.
115 typedef union _hw_pit_mcr
118 struct _hw_pit_mcr_bitfields
120 uint32_t FRZ
: 1; /*!< [0] Freeze */
121 uint32_t MDIS
: 1; /*!< [1] Module Disable - (PIT section) */
122 uint32_t RESERVED0
: 30; /*!< [31:2] */
127 * @name Constants and macros for entire PIT_MCR register
130 #define HW_PIT_MCR_ADDR(x) ((x) + 0x0U)
132 #define HW_PIT_MCR(x) (*(__IO hw_pit_mcr_t *) HW_PIT_MCR_ADDR(x))
133 #define HW_PIT_MCR_RD(x) (HW_PIT_MCR(x).U)
134 #define HW_PIT_MCR_WR(x, v) (HW_PIT_MCR(x).U = (v))
135 #define HW_PIT_MCR_SET(x, v) (HW_PIT_MCR_WR(x, HW_PIT_MCR_RD(x) | (v)))
136 #define HW_PIT_MCR_CLR(x, v) (HW_PIT_MCR_WR(x, HW_PIT_MCR_RD(x) & ~(v)))
137 #define HW_PIT_MCR_TOG(x, v) (HW_PIT_MCR_WR(x, HW_PIT_MCR_RD(x) ^ (v)))
141 * Constants & macros for individual PIT_MCR bitfields
145 * @name Register PIT_MCR, field FRZ[0] (RW)
147 * Allows the timers to be stopped when the device enters the Debug mode.
150 * - 0 - Timers continue to run in Debug mode.
151 * - 1 - Timers are stopped in Debug mode.
154 #define BP_PIT_MCR_FRZ (0U) /*!< Bit position for PIT_MCR_FRZ. */
155 #define BM_PIT_MCR_FRZ (0x00000001U) /*!< Bit mask for PIT_MCR_FRZ. */
156 #define BS_PIT_MCR_FRZ (1U) /*!< Bit field size in bits for PIT_MCR_FRZ. */
158 /*! @brief Read current value of the PIT_MCR_FRZ field. */
159 #define BR_PIT_MCR_FRZ(x) (BITBAND_ACCESS32(HW_PIT_MCR_ADDR(x), BP_PIT_MCR_FRZ))
161 /*! @brief Format value for bitfield PIT_MCR_FRZ. */
162 #define BF_PIT_MCR_FRZ(v) ((uint32_t)((uint32_t)(v) << BP_PIT_MCR_FRZ) & BM_PIT_MCR_FRZ)
164 /*! @brief Set the FRZ field to a new value. */
165 #define BW_PIT_MCR_FRZ(x, v) (BITBAND_ACCESS32(HW_PIT_MCR_ADDR(x), BP_PIT_MCR_FRZ) = (v))
169 * @name Register PIT_MCR, field MDIS[1] (RW)
171 * Disables the standard timers. This field must be enabled before any other
175 * - 0 - Clock for standard PIT timers is enabled.
176 * - 1 - Clock for standard PIT timers is disabled.
179 #define BP_PIT_MCR_MDIS (1U) /*!< Bit position for PIT_MCR_MDIS. */
180 #define BM_PIT_MCR_MDIS (0x00000002U) /*!< Bit mask for PIT_MCR_MDIS. */
181 #define BS_PIT_MCR_MDIS (1U) /*!< Bit field size in bits for PIT_MCR_MDIS. */
183 /*! @brief Read current value of the PIT_MCR_MDIS field. */
184 #define BR_PIT_MCR_MDIS(x) (BITBAND_ACCESS32(HW_PIT_MCR_ADDR(x), BP_PIT_MCR_MDIS))
186 /*! @brief Format value for bitfield PIT_MCR_MDIS. */
187 #define BF_PIT_MCR_MDIS(v) ((uint32_t)((uint32_t)(v) << BP_PIT_MCR_MDIS) & BM_PIT_MCR_MDIS)
189 /*! @brief Set the MDIS field to a new value. */
190 #define BW_PIT_MCR_MDIS(x, v) (BITBAND_ACCESS32(HW_PIT_MCR_ADDR(x), BP_PIT_MCR_MDIS) = (v))
193 /*******************************************************************************
194 * HW_PIT_LDVALn - Timer Load Value Register
195 ******************************************************************************/
198 * @brief HW_PIT_LDVALn - Timer Load Value Register (RW)
200 * Reset value: 0x00000000U
202 * These registers select the timeout period for the timer interrupts.
204 typedef union _hw_pit_ldvaln
207 struct _hw_pit_ldvaln_bitfields
209 uint32_t TSV
: 32; /*!< [31:0] Timer Start Value */
214 * @name Constants and macros for entire PIT_LDVALn register
217 #define HW_PIT_LDVALn_COUNT (4U)
219 #define HW_PIT_LDVALn_ADDR(x, n) ((x) + 0x100U + (0x10U * (n)))
221 #define HW_PIT_LDVALn(x, n) (*(__IO hw_pit_ldvaln_t *) HW_PIT_LDVALn_ADDR(x, n))
222 #define HW_PIT_LDVALn_RD(x, n) (HW_PIT_LDVALn(x, n).U)
223 #define HW_PIT_LDVALn_WR(x, n, v) (HW_PIT_LDVALn(x, n).U = (v))
224 #define HW_PIT_LDVALn_SET(x, n, v) (HW_PIT_LDVALn_WR(x, n, HW_PIT_LDVALn_RD(x, n) | (v)))
225 #define HW_PIT_LDVALn_CLR(x, n, v) (HW_PIT_LDVALn_WR(x, n, HW_PIT_LDVALn_RD(x, n) & ~(v)))
226 #define HW_PIT_LDVALn_TOG(x, n, v) (HW_PIT_LDVALn_WR(x, n, HW_PIT_LDVALn_RD(x, n) ^ (v)))
230 * Constants & macros for individual PIT_LDVALn bitfields
234 * @name Register PIT_LDVALn, field TSV[31:0] (RW)
236 * Sets the timer start value. The timer will count down until it reaches 0,
237 * then it will generate an interrupt and load this register value again. Writing a
238 * new value to this register will not restart the timer; instead the value will
239 * be loaded after the timer expires. To abort the current cycle and start a
240 * timer period with the new value, the timer must be disabled and enabled again.
243 #define BP_PIT_LDVALn_TSV (0U) /*!< Bit position for PIT_LDVALn_TSV. */
244 #define BM_PIT_LDVALn_TSV (0xFFFFFFFFU) /*!< Bit mask for PIT_LDVALn_TSV. */
245 #define BS_PIT_LDVALn_TSV (32U) /*!< Bit field size in bits for PIT_LDVALn_TSV. */
247 /*! @brief Read current value of the PIT_LDVALn_TSV field. */
248 #define BR_PIT_LDVALn_TSV(x, n) (HW_PIT_LDVALn(x, n).U)
250 /*! @brief Format value for bitfield PIT_LDVALn_TSV. */
251 #define BF_PIT_LDVALn_TSV(v) ((uint32_t)((uint32_t)(v) << BP_PIT_LDVALn_TSV) & BM_PIT_LDVALn_TSV)
253 /*! @brief Set the TSV field to a new value. */
254 #define BW_PIT_LDVALn_TSV(x, n, v) (HW_PIT_LDVALn_WR(x, n, v))
256 /*******************************************************************************
257 * HW_PIT_CVALn - Current Timer Value Register
258 ******************************************************************************/
261 * @brief HW_PIT_CVALn - Current Timer Value Register (RO)
263 * Reset value: 0x00000000U
265 * These registers indicate the current timer position.
267 typedef union _hw_pit_cvaln
270 struct _hw_pit_cvaln_bitfields
272 uint32_t TVL
: 32; /*!< [31:0] Current Timer Value */
277 * @name Constants and macros for entire PIT_CVALn register
280 #define HW_PIT_CVALn_COUNT (4U)
282 #define HW_PIT_CVALn_ADDR(x, n) ((x) + 0x104U + (0x10U * (n)))
284 #define HW_PIT_CVALn(x, n) (*(__I hw_pit_cvaln_t *) HW_PIT_CVALn_ADDR(x, n))
285 #define HW_PIT_CVALn_RD(x, n) (HW_PIT_CVALn(x, n).U)
289 * Constants & macros for individual PIT_CVALn bitfields
293 * @name Register PIT_CVALn, field TVL[31:0] (RO)
295 * Represents the current timer value, if the timer is enabled. If the timer is
296 * disabled, do not use this field as its value is unreliable. The timer uses a
297 * downcounter. The timer values are frozen in Debug mode if MCR[FRZ] is set.
300 #define BP_PIT_CVALn_TVL (0U) /*!< Bit position for PIT_CVALn_TVL. */
301 #define BM_PIT_CVALn_TVL (0xFFFFFFFFU) /*!< Bit mask for PIT_CVALn_TVL. */
302 #define BS_PIT_CVALn_TVL (32U) /*!< Bit field size in bits for PIT_CVALn_TVL. */
304 /*! @brief Read current value of the PIT_CVALn_TVL field. */
305 #define BR_PIT_CVALn_TVL(x, n) (HW_PIT_CVALn(x, n).U)
307 /*******************************************************************************
308 * HW_PIT_TCTRLn - Timer Control Register
309 ******************************************************************************/
312 * @brief HW_PIT_TCTRLn - Timer Control Register (RW)
314 * Reset value: 0x00000000U
316 * These registers contain the control bits for each timer.
318 typedef union _hw_pit_tctrln
321 struct _hw_pit_tctrln_bitfields
323 uint32_t TEN
: 1; /*!< [0] Timer Enable */
324 uint32_t TIE
: 1; /*!< [1] Timer Interrupt Enable */
325 uint32_t CHN
: 1; /*!< [2] Chain Mode */
326 uint32_t RESERVED0
: 29; /*!< [31:3] */
331 * @name Constants and macros for entire PIT_TCTRLn register
334 #define HW_PIT_TCTRLn_COUNT (4U)
336 #define HW_PIT_TCTRLn_ADDR(x, n) ((x) + 0x108U + (0x10U * (n)))
338 #define HW_PIT_TCTRLn(x, n) (*(__IO hw_pit_tctrln_t *) HW_PIT_TCTRLn_ADDR(x, n))
339 #define HW_PIT_TCTRLn_RD(x, n) (HW_PIT_TCTRLn(x, n).U)
340 #define HW_PIT_TCTRLn_WR(x, n, v) (HW_PIT_TCTRLn(x, n).U = (v))
341 #define HW_PIT_TCTRLn_SET(x, n, v) (HW_PIT_TCTRLn_WR(x, n, HW_PIT_TCTRLn_RD(x, n) | (v)))
342 #define HW_PIT_TCTRLn_CLR(x, n, v) (HW_PIT_TCTRLn_WR(x, n, HW_PIT_TCTRLn_RD(x, n) & ~(v)))
343 #define HW_PIT_TCTRLn_TOG(x, n, v) (HW_PIT_TCTRLn_WR(x, n, HW_PIT_TCTRLn_RD(x, n) ^ (v)))
347 * Constants & macros for individual PIT_TCTRLn bitfields
351 * @name Register PIT_TCTRLn, field TEN[0] (RW)
353 * Enables or disables the timer.
356 * - 0 - Timer n is disabled.
357 * - 1 - Timer n is enabled.
360 #define BP_PIT_TCTRLn_TEN (0U) /*!< Bit position for PIT_TCTRLn_TEN. */
361 #define BM_PIT_TCTRLn_TEN (0x00000001U) /*!< Bit mask for PIT_TCTRLn_TEN. */
362 #define BS_PIT_TCTRLn_TEN (1U) /*!< Bit field size in bits for PIT_TCTRLn_TEN. */
364 /*! @brief Read current value of the PIT_TCTRLn_TEN field. */
365 #define BR_PIT_TCTRLn_TEN(x, n) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_TEN))
367 /*! @brief Format value for bitfield PIT_TCTRLn_TEN. */
368 #define BF_PIT_TCTRLn_TEN(v) ((uint32_t)((uint32_t)(v) << BP_PIT_TCTRLn_TEN) & BM_PIT_TCTRLn_TEN)
370 /*! @brief Set the TEN field to a new value. */
371 #define BW_PIT_TCTRLn_TEN(x, n, v) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_TEN) = (v))
375 * @name Register PIT_TCTRLn, field TIE[1] (RW)
377 * When an interrupt is pending, or, TFLGn[TIF] is set, enabling the interrupt
378 * will immediately cause an interrupt event. To avoid this, the associated
379 * TFLGn[TIF] must be cleared first.
382 * - 0 - Interrupt requests from Timer n are disabled.
383 * - 1 - Interrupt will be requested whenever TIF is set.
386 #define BP_PIT_TCTRLn_TIE (1U) /*!< Bit position for PIT_TCTRLn_TIE. */
387 #define BM_PIT_TCTRLn_TIE (0x00000002U) /*!< Bit mask for PIT_TCTRLn_TIE. */
388 #define BS_PIT_TCTRLn_TIE (1U) /*!< Bit field size in bits for PIT_TCTRLn_TIE. */
390 /*! @brief Read current value of the PIT_TCTRLn_TIE field. */
391 #define BR_PIT_TCTRLn_TIE(x, n) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_TIE))
393 /*! @brief Format value for bitfield PIT_TCTRLn_TIE. */
394 #define BF_PIT_TCTRLn_TIE(v) ((uint32_t)((uint32_t)(v) << BP_PIT_TCTRLn_TIE) & BM_PIT_TCTRLn_TIE)
396 /*! @brief Set the TIE field to a new value. */
397 #define BW_PIT_TCTRLn_TIE(x, n, v) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_TIE) = (v))
401 * @name Register PIT_TCTRLn, field CHN[2] (RW)
403 * When activated, Timer n-1 needs to expire before timer n can decrement by 1.
404 * Timer 0 cannot be chained.
407 * - 0 - Timer is not chained.
408 * - 1 - Timer is chained to previous timer. For example, for Channel 2, if this
409 * field is set, Timer 2 is chained to Timer 1.
412 #define BP_PIT_TCTRLn_CHN (2U) /*!< Bit position for PIT_TCTRLn_CHN. */
413 #define BM_PIT_TCTRLn_CHN (0x00000004U) /*!< Bit mask for PIT_TCTRLn_CHN. */
414 #define BS_PIT_TCTRLn_CHN (1U) /*!< Bit field size in bits for PIT_TCTRLn_CHN. */
416 /*! @brief Read current value of the PIT_TCTRLn_CHN field. */
417 #define BR_PIT_TCTRLn_CHN(x, n) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_CHN))
419 /*! @brief Format value for bitfield PIT_TCTRLn_CHN. */
420 #define BF_PIT_TCTRLn_CHN(v) ((uint32_t)((uint32_t)(v) << BP_PIT_TCTRLn_CHN) & BM_PIT_TCTRLn_CHN)
422 /*! @brief Set the CHN field to a new value. */
423 #define BW_PIT_TCTRLn_CHN(x, n, v) (BITBAND_ACCESS32(HW_PIT_TCTRLn_ADDR(x, n), BP_PIT_TCTRLn_CHN) = (v))
425 /*******************************************************************************
426 * HW_PIT_TFLGn - Timer Flag Register
427 ******************************************************************************/
430 * @brief HW_PIT_TFLGn - Timer Flag Register (RW)
432 * Reset value: 0x00000000U
434 * These registers hold the PIT interrupt flags.
436 typedef union _hw_pit_tflgn
439 struct _hw_pit_tflgn_bitfields
441 uint32_t TIF
: 1; /*!< [0] Timer Interrupt Flag */
442 uint32_t RESERVED0
: 31; /*!< [31:1] */
447 * @name Constants and macros for entire PIT_TFLGn register
450 #define HW_PIT_TFLGn_COUNT (4U)
452 #define HW_PIT_TFLGn_ADDR(x, n) ((x) + 0x10CU + (0x10U * (n)))
454 #define HW_PIT_TFLGn(x, n) (*(__IO hw_pit_tflgn_t *) HW_PIT_TFLGn_ADDR(x, n))
455 #define HW_PIT_TFLGn_RD(x, n) (HW_PIT_TFLGn(x, n).U)
456 #define HW_PIT_TFLGn_WR(x, n, v) (HW_PIT_TFLGn(x, n).U = (v))
457 #define HW_PIT_TFLGn_SET(x, n, v) (HW_PIT_TFLGn_WR(x, n, HW_PIT_TFLGn_RD(x, n) | (v)))
458 #define HW_PIT_TFLGn_CLR(x, n, v) (HW_PIT_TFLGn_WR(x, n, HW_PIT_TFLGn_RD(x, n) & ~(v)))
459 #define HW_PIT_TFLGn_TOG(x, n, v) (HW_PIT_TFLGn_WR(x, n, HW_PIT_TFLGn_RD(x, n) ^ (v)))
463 * Constants & macros for individual PIT_TFLGn bitfields
467 * @name Register PIT_TFLGn, field TIF[0] (W1C)
469 * Sets to 1 at the end of the timer period. Writing 1 to this flag clears it.
470 * Writing 0 has no effect. If enabled, or, when TCTRLn[TIE] = 1, TIF causes an
474 * - 0 - Timeout has not yet occurred.
475 * - 1 - Timeout has occurred.
478 #define BP_PIT_TFLGn_TIF (0U) /*!< Bit position for PIT_TFLGn_TIF. */
479 #define BM_PIT_TFLGn_TIF (0x00000001U) /*!< Bit mask for PIT_TFLGn_TIF. */
480 #define BS_PIT_TFLGn_TIF (1U) /*!< Bit field size in bits for PIT_TFLGn_TIF. */
482 /*! @brief Read current value of the PIT_TFLGn_TIF field. */
483 #define BR_PIT_TFLGn_TIF(x, n) (BITBAND_ACCESS32(HW_PIT_TFLGn_ADDR(x, n), BP_PIT_TFLGn_TIF))
485 /*! @brief Format value for bitfield PIT_TFLGn_TIF. */
486 #define BF_PIT_TFLGn_TIF(v) ((uint32_t)((uint32_t)(v) << BP_PIT_TFLGn_TIF) & BM_PIT_TFLGn_TIF)
488 /*! @brief Set the TIF field to a new value. */
489 #define BW_PIT_TFLGn_TIF(x, n, v) (BITBAND_ACCESS32(HW_PIT_TFLGn_ADDR(x, n), BP_PIT_TFLGn_TIF) = (v))
492 /*******************************************************************************
493 * hw_pit_t - module struct
494 ******************************************************************************/
496 * @brief All PIT module registers.
499 typedef struct _hw_pit
501 __IO hw_pit_mcr_t MCR
; /*!< [0x0] PIT Module Control Register */
502 uint8_t _reserved0
[252];
504 __IO hw_pit_ldvaln_t LDVALn
; /*!< [0x100] Timer Load Value Register */
505 __I hw_pit_cvaln_t CVALn
; /*!< [0x104] Current Timer Value Register */
506 __IO hw_pit_tctrln_t TCTRLn
; /*!< [0x108] Timer Control Register */
507 __IO hw_pit_tflgn_t TFLGn
; /*!< [0x10C] Timer Flag Register */
512 /*! @brief Macro to access all PIT registers. */
513 /*! @param x PIT module instance base address. */
514 /*! @return Reference (not a pointer) to the registers struct. To get a pointer to the struct,
515 * use the '&' operator, like <code>&HW_PIT(PIT_BASE)</code>. */
516 #define HW_PIT(x) (*(hw_pit_t *)(x))
518 #endif /* __HW_PIT_REGISTERS_H__ */