]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_power.h
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / drivers / fsl_power.h
1 /*\r
2  * Copyright 2017, NXP\r
3  * All rights reserved.\r
4  *\r
5  * SPDX-License-Identifier: BSD-3-Clause\r
6  */\r
7 #ifndef _FSL_POWER_H_\r
8 #define _FSL_POWER_H_\r
9 \r
10 #include "fsl_common.h"\r
11 #include "fsl_device_registers.h"\r
12 #include <stdint.h>\r
13 \r
14 /*!\r
15  * @addtogroup power\r
16  * @{\r
17  */\r
18 /*******************************************************************************\r
19  * Definitions\r
20  ******************************************************************************/\r
21 \r
22 /*! @name Driver version */\r
23 /*@{*/\r
24 /*! @brief power driver version 1.0.0. */\r
25 #define FSL_POWER_DRIVER_VERSION (MAKE_VERSION(1, 0, 0))\r
26 /*@}*/\r
27 \r
28 /* Power mode configuration API parameter */\r
29 typedef enum _power_mode_config\r
30 {\r
31     kPmu_Sleep          = 0U,\r
32     kPmu_Deep_Sleep     = 1U,\r
33     kPmu_PowerDown      = 2U,\r
34     kPmu_Deep_PowerDown = 3U,\r
35 } power_mode_cfg_t;\r
36 \r
37 /**\r
38  * @brief Analog components power modes control during low power modes\r
39  */\r
40 typedef enum pd_bits\r
41 {\r
42     kPDRUNCFG_PD_DCDC         = (1UL << 0),\r
43     kPDRUNCFG_PD_BIAS         = (1UL << 1),\r
44     kPDRUNCFG_PD_BODCORE      = (1UL << 2),\r
45     kPDRUNCFG_PD_BODVBAT      = (1UL << 3),\r
46     kPDRUNCFG_PD_FRO1M        = (1UL << 4),\r
47     kPDRUNCFG_PD_FRO192M      = (1UL << 5),\r
48     kPDRUNCFG_PD_FRO32K       = (1UL << 6),\r
49     kPDRUNCFG_PD_XTAL32K      = (1UL << 7),\r
50     kPDRUNCFG_PD_XTAL32M      = (1UL << 8),\r
51     kPDRUNCFG_PD_PLL0         = (1UL << 9),\r
52     kPDRUNCFG_PD_PLL1         = (1UL << 10),\r
53     kPDRUNCFG_PD_USB0_PHY     = (1UL << 11),\r
54     kPDRUNCFG_PD_USB1_PHY     = (1UL << 12),\r
55     kPDRUNCFG_PD_COMP         = (1UL << 13),\r
56     kPDRUNCFG_PD_TEMPSENS     = (1UL << 14),\r
57     kPDRUNCFG_PD_GPADC        = (1UL << 15),\r
58     kPDRUNCFG_PD_LDOMEM       = (1UL << 16),\r
59     kPDRUNCFG_PD_LDODEEPSLEEP = (1UL << 17),\r
60     kPDRUNCFG_PD_LDOUSBHS     = (1UL << 18),\r
61     kPDRUNCFG_PD_LDOGPADC     = (1UL << 19),\r
62     kPDRUNCFG_PD_LDOXO32M     = (1UL << 20),\r
63     kPDRUNCFG_PD_LDOFLASHNV   = (1UL << 21),\r
64     kPDRUNCFG_PD_RNG          = (1UL << 22),\r
65     kPDRUNCFG_PD_PLL0_SSCG    = (1UL << 23),\r
66     kPDRUNCFG_PD_ROM          = (1UL << 24),\r
67     /*\r
68        This enum member has no practical meaning,it is used to avoid MISRA issue,\r
69        user should not trying to use it.\r
70        */\r
71     kPDRUNCFG_ForceUnsigned = 0x80000000U,\r
72 } pd_bit_t;\r
73 \r
74 /*@brief BOD VBAT level */\r
75 typedef enum _power_bod_vbat_level\r
76 {\r
77     kPOWER_BodVbatLevel1000mv = 0,  /*!< Brown out detector VBAT level 1V */\r
78     kPOWER_BodVbatLevel1100mv = 1,  /*!< Brown out detector VBAT level 1.1V */\r
79     kPOWER_BodVbatLevel1200mv = 2,  /*!< Brown out detector VBAT level 1.2V */\r
80     kPOWER_BodVbatLevel1300mv = 3,  /*!< Brown out detector VBAT level 1.3V */\r
81     kPOWER_BodVbatLevel1400mv = 4,  /*!< Brown out detector VBAT level 1.4V */\r
82     kPOWER_BodVbatLevel1500mv = 5,  /*!< Brown out detector VBAT level 1.5V */\r
83     kPOWER_BodVbatLevel1600mv = 6,  /*!< Brown out detector VBAT level 1.6V */\r
84     kPOWER_BodVbatLevel1650mv = 7,  /*!< Brown out detector VBAT level 1.65V */\r
85     kPOWER_BodVbatLevel1700mv = 8,  /*!< Brown out detector VBAT level 1.7V */\r
86     kPOWER_BodVbatLevel1750mv = 9,  /*!< Brown out detector VBAT level 1.75V */\r
87     kPOWER_BodVbatLevel1800mv = 10, /*!< Brown out detector VBAT level 1.8V */\r
88     kPOWER_BodVbatLevel1900mv = 11, /*!< Brown out detector VBAT level 1.9V */\r
89     kPOWER_BodVbatLevel2000mv = 12, /*!< Brown out detector VBAT level 2V */\r
90     kPOWER_BodVbatLevel2100mv = 13, /*!< Brown out detector VBAT level 2.1V */\r
91     kPOWER_BodVbatLevel2200mv = 14, /*!< Brown out detector VBAT level 2.2V */\r
92     kPOWER_BodVbatLevel2300mv = 15, /*!< Brown out detector VBAT level 2.3V */\r
93     kPOWER_BodVbatLevel2400mv = 16, /*!< Brown out detector VBAT level 2.4V */\r
94     kPOWER_BodVbatLevel2500mv = 17, /*!< Brown out detector VBAT level 2.5V */\r
95     kPOWER_BodVbatLevel2600mv = 18, /*!< Brown out detector VBAT level 2.6V */\r
96     kPOWER_BodVbatLevel2700mv = 19, /*!< Brown out detector VBAT level 2.7V */\r
97     kPOWER_BodVbatLevel2806mv = 20, /*!< Brown out detector VBAT level 2.806V */\r
98     kPOWER_BodVbatLevel2900mv = 21, /*!< Brown out detector VBAT level 2.9V */\r
99     kPOWER_BodVbatLevel3000mv = 22, /*!< Brown out detector VBAT level 3.0V */\r
100     kPOWER_BodVbatLevel3100mv = 23, /*!< Brown out detector VBAT level 3.1V */\r
101     kPOWER_BodVbatLevel3200mv = 24, /*!< Brown out detector VBAT level 3.2V */\r
102     kPOWER_BodVbatLevel3300mv = 25, /*!< Brown out detector VBAT level 3.3V */\r
103 } power_bod_vbat_level_t;\r
104 \r
105 /*@brief BOD Hysteresis control */\r
106 typedef enum _power_bod_hyst\r
107 {\r
108     kPOWER_BodHystLevel25mv  = 0U, /*!< BOD Hysteresis control level 25mv */\r
109     kPOWER_BodHystLevel50mv  = 1U, /*!< BOD Hysteresis control level 50mv */\r
110     kPOWER_BodHystLevel75mv  = 2U, /*!< BOD Hysteresis control level 75mv */\r
111     kPOWER_BodHystLevel100mv = 3U, /*!< BOD Hysteresis control level 100mv */\r
112 } power_bod_hyst_t;\r
113 \r
114 /*@brief BOD core level */\r
115 typedef enum _power_bod_core_level\r
116 {\r
117     kPOWER_BodCoreLevel600mv = 0, /*!< Brown out detector core level 600mV */\r
118     kPOWER_BodCoreLevel650mv = 1, /*!< Brown out detector core level 650mV */\r
119     kPOWER_BodCoreLevel700mv = 2, /*!< Brown out detector core level 700mV */\r
120     kPOWER_BodCoreLevel750mv = 3, /*!< Brown out detector core level 750mV */\r
121     kPOWER_BodCoreLevel800mv = 4, /*!< Brown out detector core level 800mV */\r
122     kPOWER_BodCoreLevel850mv = 5, /*!< Brown out detector core level 850mV */\r
123     kPOWER_BodCoreLevel900mv = 6, /*!< Brown out detector core level 900mV */\r
124     kPOWER_BodCoreLevel950mv = 7, /*!< Brown out detector core level 950mV */\r
125 } power_bod_core_level_t;\r
126 \r
127 /**\r
128  * @brief SRAM instances retention control during low power modes\r
129  */\r
130 #define LOWPOWER_SRAMRETCTRL_RETEN_RAMX0 \\r
131     (1UL << 0) /*!< Enable SRAMX_0 retention when entering in Low power modes       */\r
132 #define LOWPOWER_SRAMRETCTRL_RETEN_RAMX1 \\r
133     (1UL << 1) /*!< Enable SRAMX_1 retention when entering in Low power modes       */\r
134 #define LOWPOWER_SRAMRETCTRL_RETEN_RAMX2 \\r
135     (1UL << 2) /*!< Enable SRAMX_2 retention when entering in Low power modes       */\r
136 #define LOWPOWER_SRAMRETCTRL_RETEN_RAMX3 \\r
137     (1UL << 3) /*!< Enable SRAMX_3 retention when entering in Low power modes       */\r
138 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM00 \\r
139     (1UL << 4) /*!< Enable SRAM0_0 retention when entering in Low power modes       */\r
140 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM01 \\r
141     (1UL << 5) /*!< Enable SRAM0_1 retention when entering in Low power modes       */\r
142 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM10 \\r
143     (1UL << 6) /*!< Enable SRAM1_0 retention when entering in Low power modes       */\r
144 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM20 \\r
145     (1UL << 7) /*!< Enable SRAM2_0 retention when entering in Low power modes       */\r
146 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM30 \\r
147     (1UL << 8) /*!< Enable SRAM3_0 retention when entering in Low power modes       */\r
148 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM31 \\r
149     (1UL << 9) /*!< Enable SRAM3_1 retention when entering in Low power modes       */\r
150 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM40 \\r
151     (1UL << 10) /*!< Enable SRAM4_0 retention when entering in Low power modes       */\r
152 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM41 \\r
153     (1UL << 11) /*!< Enable SRAM4_1 retention when entering in Low power modes       */\r
154 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM42 \\r
155     (1UL << 12) /*!< Enable SRAM4_2 retention when entering in Low power modes       */\r
156 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM43 \\r
157     (1UL << 13) /*!< Enable SRAM4_3 retention when entering in Low power modes       */\r
158 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM_USB_HS \\r
159     (1UL << 14) /*!< Enable SRAM USB HS retention when entering in Low power modes   */\r
160 #define LOWPOWER_SRAMRETCTRL_RETEN_RAM_PUF \\r
161     (1UL << 15) /*!< Enable SRAM PUFF retention when entering in Low power modes     */\r
162 \r
163 /**\r
164  * @brief Low Power Modes Wake up sources\r
165  */\r
166 #define WAKEUP_SYS (1ULL << 0) /*!< [SLEEP, DEEP SLEEP                             ] */ /* WWDT0_IRQ and BOD_IRQ*/\r
167 #define WAKEUP_SDMA0 (1ULL << 1)           /*!< [SLEEP, DEEP SLEEP                             ] */\r
168 #define WAKEUP_GPIO_GLOBALINT0 (1ULL << 2) /*!< [SLEEP, DEEP SLEEP, POWER DOWN                 ] */\r
169 #define WAKEUP_GPIO_GLOBALINT1 (1ULL << 3) /*!< [SLEEP, DEEP SLEEP, POWER DOWN                 ] */\r
170 #define WAKEUP_GPIO_INT0_0 (1ULL << 4)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
171 #define WAKEUP_GPIO_INT0_1 (1ULL << 5)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
172 #define WAKEUP_GPIO_INT0_2 (1ULL << 6)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
173 #define WAKEUP_GPIO_INT0_3 (1ULL << 7)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
174 #define WAKEUP_UTICK (1ULL << 8)           /*!< [SLEEP,                                        ] */\r
175 #define WAKEUP_MRT (1ULL << 9)             /*!< [SLEEP,                                        ] */\r
176 #define WAKEUP_CTIMER0 (1ULL << 10)        /*!< [SLEEP, DEEP SLEEP                             ] */\r
177 #define WAKEUP_CTIMER1 (1ULL << 11)        /*!< [SLEEP, DEEP SLEEP                             ] */\r
178 #define WAKEUP_SCT (1ULL << 12)            /*!< [SLEEP,                                        ] */\r
179 #define WAKEUP_CTIMER3 (1ULL << 13)        /*!< [SLEEP, DEEP SLEEP                             ] */\r
180 #define WAKEUP_FLEXCOMM0 (1ULL << 14)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
181 #define WAKEUP_FLEXCOMM1 (1ULL << 15)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
182 #define WAKEUP_FLEXCOMM2 (1ULL << 16)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
183 #define WAKEUP_FLEXCOMM3 (1ULL << 17)      /*!< [SLEEP, DEEP SLEEP, POWER DOWN                 ] */\r
184 #define WAKEUP_FLEXCOMM4 (1ULL << 18)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
185 #define WAKEUP_FLEXCOMM5 (1ULL << 19)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
186 #define WAKEUP_FLEXCOMM6 (1ULL << 20)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
187 #define WAKEUP_FLEXCOMM7 (1ULL << 21)      /*!< [SLEEP, DEEP SLEEP                             ] */\r
188 #define WAKEUP_ADC (1ULL << 22)            /*!< [SLEEP,                                        ] */\r
189 #define WAKEUP_ACMP_CAPT (1ULL << 24)      /*!< [SLEEP, DEEP SLEEP, POWER DOWN                 ] */\r
190 // reserved                                         (1ULL << 25)\r
191 // reserved                                         (1ULL << 26)\r
192 #define WAKEUP_USB0_NEEDCLK (1ULL << 27)          /*!< [SLEEP, DEEP SLEEP                             ] */\r
193 #define WAKEUP_USB0 (1ULL << 28)                  /*!< [SLEEP, DEEP SLEEP                             ] */\r
194 #define WAKEUP_RTC_LITE_ALARM_WAKEUP (1ULL << 29) /*!< [SLEEP, DEEP SLEEP, POWER DOWN, DEEP POWER DOWN] */\r
195 #define WAKEUP_EZH_ARCH_B (1ULL << 30)            /*!< [SLEEP,                                        ] */\r
196 #define WAKEUP_WAKEUP_MAILBOX (1ULL << 31)        /*!< [SLEEP, DEEP SLEEP, POWER DOWN                 ] */\r
197 #define WAKEUP_GPIO_INT0_4 (1ULL << 32)           /*!< [SLEEP, DEEP SLEEP                             ] */\r
198 #define WAKEUP_GPIO_INT0_5 (1ULL << 33)           /*!< [SLEEP, DEEP SLEEP                             ] */\r
199 #define WAKEUP_GPIO_INT0_6 (1ULL << 34)           /*!< [SLEEP, DEEP SLEEP                             ] */\r
200 #define WAKEUP_GPIO_INT0_7 (1ULL << 35)           /*!< [SLEEP, DEEP SLEEP                             ] */\r
201 #define WAKEUP_CTIMER2 (1ULL << 36)               /*!< [SLEEP, DEEP SLEEP                             ] */\r
202 #define WAKEUP_CTIMER4 (1ULL << 37)               /*!< [SLEEP, DEEP SLEEP                             ] */\r
203 #define WAKEUP_OS_EVENT_TIMER (1ULL << 38)        /*!< [SLEEP, DEEP SLEEP, POWER DOWN, DEEP POWER DOWN] */\r
204 // reserved                                         (1ULL << 39)\r
205 // reserved                                         (1ULL << 40)\r
206 // reserved                                         (1ULL << 41)\r
207 #define WAKEUP_SDIO (1ULL << 42) /*!< [SLEEP,                                        ] */\r
208 // reserved                                         (1ULL << 43)\r
209 // reserved                                         (1ULL << 44)\r
210 // reserved                                         (1ULL << 45)\r
211 // reserved                                         (1ULL << 46)\r
212 #define WAKEUP_USB1 (1ULL << 47)                /*!< [SLEEP, DEEP SLEEP                             ] */\r
213 #define WAKEUP_USB1_NEEDCLK (1ULL << 48)        /*!< [SLEEP, DEEP SLEEP                             ] */\r
214 #define WAKEUP_SEC_HYPERVISOR_CALL (1ULL << 49) /*!< [SLEEP,                                        ] */\r
215 #define WAKEUP_SEC_GPIO_INT0_0 (1ULL << 50)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
216 #define WAKEUP_SEC_GPIO_INT0_1 (1ULL << 51)     /*!< [SLEEP, DEEP SLEEP                             ] */\r
217 #define WAKEUP_PLU (1ULL << 52)                 /*!< [SLEEP, DEEP SLEEP                             ] */\r
218 #define WAKEUP_SEC_VIO (1ULL << 53)\r
219 #define WAKEUP_SHA (1ULL << 54)     /*!< [SLEEP,                                        ] */\r
220 #define WAKEUP_CASPER (1ULL << 55)  /*!< [SLEEP,                                        ] */\r
221 #define WAKEUP_PUFF (1ULL << 56)    /*!< [SLEEP,                                        ] */\r
222 #define WAKEUP_PQ (1ULL << 57)      /*!< [SLEEP,                                        ] */\r
223 #define WAKEUP_SDMA1 (1ULL << 58)   /*!< [SLEEP, DEEP SLEEP                             ] */\r
224 #define WAKEUP_LSPI_HS (1ULL << 59) /*!< [SLEEP, DEEP SLEEP                             ] */\r
225 // reserved WAKEUP_PVTVF0_AMBER                     (1ULL << 60)\r
226 // reserved WAKEUP_PVTVF0_RED                       (1ULL << 61)\r
227 // reserved WAKEUP_PVTVF1_AMBER                     (1ULL << 62)\r
228 #define WAKEUP_ALLWAKEUPIOS (1ULL << 63) /*!< [                             , DEEP POWER DOWN] */\r
229 \r
230 /**\r
231  * @brief Sleep Postpone\r
232  */\r
233 #define LOWPOWER_HWWAKE_FORCED (1UL << 0) /*!< Force peripheral clocking to stay on during deep-sleep mode. */\r
234 #define LOWPOWER_HWWAKE_PERIPHERALS                                                                                \\r
235     (1UL << 1) /*!< Wake for Flexcomms. Any Flexcomm FIFO reaching the level specified by its own TXLVL will cause \\r
236                   peripheral clocking to wake up temporarily while the related status is asserted */\r
237 #define LOWPOWER_HWWAKE_SDMA0                                                                                 \\r
238     (1UL << 3) /*!< Wake for DMA0. DMA0 being busy will cause peripheral clocking to remain running until DMA \\r
239                   completes. Used in conjonction with LOWPOWER_HWWAKE_PERIPHERALS */\r
240 #define LOWPOWER_HWWAKE_SDMA1                                                                                 \\r
241     (1UL << 5) /*!< Wake for DMA1. DMA0 being busy will cause peripheral clocking to remain running until DMA \\r
242                   completes. Used in conjonction with LOWPOWER_HWWAKE_PERIPHERALS */\r
243 #define LOWPOWER_HWWAKE_ENABLE_FRO192M                                                                  \\r
244     (1UL << 31) /*!< Need to be set if FRO192M is disable - via PDCTRL0 - in Deep Sleep mode and any of \\r
245                    LOWPOWER_HWWAKE_PERIPHERALS, LOWPOWER_HWWAKE_SDMA0 or LOWPOWER_HWWAKE_SDMA1 is set */\r
246 \r
247 #define LOWPOWER_CPURETCTRL_ENA_DISABLE 0 /*!< In POWER DOWN mode, CPU Retention is disabled */\r
248 #define LOWPOWER_CPURETCTRL_ENA_ENABLE 1  /*!< In POWER DOWN mode, CPU Retention is enabled  */\r
249 /**\r
250  * @brief Wake up I/O sources\r
251  */\r
252 #define LOWPOWER_WAKEUPIOSRC_PIO0_INDEX 0 /*!< Pin P1( 1) */\r
253 #define LOWPOWER_WAKEUPIOSRC_PIO1_INDEX 2 /*!< Pin P0(28) */\r
254 #define LOWPOWER_WAKEUPIOSRC_PIO2_INDEX 4 /*!< Pin P1(18) */\r
255 #define LOWPOWER_WAKEUPIOSRC_PIO3_INDEX 6 /*!< Pin P1(30) */\r
256 \r
257 #define LOWPOWER_WAKEUPIOSRC_DISABLE 0        /*!< Wake up is disable                      */\r
258 #define LOWPOWER_WAKEUPIOSRC_RISING 1         /*!< Wake up on rising edge                  */\r
259 #define LOWPOWER_WAKEUPIOSRC_FALLING 2        /*!< Wake up on falling edge                 */\r
260 #define LOWPOWER_WAKEUPIOSRC_RISING_FALLING 3 /*!< Wake up on both rising or falling edges */\r
261 \r
262 #define LOWPOWER_WAKEUPIO_PIO0_PULLUPDOWN_INDEX 8  /*!< Wake-up I/O 0 pull-up/down configuration index */\r
263 #define LOWPOWER_WAKEUPIO_PIO1_PULLUPDOWN_INDEX 9  /*!< Wake-up I/O 1 pull-up/down configuration index */\r
264 #define LOWPOWER_WAKEUPIO_PIO2_PULLUPDOWN_INDEX 10 /*!< Wake-up I/O 2 pull-up/down configuration index */\r
265 #define LOWPOWER_WAKEUPIO_PIO3_PULLUPDOWN_INDEX 11 /*!< Wake-up I/O 3 pull-up/down configuration index */\r
266 \r
267 #define LOWPOWER_WAKEUPIO_PIO0_PULLUPDOWN_MASK \\r
268     (1UL << LOWPOWER_WAKEUPIO_PIO0_PULLUPDOWN_INDEX) /*!< Wake-up I/O 0 pull-up/down mask */\r
269 #define LOWPOWER_WAKEUPIO_PIO1_PULLUPDOWN_MASK \\r
270     (1UL << LOWPOWER_WAKEUPIO_PIO1_PULLUPDOWN_INDEX) /*!< Wake-up I/O 1 pull-up/down mask */\r
271 #define LOWPOWER_WAKEUPIO_PIO2_PULLUPDOWN_MASK \\r
272     (1UL << LOWPOWER_WAKEUPIO_PIO2_PULLUPDOWN_INDEX) /*!< Wake-up I/O 2 pull-up/down mask */\r
273 #define LOWPOWER_WAKEUPIO_PIO3_PULLUPDOWN_MASK \\r
274     (1UL << LOWPOWER_WAKEUPIO_PIO3_PULLUPDOWN_INDEX) /*!< Wake-up I/O 3 pull-up/down mask */\r
275 \r
276 #define LOWPOWER_WAKEUPIO_PULLDOWN 0 /*!< Select pull-down                */\r
277 #define LOWPOWER_WAKEUPIO_PULLUP 1   /*!< Select pull-up                  */\r
278 \r
279 #define LOWPOWER_WAKEUPIO_PIO0_DISABLEPULLUPDOWN_INDEX \\r
280     12 /*!< Wake-up I/O 0 pull-up/down disable/enable control index */\r
281 #define LOWPOWER_WAKEUPIO_PIO1_DISABLEPULLUPDOWN_INDEX \\r
282     13 /*!< Wake-up I/O 1 pull-up/down disable/enable control index */\r
283 #define LOWPOWER_WAKEUPIO_PIO2_DISABLEPULLUPDOWN_INDEX \\r
284     14 /*!< Wake-up I/O 2 pull-up/down disable/enable control index */\r
285 #define LOWPOWER_WAKEUPIO_PIO3_DISABLEPULLUPDOWN_INDEX \\r
286     15 /*!< Wake-up I/O 3 pull-up/down disable/enable control index */\r
287 #define LOWPOWER_WAKEUPIO_PIO0_DISABLEPULLUPDOWN_MASK \\r
288     (1UL << LOWPOWER_WAKEUPIO_PIO0_DISABLEPULLUPDOWN_INDEX) /*!< Wake-up I/O 0 pull-up/down disable/enable mask */\r
289 #define LOWPOWER_WAKEUPIO_PIO1_DISABLEPULLUPDOWN_MASK \\r
290     (1UL << LOWPOWER_WAKEUPIO_PIO1_DISABLEPULLUPDOWN_INDEX) /*!< Wake-up I/O 1 pull-up/down disable/enable mask */\r
291 #define LOWPOWER_WAKEUPIO_PIO2_DISABLEPULLUPDOWN_MASK \\r
292     (1UL << LOWPOWER_WAKEUPIO_PIO2_DISABLEPULLUPDOWN_INDEX) /*!< Wake-up I/O 2 pull-up/down disable/enable mask */\r
293 #define LOWPOWER_WAKEUPIO_PIO3_DISABLEPULLUPDOWN_MASK \\r
294     (1UL << LOWPOWER_WAKEUPIO_PIO3_DISABLEPULLUPDOWN_INDEX) /*!< Wake-up I/O 3 pull-up/down disable/enable mask */\r
295 \r
296 #ifdef __cplusplus\r
297 extern "C" {\r
298 #endif\r
299 /*******************************************************************************\r
300  * API\r
301  ******************************************************************************/\r
302 \r
303 /*!\r
304  * @brief API to enable PDRUNCFG bit in the Syscon. Note that enabling the bit powers down the peripheral\r
305  *\r
306  * @param en    peripheral for which to enable the PDRUNCFG bit\r
307  * @return none\r
308  */\r
309 static inline void POWER_EnablePD(pd_bit_t en)\r
310 {\r
311     /* PDRUNCFGSET */\r
312     PMC->PDRUNCFGSET0 = (uint32_t)en;\r
313 }\r
314 \r
315 /*!\r
316  * @brief API to disable PDRUNCFG bit in the Syscon. Note that disabling the bit powers up the peripheral\r
317  *\r
318  * @param en    peripheral for which to disable the PDRUNCFG bit\r
319  * @return none\r
320  */\r
321 static inline void POWER_DisablePD(pd_bit_t en)\r
322 {\r
323     /* PDRUNCFGCLR */\r
324     PMC->PDRUNCFGCLR0 = (uint32_t)en;\r
325 }\r
326 \r
327 /*!\r
328  * @brief set BOD VBAT level.\r
329  *\r
330  * @param level BOD detect level\r
331  * @param hyst BoD Hysteresis control\r
332  * @param enBodVbatReset VBAT brown out detect reset\r
333  */\r
334 static inline void POWER_SetBodVbatLevel(power_bod_vbat_level_t level, power_bod_hyst_t hyst, bool enBodVbatReset)\r
335 {\r
336     PMC->BODVBAT = (PMC->BODVBAT & (~(PMC_BODVBAT_TRIGLVL_MASK | PMC_BODVBAT_HYST_MASK))) | PMC_BODVBAT_TRIGLVL(level) |\r
337                    PMC_BODVBAT_HYST(hyst);\r
338     PMC->RESETCTRL =\r
339         (PMC->RESETCTRL & (~PMC_RESETCTRL_BODVBATRESETENABLE_MASK)) | PMC_RESETCTRL_BODVBATRESETENABLE(enBodVbatReset);\r
340 }\r
341 \r
342 #if defined(PMC_BODCORE_TRIGLVL_MASK)\r
343 /*!\r
344  * @brief set BOD core level.\r
345  *\r
346  * @param level BOD detect level\r
347  * @param hyst BoD Hysteresis control\r
348  * @param enBodCoreReset core brown out detect reset\r
349  */\r
350 static inline void POWER_SetBodCoreLevel(power_bod_core_level_t level, power_bod_hyst_t hyst, bool enBodCoreReset)\r
351 {\r
352     PMC->BODCORE = (PMC->BODCORE & (~(PMC_BODCORE_TRIGLVL_MASK | PMC_BODCORE_HYST_MASK))) | PMC_BODCORE_TRIGLVL(level) |\r
353                    PMC_BODCORE_HYST(hyst);\r
354     PMC->RESETCTRL =\r
355         (PMC->RESETCTRL & (~PMC_RESETCTRL_BODCORERESETENABLE_MASK)) | PMC_RESETCTRL_BODCORERESETENABLE(enBodCoreReset);\r
356 }\r
357 #endif\r
358 \r
359 /*!\r
360  * @brief API to enable deep sleep bit in the ARM Core.\r
361  *\r
362  * @param none\r
363  * @return none\r
364  */\r
365 static inline void POWER_EnableDeepSleep(void)\r
366 {\r
367     SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;\r
368 }\r
369 \r
370 /*!\r
371  * @brief API to disable deep sleep bit in the ARM Core.\r
372  *\r
373  * @param none\r
374  * @return none\r
375  */\r
376 static inline void POWER_DisableDeepSleep(void)\r
377 {\r
378     SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;\r
379 }\r
380 \r
381 /**\r
382  * @brief   Shut off the Flash and execute the _WFI(), then power up the Flash after wake-up event\r
383  *  This MUST BE EXECUTED outside the Flash:\r
384  *  either from ROM or from SRAM. The rest could stay in Flash. But, for consistency, it is\r
385  *  preferable to have all functions defined in this file implemented in ROM.\r
386  * @param   None\r
387  * @return  Nothing\r
388  */\r
389 void POWER_CycleCpuAndFlash(void);\r
390 \r
391 /**\r
392  * @brief   Configures and enters in DEEP-SLEEP low power mode\r
393  * @param   exclude_from_pd:\r
394  * @param   sram_retention_ctrl:\r
395  * @param   wakeup_interrupts:\r
396  * @param   hardware_wake_ctrl:\r
397 \r
398  * @return  Nothing\r
399  *\r
400  *          !!! IMPORTANT NOTES :\r
401  0 - CPU0 & System CLock frequency is switched to FRO12MHz and is NOT restored back by the API.\r
402  *           1 - CPU0 Interrupt Enable registers (NVIC->ISER) are modified by this function. They are restored back in\r
403  case of CPU retention or if POWERDOWN is not taken (for instance because an interrupt is pending).\r
404  *           2 - The Non Maskable Interrupt (NMI) is disabled and its configuration before calling this function will be\r
405  restored back if POWERDOWN is not taken (for instance because an RTC or OSTIMER interrupt is pending).\r
406  *           3 - The HARD FAULT handler should execute from SRAM. (The Hard fault handler should initiate a full chip\r
407  reset) reset)\r
408  */\r
409 void POWER_EnterDeepSleep(uint32_t exclude_from_pd,\r
410                           uint32_t sram_retention_ctrl,\r
411                           uint64_t wakeup_interrupts,\r
412                           uint32_t hardware_wake_ctrl);\r
413 \r
414 /**\r
415  * @brief   Configures and enters in POWERDOWN low power mode\r
416  * @param   exclude_from_pd:\r
417  * @param   sram_retention_ctrl:\r
418  * @param   wakeup_interrupts:\r
419  * @param   cpu_retention_ctrl:  0 = CPU retention is disable / 1 = CPU retention is enabled, all other values are\r
420  RESERVED.\r
421 \r
422  * @return  Nothing\r
423  *\r
424  *          !!! IMPORTANT NOTES :\r
425  0 - CPU0 & System CLock frequency is switched to FRO12MHz and is NOT restored back by the API.\r
426  *           1 - CPU0 Interrupt Enable registers (NVIC->ISER) are modified by this function. They are restored back in\r
427  case of CPU retention or if POWERDOWN is not taken (for instance because an interrupt is pending).\r
428  *           2 - The Non Maskable Interrupt (NMI) is disabled and its configuration before calling this function will be\r
429  restored back if POWERDOWN is not taken (for instance because an RTC or OSTIMER interrupt is pending).\r
430  *           3 - In case of CPU retention, it is the responsability of the user to make sure that SRAM instance\r
431  containing the stack used to call this function WILL BE preserved during low power (via parameter\r
432  "sram_retention_ctrl")\r
433  *           4 - The HARD FAULT handler should execute from SRAM. (The Hard fault handler should initiate a full chip\r
434  reset) reset)\r
435  */\r
436 \r
437 void POWER_EnterPowerDown(uint32_t exclude_from_pd,\r
438                           uint32_t sram_retention_ctrl,\r
439                           uint64_t wakeup_interrupts,\r
440                           uint32_t cpu_retention_ctrl);\r
441 \r
442 /**\r
443  * @brief   Configures and enters in DEEPPOWERDOWN low power mode\r
444  * @param   exclude_from_pd:\r
445  * @param   sram_retention_ctrl:\r
446  * @param   wakeup_interrupts:\r
447  * @param   wakeup_io_ctrl:\r
448 \r
449  * @return  Nothing\r
450  *\r
451  *          !!! IMPORTANT NOTES :\r
452  0 - CPU0 & System CLock frequency is switched to FRO12MHz and is NOT restored back by the API.\r
453  *           1 - CPU0 Interrupt Enable registers (NVIC->ISER) are modified by this function. They are restored back if\r
454  DEEPPOWERDOWN is not taken (for instance because an RTC or OSTIMER interrupt is pending).\r
455  *           2 - The Non Maskable Interrupt (NMI) is disabled and its configuration before calling this function will be\r
456  restored back if DEEPPOWERDOWN is not taken (for instance because an RTC or OSTIMER interrupt is pending).\r
457  *           3 - The HARD FAULT handler should execute from SRAM. (The Hard fault handler should initiate a full chip\r
458  reset)\r
459  */\r
460 void POWER_EnterDeepPowerDown(uint32_t exclude_from_pd,\r
461                               uint32_t sram_retention_ctrl,\r
462                               uint64_t wakeup_interrupts,\r
463                               uint32_t wakeup_io_ctrl);\r
464 \r
465 /**\r
466  * @brief   Configures and enters in SLEEP low power mode\r
467  * @param   :\r
468  * @return  Nothing\r
469  */\r
470 void POWER_EnterSleep(void);\r
471 \r
472 /*!\r
473  * @brief Power Library API to choose normal regulation and set the voltage for the desired operating frequency.\r
474  *\r
475  * @param system_freq_hz  - The desired frequency (in Hertz) at which the part would like to operate,\r
476  *                note that the voltage and flash wait states should be set before changing frequency\r
477  * @return none\r
478  */\r
479 void POWER_SetVoltageForFreq(uint32_t system_freq_hz);\r
480 \r
481 /*!\r
482  * @brief Power Library API to return the library version.\r
483  *\r
484  * @param none\r
485  * @return version number of the power library\r
486  */\r
487 uint32_t POWER_GetLibVersion(void);\r
488 \r
489 /**\r
490  * @brief   Sets board-specific trim values for 16MHz XTAL\r
491  * @param   pi32_32MfXtalIecLoadpF_x100 Load capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF becomes 120\r
492  * @param   pi32_32MfXtalPPcbParCappF_x100 PCB +ve parasitic capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF\r
493  * becomes 120\r
494  * @param   pi32_32MfXtalNPcbParCappF_x100 PCB -ve parasitic capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF\r
495  * becomes 120\r
496  * @return  none\r
497  * @note    Following default Values can be used:\r
498  *          pi32_32MfXtalIecLoadpF_x100    Load capacitance, pF x 100 : 600\r
499  *          pi32_32MfXtalPPcbParCappF_x100 PCB +ve parasitic capacitance, pF x 100 : 20\r
500  *          pi32_32MfXtalNPcbParCappF_x100 PCB -ve parasitic capacitance, pF x 100 : 40\r
501  */\r
502 extern void POWER_Xtal16mhzCapabankTrim(int32_t pi32_16MfXtalIecLoadpF_x100,\r
503                                         int32_t pi32_16MfXtalPPcbParCappF_x100,\r
504                                         int32_t pi32_16MfXtalNPcbParCappF_x100);\r
505 /**\r
506  * @brief   Sets board-specific trim values for 32kHz XTAL\r
507  * @param   pi32_32kfXtalIecLoadpF_x100 Load capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF becomes 120\r
508  * @param   pi32_32kfXtalPPcbParCappF_x100 PCB +ve parasitic capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF\r
509  becomes 120\r
510  * @param   pi32_32kfXtalNPcbParCappF_x100 PCB -ve parasitic capacitance, pF x 100. For example, 6pF becomes 600, 1.2pF\r
511  becomes 120\r
512 \r
513  * @return  none\r
514  * @note    Following default Values can be used:\r
515  *          pi32_32kfXtalIecLoadpF_x100    Load capacitance, pF x 100 : 600\r
516  *          pi32_32kfXtalPPcbParCappF_x100 PCB +ve parasitic capacitance, pF x 100 : 40\r
517  *          pi32_32kfXtalNPcbParCappF_x100 PCB -ve parasitic capacitance, pF x 100 : 40\r
518  */\r
519 extern void POWER_Xtal32khzCapabankTrim(int32_t pi32_32kfXtalIecLoadpF_x100,\r
520                                         int32_t pi32_32kfXtalPPcbParCappF_x100,\r
521                                         int32_t pi32_32kfXtalNPcbParCappF_x100);\r
522 /**\r
523  * @brief   Enables and sets LDO for 16MHz XTAL\r
524  * @param       none\r
525  * @return  none\r
526  */\r
527 extern void POWER_SetXtal16mhzLdo(void);\r
528 \r
529 /**\r
530  * @brief   Set up 16-MHz XTAL Trimmings\r
531  * @param       amp Amplitude\r
532  * @param       gm  Transconductance\r
533  * @return  none\r
534  */\r
535 extern void POWER_SetXtal16mhzTrim(uint32_t amp, uint32_t gm);\r
536 #ifdef __cplusplus\r
537 }\r
538 #endif\r
539 \r
540 /**\r
541  * @}\r
542  */\r
543 \r
544 #endif /* _FSL_POWER_H_ */\r