1 /*
2 * Copyright 2017, NXP
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #ifndef _FSL_RESET_H_
9 #define _FSL_RESET_H_
10
11 #include <assert.h>
12 #include <stdbool.h>
13 #include <stdint.h>
14 #include <string.h>
15 #include "fsl_device_registers.h"
16
17 /*!
18 * @addtogroup reset
19 * @{
20 */
21
22 /*******************************************************************************
23 * Definitions
24 ******************************************************************************/
25
26 /*! @name Driver version */
27 /*@{*/
28 /*! @brief reset driver version 2.4.0 */
29 #define FSL_RESET_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))
30 /*@}*/
31
32 /*!
33 * @brief Enumeration for peripheral reset control bits
34 *
35 * Defines the enumeration for peripheral reset control bits in PRESETCTRL/ASYNCPRESETCTRL registers
36 */
37 typedef enum _SYSCON_RSTn
38 {
39 kFLASH_RST_N_SHIFT_RSTn = 0 | 4U, /**< Flash controller reset control */
40 kI2C0_RST_N_SHIFT_RSTn = 0 | 5U, /**< I2C0 reset control */
41 kGPIO0_RST_N_SHIFT_RSTn = 0 | 6U, /**< GPIO0 reset control */
42 kSWM_RST_N_SHIFT_RSTn = 0 | 7U, /**< SWM reset control */
43 kWKT_RST_N_SHIFT_RSTn = 0 | 9U, /**< Self-wake-up timer(WKT) reset control */
44 kMRT_RST_N_SHIFT_RSTn = 0 | 10U, /**< Multi-rate timer(MRT) reset control */
45 kSPI0_RST_N_SHIFT_RSTn = 0 | 11U, /**< SPI0 reset control. */
46 kCRC_RST_SHIFT_RSTn = 0 | 13U, /**< CRC reset control */
47 kUART0_RST_N_SHIFT_RSTn = 0 | 14U, /**< UART0 reset control */
48 kUART1_RST_N_SHIFT_RSTn = 0 | 15U, /**< UART1 reset control */
49 kIOCON_RST_N_SHIFT_RSTn = 0 | 18U, /**< IOCON reset control */
50 kACMP_RST_N_SHIFT_RSTn = 0 | 19U, /**< Analog comparator reset control */
51 kADC_RST_N_SHIFT_RSTn = 0 | 24U, /**< ADC reset control */
52 kCTIMER0_RST_N_SHIFT_RSTn = 0 | 25U, /**< CTIMER0 reset control */
53 kGPIOINT_RST_N_SHIFT_RSTn = 0 | 28U, /**< GPIOINT reset control */
54 kFRG0_RST_N_SHIFT_RSTn = 65536 | 3U, /**< Fractional baud rate generator 0 reset control */
55 kOTHER_RST_N_SHIFT_RSTn = (int)0xFFFFFFFFU /**< Some functions don't need reset */
56 } SYSCON_RSTn_t;
57
58 /** Array initializers with peripheral reset bits **/
59 #define FLASH_RSTS_N \
60 { \
61 kFLASH_RST_N_SHIFT_RSTn \
62 } /* Reset bits for Flash peripheral */
63 #define I2C_RSTS_N \
64 { \
65 kI2C0_RST_N_SHIFT_RSTn \
66 } /* Reset bits for I2C peripheral */
67 #define GPIO_RSTS_N \
68 { \
69 kGPIO0_RST_N_SHIFT_RSTn \
70 } /* Reset bits for GPIO peripheral */
71 #define SWM_RSTS_N \
72 { \
73 kSWM_RST_N_SHIFT_RSTn \
74 } /* Reset bits for SWM peripheral */
75 #define WKT_RSTS_N \
76 { \
77 kWKT_RST_N_SHIFT_RSTn \
78 } /* Reset bits for WKT peripheral */
79 #define MRT_RSTS_N \
80 { \
81 kMRT_RST_N_SHIFT_RSTn \
82 } /* Reset bits for MRT peripheral */
83 #define SPI_RSTS_N \
84 { \
85 kSPI0_RST_N_SHIFT_RSTn \
86 } /* Reset bits for SPI peripheral */
87 #define CRC_RSTS_N \
88 { \
89 kCRC_RST_SHIFT_RSTn \
90 } /* Reset bits for CRC peripheral */
91 #define UART_RSTS_N \
92 { \
93 kUART0_RST_N_SHIFT_RSTn, kUART1_RST_N_SHIFT_RSTn \
94 } /* Reset bits for UART peripheral */
95 #define IOCON_RSTS_N \
96 { \
97 kIOCON_RST_N_SHIFT_RSTn \
98 } /* Reset bits for IOCON peripheral */
99 #define ACMP_RSTS_N \
100 { \
101 kACMP_RST_N_SHIFT_RSTn \
102 } /* Reset bits for ACMP peripheral */
103 #define ADC_RSTS_N \
104 { \
105 kADC_RST_N_SHIFT_RSTn \
106 } /* Reset bits for ADC peripheral */
107 #define CTIMER_RSTS_N \
108 { \
109 kCTIMER0_RST_N_SHIFT_RSTn \
110 } /* Reset bits for CTIMER peripheral */
111 #define GPIOINT_RSTS_N \
112 { \
113 kGPIOINT_RST_N_SHIFT_RSTn \
114 } /* Reset bits for GPIOINT peripheral */
115 #define FRG_RSTS_N \
116 { \
117 kFRG0_RST_N_SHIFT_RSTn \
118 } /* Reset bits for FRG peripheral */
119 #define WWDT_RSTS_N \
120 { \
121 kOTHER_RST_N_SHIFT_RSTn \
122 } /* WWDT don't need reset */
123 typedef SYSCON_RSTn_t reset_ip_name_t;
124
125 /*******************************************************************************
126 * API
127 ******************************************************************************/
128 #if defined(__cplusplus)
129 extern "C" {
130 #endif
131
132 /*!
133 * @brief Assert reset to peripheral.
134 *
135 * Asserts reset signal to specified peripheral module.
136 *
137 * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
138 * and reset bit position in the reset register.
139 */
140 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
141
142 /*!
143 * @brief Clear reset to peripheral.
144 *
145 * Clears reset signal to specified peripheral module, allows it to operate.
146 *
147 * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
148 * and reset bit position in the reset register.
149 */
150 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
151
152 /*!
153 * @brief Reset peripheral module.
154 *
155 * Reset peripheral module.
156 *
157 * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
158 * and reset bit position in the reset register.
159 */
160 void RESET_PeripheralReset(reset_ip_name_t peripheral);
161
162 /*!
163 * @brief Release peripheral module.
164 *
165 * Release peripheral module.
166 *
167 * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
168 * and reset bit position in the reset register.
169 */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)170 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
171 {
172 RESET_ClearPeripheralReset(peripheral);
173 }
174
175 #if defined(__cplusplus)
176 }
177 #endif
178
179 /*! @} */
180
181 #endif /* _FSL_RESET_H_ */
182