]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/NXP_Code/drivers/fsl_power.h
Add MPU demo project for LPC54018 board.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_LPC54018_MCUXpresso / NXP_Code / drivers / fsl_power.h
1 /*\r
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.\r
3  * Copyright 2016, NXP\r
4  * All rights reserved.\r
5  *\r
6  *\r
7  * SPDX-License-Identifier: BSD-3-Clause\r
8  */\r
9 #ifndef _FSL_POWER_H_\r
10 #define _FSL_POWER_H_\r
11 \r
12 #include "fsl_common.h"\r
13 \r
14 /*! @addtogroup power */\r
15 /*! @{ */\r
16 \r
17 /*! @file */\r
18 \r
19 /*******************************************************************************\r
20  * Definitions\r
21  ******************************************************************************/\r
22 \r
23 /*! @name Driver version */\r
24 /*@{*/\r
25 /*! @brief power driver version 2.0.0. */\r
26 #define FSL_POWER_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))\r
27 /*@}*/\r
28 \r
29 #define MAKE_PD_BITS(reg, slot) (((reg) << 8) | (slot))\r
30 #define PDRCFG0 0x0U\r
31 #define PDRCFG1 0x1U\r
32 \r
33 typedef enum pd_bits\r
34 {\r
35     kPDRUNCFG_LP_REG = MAKE_PD_BITS(PDRCFG0, 2U),\r
36     kPDRUNCFG_PD_FRO_EN = MAKE_PD_BITS(PDRCFG0, 4U),\r
37     kPDRUNCFG_PD_TS = MAKE_PD_BITS(PDRCFG0, 6U),\r
38     kPDRUNCFG_PD_BOD_RESET = MAKE_PD_BITS(PDRCFG0, 7U),\r
39     kPDRUNCFG_PD_BOD_INTR = MAKE_PD_BITS(PDRCFG0, 8U),\r
40     kPDRUNCFG_PD_VD2_ANA = MAKE_PD_BITS(PDRCFG0, 9U),\r
41     kPDRUNCFG_PD_ADC0 = MAKE_PD_BITS(PDRCFG0, 10U),\r
42     kPDRUNCFG_PD_RAM0 = MAKE_PD_BITS(PDRCFG0, 13U),\r
43     kPDRUNCFG_PD_RAM1 = MAKE_PD_BITS(PDRCFG0, 14U),\r
44     kPDRUNCFG_PD_RAM2 = MAKE_PD_BITS(PDRCFG0, 15U),\r
45     kPDRUNCFG_PD_RAM3 = MAKE_PD_BITS(PDRCFG0, 16U),\r
46     kPDRUNCFG_PD_ROM = MAKE_PD_BITS(PDRCFG0, 17U),\r
47     kPDRUNCFG_PD_VDDA = MAKE_PD_BITS(PDRCFG0, 19U),\r
48     kPDRUNCFG_PD_WDT_OSC = MAKE_PD_BITS(PDRCFG0, 20U),\r
49     kPDRUNCFG_PD_USB0_PHY = MAKE_PD_BITS(PDRCFG0, 21U),\r
50     kPDRUNCFG_PD_SYS_PLL0 = MAKE_PD_BITS(PDRCFG0, 22U),\r
51     kPDRUNCFG_PD_VREFP = MAKE_PD_BITS(PDRCFG0, 23U),\r
52     kPDRUNCFG_PD_FLASH_BG = MAKE_PD_BITS(PDRCFG0, 25U),\r
53     kPDRUNCFG_PD_VD3 = MAKE_PD_BITS(PDRCFG0, 26U),\r
54     kPDRUNCFG_PD_VD4 = MAKE_PD_BITS(PDRCFG0, 27U),\r
55     kPDRUNCFG_PD_VD5 = MAKE_PD_BITS(PDRCFG0, 28U),\r
56     kPDRUNCFG_PD_VD6 = MAKE_PD_BITS(PDRCFG0, 29U),\r
57     kPDRUNCFG_REQ_DELAY = MAKE_PD_BITS(PDRCFG0, 30U),\r
58     kPDRUNCFG_FORCE_RBB = MAKE_PD_BITS(PDRCFG0, 31U),\r
59 \r
60     kPDRUNCFG_PD_USB1_PHY = MAKE_PD_BITS(PDRCFG1, 0U),\r
61     kPDRUNCFG_PD_USB_PLL = MAKE_PD_BITS(PDRCFG1, 1U),\r
62     kPDRUNCFG_PD_AUDIO_PLL = MAKE_PD_BITS(PDRCFG1, 2U),\r
63     kPDRUNCFG_PD_SYS_OSC = MAKE_PD_BITS(PDRCFG1, 3U),\r
64     kPDRUNCFG_PD_EEPROM = MAKE_PD_BITS(PDRCFG1, 5U),\r
65     kPDRUNCFG_PD_rng = MAKE_PD_BITS(PDRCFG1, 6U),\r
66 \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 = (int)0x80000000U,\r
72 } pd_bit_t;\r
73 \r
74 /* Power mode configuration API parameter */\r
75 typedef enum _power_mode_config\r
76 {\r
77     kPmu_Sleep = 0U,\r
78     kPmu_Deep_Sleep = 1U,\r
79     kPmu_Deep_PowerDown = 2U,\r
80 } power_mode_cfg_t;\r
81 \r
82 /*******************************************************************************\r
83  * API\r
84  ******************************************************************************/\r
85 \r
86 #ifdef __cplusplus\r
87 extern "C" {\r
88 #endif\r
89 \r
90 /*!\r
91 * @name Power Configuration\r
92 * @{\r
93 */\r
94 \r
95 /*!\r
96  * @brief API to enable PDRUNCFG bit in the Syscon. Note that enabling the bit powers down the peripheral\r
97  *\r
98  * @param en    peripheral for which to enable the PDRUNCFG bit\r
99  * @return none\r
100  */\r
101 static inline void POWER_EnablePD(pd_bit_t en)\r
102 {\r
103     /* PDRUNCFGSET */\r
104     SYSCON->PDRUNCFGSET[((uint32_t)en >> 8UL)] = (1UL << ((uint32_t)en & 0xffU));\r
105 }\r
106 \r
107 /*!\r
108  * @brief API to disable PDRUNCFG bit in the Syscon. Note that disabling the bit powers up the peripheral\r
109  *\r
110  * @param en    peripheral for which to disable the PDRUNCFG bit\r
111  * @return none\r
112  */\r
113 static inline void POWER_DisablePD(pd_bit_t en)\r
114 {\r
115     /* PDRUNCFGCLR */\r
116     SYSCON->PDRUNCFGCLR[((uint32_t)en >> 8UL)] = (1UL << ((uint32_t)en & 0xffU));\r
117 }\r
118 \r
119 /*!\r
120  * @brief API to enable deep sleep bit in the ARM Core.\r
121  *\r
122  * @param none\r
123  * @return none\r
124  */\r
125 static inline void POWER_EnableDeepSleep(void)\r
126 {\r
127     SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;\r
128 }\r
129 \r
130 /*!\r
131  * @brief API to disable deep sleep bit in the ARM Core.\r
132  *\r
133  * @param none\r
134  * @return none\r
135  */\r
136 static inline void POWER_DisableDeepSleep(void)\r
137 {\r
138     SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;\r
139 }\r
140 \r
141 /*!\r
142  * @brief Power Library API to reload OTP.\r
143  *        This API must be called if VD6 is power down\r
144  *        and power back again since FROHF TRIM value\r
145  *        is store in OTP. If not, when calling FROHF settng\r
146  *        API in clock driver then the FROHF clock out put\r
147  *        will be inaccurate.\r
148  * @return none\r
149  */\r
150 void POWER_OtpReload(void);\r
151 \r
152 /*!\r
153  * @brief Power Library API to power the PLLs.\r
154  *\r
155  * @param none\r
156  * @return none\r
157  */\r
158 void POWER_SetPLL(void);\r
159 \r
160 /*!\r
161  * @brief Power Library API to power the USB PHY.\r
162  *\r
163  * @param none\r
164  * @return none\r
165  */\r
166 void POWER_SetUsbPhy(void);\r
167 \r
168 /*!\r
169  * @brief Power Library API to enter different power mode.\r
170  *\r
171  * @param exclude_from_pd  Bit mask of the PDRUNCFG0(low 32bits) and PDRUNCFG1(high 32bits) that needs to be powered on\r
172  * during power mode selected.\r
173  * @return none\r
174  */\r
175 void POWER_EnterPowerMode(power_mode_cfg_t mode, uint64_t exclude_from_pd);\r
176 \r
177 /*!\r
178  * @brief Power Library API to enter sleep mode.\r
179  *\r
180  * @return none\r
181  */\r
182 void POWER_EnterSleep(void);\r
183 \r
184 /*!\r
185  * @brief Power Library API to enter deep sleep mode.\r
186  *\r
187  * @param exclude_from_pd  Bit mask of the PDRUNCFG0(low 32bits) and PDRUNCFG1(high 32bits) bits that needs to be\r
188  * powered on during deep sleep\r
189  * @return none\r
190  */\r
191 void POWER_EnterDeepSleep(uint64_t exclude_from_pd);\r
192 \r
193 /*!\r
194  * @brief Power Library API to enter deep power down mode.\r
195  *\r
196  * @param exclude_from_pd   Bit mask of the PDRUNCFG0(low 32bits) and PDRUNCFG1(high 32bits) that needs to be powered on\r
197  during deep power\r
198  *                          down mode, but this is has no effect as the voltages are cut off.\r
199 \r
200  * @return none\r
201  */\r
202 void POWER_EnterDeepPowerDown(uint64_t exclude_from_pd);\r
203 \r
204 /*!\r
205  * @brief Power Library API to choose normal regulation and set the voltage for the desired operating frequency.\r
206  *\r
207  * @param freq  - The desired frequency at which the part would like to operate,\r
208  *                note that the voltage and flash wait states should be set before changing frequency\r
209  * @return none\r
210  */\r
211 void POWER_SetVoltageForFreq(uint32_t freq);\r
212 \r
213 /*!\r
214  * @brief Power Library API to return the library version.\r
215  *\r
216  * @param none\r
217  * @return version number of the power library\r
218  */\r
219 uint32_t POWER_GetLibVersion(void);\r
220 \r
221 #ifdef __cplusplus\r
222 }\r
223 #endif\r
224 \r
225 #endif /* _FSL_POWER_H_ */\r