1*150812a8SEvalZero /*
2*150812a8SEvalZero * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
3*150812a8SEvalZero * All rights reserved.
4*150812a8SEvalZero *
5*150812a8SEvalZero * Redistribution and use in source and binary forms, with or without
6*150812a8SEvalZero * modification, are permitted provided that the following conditions are met:
7*150812a8SEvalZero *
8*150812a8SEvalZero * 1. Redistributions of source code must retain the above copyright notice, this
9*150812a8SEvalZero * list of conditions and the following disclaimer.
10*150812a8SEvalZero *
11*150812a8SEvalZero * 2. Redistributions in binary form must reproduce the above copyright
12*150812a8SEvalZero * notice, this list of conditions and the following disclaimer in the
13*150812a8SEvalZero * documentation and/or other materials provided with the distribution.
14*150812a8SEvalZero *
15*150812a8SEvalZero * 3. Neither the name of the copyright holder nor the names of its
16*150812a8SEvalZero * contributors may be used to endorse or promote products derived from this
17*150812a8SEvalZero * software without specific prior written permission.
18*150812a8SEvalZero *
19*150812a8SEvalZero * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20*150812a8SEvalZero * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*150812a8SEvalZero * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*150812a8SEvalZero * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23*150812a8SEvalZero * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*150812a8SEvalZero * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*150812a8SEvalZero * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*150812a8SEvalZero * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*150812a8SEvalZero * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*150812a8SEvalZero * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*150812a8SEvalZero * POSSIBILITY OF SUCH DAMAGE.
30*150812a8SEvalZero */
31*150812a8SEvalZero
32*150812a8SEvalZero #ifndef NRF_POWER_H__
33*150812a8SEvalZero #define NRF_POWER_H__
34*150812a8SEvalZero
35*150812a8SEvalZero #include <nrfx.h>
36*150812a8SEvalZero
37*150812a8SEvalZero #ifdef __cplusplus
38*150812a8SEvalZero extern "C" {
39*150812a8SEvalZero #endif
40*150812a8SEvalZero
41*150812a8SEvalZero /**
42*150812a8SEvalZero * @defgroup nrf_power_hal POWER HAL
43*150812a8SEvalZero * @{
44*150812a8SEvalZero * @ingroup nrf_power
45*150812a8SEvalZero * @brief Hardware access layer for managing the POWER peripheral.
46*150812a8SEvalZero */
47*150812a8SEvalZero
48*150812a8SEvalZero #if defined(POWER_INTENSET_SLEEPENTER_Msk) || defined(__NRFX_DOXYGEN__)
49*150812a8SEvalZero /** @brief Auxiliary definition to mark the fact that sleep events are present */
50*150812a8SEvalZero #define NRF_POWER_HAS_SLEEPEVT 1
51*150812a8SEvalZero #else
52*150812a8SEvalZero #define NRF_POWER_HAS_SLEEPEVT 0
53*150812a8SEvalZero #endif // defined(POWER_INTENSET_SLEEPENTER_Msk) || defined(__NRFX_DOXYGEN__)
54*150812a8SEvalZero
55*150812a8SEvalZero #if defined(POWER_USBREGSTATUS_VBUSDETECT_Msk) || defined(__NRFX_DOXYGEN__)
56*150812a8SEvalZero /** @brief Auxiliary definition to mark the fact that power module manages USB regulator */
57*150812a8SEvalZero #define NRF_POWER_HAS_USBREG 1
58*150812a8SEvalZero #else
59*150812a8SEvalZero #define NRF_POWER_HAS_USBREG 0
60*150812a8SEvalZero #endif // defined(POWER_USBREGSTATUS_VBUSDETECT_Msk) || defined(__NRFX_DOXYGEN__)
61*150812a8SEvalZero
62*150812a8SEvalZero #if defined(POWER_POFCON_THRESHOLDVDDH_Msk) || defined(__NRFX_DOXYGEN__)
63*150812a8SEvalZero /** @brief Auxiliary definition to mark the fact that VDDH is present */
64*150812a8SEvalZero #define NRF_POWER_HAS_VDDH 1
65*150812a8SEvalZero #else
66*150812a8SEvalZero #define NRF_POWER_HAS_VDDH 0
67*150812a8SEvalZero #endif // defined(POWER_POFCON_THRESHOLDVDDH_Msk) || defined(__NRFX_DOXYGEN__)
68*150812a8SEvalZero
69*150812a8SEvalZero #if defined(POWER_DCDCEN_DCDCEN_Msk) || defined(__NRFX_DOXYGEN__)
70*150812a8SEvalZero /** @brief Auxiliary definition to mark the fact that DCDCEN is present */
71*150812a8SEvalZero #define NRF_POWER_HAS_DCDCEN 1
72*150812a8SEvalZero #else
73*150812a8SEvalZero #define NRF_POWER_HAS_DCDCEN 0
74*150812a8SEvalZero #endif
75*150812a8SEvalZero
76*150812a8SEvalZero #if defined(POWER_POFCON_THRESHOLD_Msk) || defined(__NRFX_DOXYGEN__)
77*150812a8SEvalZero /** @brief Auxiliary definition to mark the fact that POFCON is present */
78*150812a8SEvalZero #define NRF_POWER_HAS_POFCON 1
79*150812a8SEvalZero #else
80*150812a8SEvalZero #define NRF_POWER_HAS_POFCON 0
81*150812a8SEvalZero #endif
82*150812a8SEvalZero
83*150812a8SEvalZero /** @brief POWER tasks. */
84*150812a8SEvalZero typedef enum /*lint -save -e30 -esym(628,__INTADDR__) */
85*150812a8SEvalZero {
86*150812a8SEvalZero NRF_POWER_TASK_CONSTLAT = offsetof(NRF_POWER_Type, TASKS_CONSTLAT), /**< Enable constant latency mode */
87*150812a8SEvalZero NRF_POWER_TASK_LOWPWR = offsetof(NRF_POWER_Type, TASKS_LOWPWR ), /**< Enable low power mode (variable latency) */
88*150812a8SEvalZero } nrf_power_task_t; /*lint -restore */
89*150812a8SEvalZero
90*150812a8SEvalZero /** @brief POWER events. */
91*150812a8SEvalZero typedef enum /*lint -save -e30 -esym(628,__INTADDR__) */
92*150812a8SEvalZero {
93*150812a8SEvalZero #if NRF_POWER_HAS_POFCON
94*150812a8SEvalZero NRF_POWER_EVENT_POFWARN = offsetof(NRF_POWER_Type, EVENTS_POFWARN ), /**< Power failure warning */
95*150812a8SEvalZero #endif
96*150812a8SEvalZero #if NRF_POWER_HAS_SLEEPEVT
97*150812a8SEvalZero NRF_POWER_EVENT_SLEEPENTER = offsetof(NRF_POWER_Type, EVENTS_SLEEPENTER ), /**< CPU entered WFI/WFE sleep */
98*150812a8SEvalZero NRF_POWER_EVENT_SLEEPEXIT = offsetof(NRF_POWER_Type, EVENTS_SLEEPEXIT ), /**< CPU exited WFI/WFE sleep */
99*150812a8SEvalZero #endif
100*150812a8SEvalZero #if NRF_POWER_HAS_USBREG
101*150812a8SEvalZero NRF_POWER_EVENT_USBDETECTED = offsetof(NRF_POWER_Type, EVENTS_USBDETECTED), /**< Voltage supply detected on VBUS */
102*150812a8SEvalZero NRF_POWER_EVENT_USBREMOVED = offsetof(NRF_POWER_Type, EVENTS_USBREMOVED ), /**< Voltage supply removed from VBUS */
103*150812a8SEvalZero NRF_POWER_EVENT_USBPWRRDY = offsetof(NRF_POWER_Type, EVENTS_USBPWRRDY ), /**< USB 3.3 V supply ready */
104*150812a8SEvalZero #endif
105*150812a8SEvalZero } nrf_power_event_t; /*lint -restore */
106*150812a8SEvalZero
107*150812a8SEvalZero /** @brief POWER interrupts. */
108*150812a8SEvalZero typedef enum
109*150812a8SEvalZero {
110*150812a8SEvalZero #if NRF_POWER_HAS_POFCON
111*150812a8SEvalZero NRF_POWER_INT_POFWARN_MASK = POWER_INTENSET_POFWARN_Msk , /**< Write '1' to Enable interrupt for POFWARN event */
112*150812a8SEvalZero #endif
113*150812a8SEvalZero #if NRF_POWER_HAS_SLEEPEVT
114*150812a8SEvalZero NRF_POWER_INT_SLEEPENTER_MASK = POWER_INTENSET_SLEEPENTER_Msk , /**< Write '1' to Enable interrupt for SLEEPENTER event */
115*150812a8SEvalZero NRF_POWER_INT_SLEEPEXIT_MASK = POWER_INTENSET_SLEEPEXIT_Msk , /**< Write '1' to Enable interrupt for SLEEPEXIT event */
116*150812a8SEvalZero #endif
117*150812a8SEvalZero #if NRF_POWER_HAS_USBREG
118*150812a8SEvalZero NRF_POWER_INT_USBDETECTED_MASK = POWER_INTENSET_USBDETECTED_Msk, /**< Write '1' to Enable interrupt for USBDETECTED event */
119*150812a8SEvalZero NRF_POWER_INT_USBREMOVED_MASK = POWER_INTENSET_USBREMOVED_Msk , /**< Write '1' to Enable interrupt for USBREMOVED event */
120*150812a8SEvalZero NRF_POWER_INT_USBPWRRDY_MASK = POWER_INTENSET_USBPWRRDY_Msk , /**< Write '1' to Enable interrupt for USBPWRRDY event */
121*150812a8SEvalZero #endif
122*150812a8SEvalZero } nrf_power_int_mask_t;
123*150812a8SEvalZero
124*150812a8SEvalZero /** @brief Reset reason. */
125*150812a8SEvalZero typedef enum
126*150812a8SEvalZero {
127*150812a8SEvalZero NRF_POWER_RESETREAS_RESETPIN_MASK = POWER_RESETREAS_RESETPIN_Msk, /*!< Bit mask of RESETPIN field. *///!< NRF_POWER_RESETREAS_RESETPIN_MASK
128*150812a8SEvalZero NRF_POWER_RESETREAS_DOG_MASK = POWER_RESETREAS_DOG_Msk , /*!< Bit mask of DOG field. */ //!< NRF_POWER_RESETREAS_DOG_MASK
129*150812a8SEvalZero NRF_POWER_RESETREAS_SREQ_MASK = POWER_RESETREAS_SREQ_Msk , /*!< Bit mask of SREQ field. */ //!< NRF_POWER_RESETREAS_SREQ_MASK
130*150812a8SEvalZero NRF_POWER_RESETREAS_LOCKUP_MASK = POWER_RESETREAS_LOCKUP_Msk , /*!< Bit mask of LOCKUP field. */ //!< NRF_POWER_RESETREAS_LOCKUP_MASK
131*150812a8SEvalZero NRF_POWER_RESETREAS_OFF_MASK = POWER_RESETREAS_OFF_Msk , /*!< Bit mask of OFF field. */ //!< NRF_POWER_RESETREAS_OFF_MASK
132*150812a8SEvalZero #if defined(POWER_RESETREAS_LPCOMP_Msk) || defined(__NRFX_DOXYGEN__)
133*150812a8SEvalZero NRF_POWER_RESETREAS_LPCOMP_MASK = POWER_RESETREAS_LPCOMP_Msk , /*!< Bit mask of LPCOMP field. */ //!< NRF_POWER_RESETREAS_LPCOMP_MASK
134*150812a8SEvalZero #endif
135*150812a8SEvalZero NRF_POWER_RESETREAS_DIF_MASK = POWER_RESETREAS_DIF_Msk , /*!< Bit mask of DIF field. */ //!< NRF_POWER_RESETREAS_DIF_MASK
136*150812a8SEvalZero #if defined(POWER_RESETREAS_NFC_Msk) || defined(__NRFX_DOXYGEN__)
137*150812a8SEvalZero NRF_POWER_RESETREAS_NFC_MASK = POWER_RESETREAS_NFC_Msk , /*!< Bit mask of NFC field. */
138*150812a8SEvalZero #endif
139*150812a8SEvalZero #if defined(POWER_RESETREAS_VBUS_Msk) || defined(__NRFX_DOXYGEN__)
140*150812a8SEvalZero NRF_POWER_RESETREAS_VBUS_MASK = POWER_RESETREAS_VBUS_Msk , /*!< Bit mask of VBUS field. */
141*150812a8SEvalZero #endif
142*150812a8SEvalZero } nrf_power_resetreas_mask_t;
143*150812a8SEvalZero
144*150812a8SEvalZero #if NRF_POWER_HAS_USBREG
145*150812a8SEvalZero /**
146*150812a8SEvalZero * @brief USBREGSTATUS register bit masks
147*150812a8SEvalZero *
148*150812a8SEvalZero * @sa nrf_power_usbregstatus_get
149*150812a8SEvalZero */
150*150812a8SEvalZero typedef enum
151*150812a8SEvalZero {
152*150812a8SEvalZero NRF_POWER_USBREGSTATUS_VBUSDETECT_MASK = POWER_USBREGSTATUS_VBUSDETECT_Msk, /**< USB detected or removed */
153*150812a8SEvalZero NRF_POWER_USBREGSTATUS_OUTPUTRDY_MASK = POWER_USBREGSTATUS_OUTPUTRDY_Msk /**< USB 3.3 V supply ready */
154*150812a8SEvalZero } nrf_power_usbregstatus_mask_t;
155*150812a8SEvalZero #endif // NRF_POWER_HAS_USBREG
156*150812a8SEvalZero
157*150812a8SEvalZero #if defined(POWER_RAMSTATUS_RAMBLOCK0_Msk) || defined(__NRFX_DOXYGEN__)
158*150812a8SEvalZero /**
159*150812a8SEvalZero * @brief RAM blocks numbers
160*150812a8SEvalZero *
161*150812a8SEvalZero * @sa nrf_power_ramblock_mask_t
162*150812a8SEvalZero * @note
163*150812a8SEvalZero * Ram blocks has to been used in nrf51.
164*150812a8SEvalZero * In new CPU ram is divided into segments and this functionality is depreciated.
165*150812a8SEvalZero * For the newer MCU see the PS for mapping between internal RAM and RAM blocks,
166*150812a8SEvalZero * because this mapping is not 1:1, and functions related to old style blocks
167*150812a8SEvalZero * should not be used.
168*150812a8SEvalZero */
169*150812a8SEvalZero typedef enum
170*150812a8SEvalZero {
171*150812a8SEvalZero NRF_POWER_RAMBLOCK0 = POWER_RAMSTATUS_RAMBLOCK0_Pos,
172*150812a8SEvalZero NRF_POWER_RAMBLOCK1 = POWER_RAMSTATUS_RAMBLOCK1_Pos,
173*150812a8SEvalZero NRF_POWER_RAMBLOCK2 = POWER_RAMSTATUS_RAMBLOCK2_Pos,
174*150812a8SEvalZero NRF_POWER_RAMBLOCK3 = POWER_RAMSTATUS_RAMBLOCK3_Pos
175*150812a8SEvalZero } nrf_power_ramblock_t;
176*150812a8SEvalZero
177*150812a8SEvalZero /**
178*150812a8SEvalZero * @brief RAM blocks masks
179*150812a8SEvalZero *
180*150812a8SEvalZero * @sa nrf_power_ramblock_t
181*150812a8SEvalZero */
182*150812a8SEvalZero typedef enum
183*150812a8SEvalZero {
184*150812a8SEvalZero NRF_POWER_RAMBLOCK0_MASK = POWER_RAMSTATUS_RAMBLOCK0_Msk,
185*150812a8SEvalZero NRF_POWER_RAMBLOCK1_MASK = POWER_RAMSTATUS_RAMBLOCK1_Msk,
186*150812a8SEvalZero NRF_POWER_RAMBLOCK2_MASK = POWER_RAMSTATUS_RAMBLOCK2_Msk,
187*150812a8SEvalZero NRF_POWER_RAMBLOCK3_MASK = POWER_RAMSTATUS_RAMBLOCK3_Msk
188*150812a8SEvalZero } nrf_power_ramblock_mask_t;
189*150812a8SEvalZero #endif // defined(POWER_RAMSTATUS_RAMBLOCK0_Msk) || defined(__NRFX_DOXYGEN__)
190*150812a8SEvalZero
191*150812a8SEvalZero /**
192*150812a8SEvalZero * @brief RAM power state position of the bits
193*150812a8SEvalZero *
194*150812a8SEvalZero * @sa nrf_power_onoffram_mask_t
195*150812a8SEvalZero */
196*150812a8SEvalZero typedef enum
197*150812a8SEvalZero {
198*150812a8SEvalZero NRF_POWER_ONRAM0, /**< Keep RAM block 0 on or off in system ON Mode */
199*150812a8SEvalZero NRF_POWER_OFFRAM0, /**< Keep retention on RAM block 0 when RAM block is switched off */
200*150812a8SEvalZero NRF_POWER_ONRAM1, /**< Keep RAM block 1 on or off in system ON Mode */
201*150812a8SEvalZero NRF_POWER_OFFRAM1, /**< Keep retention on RAM block 1 when RAM block is switched off */
202*150812a8SEvalZero NRF_POWER_ONRAM2, /**< Keep RAM block 2 on or off in system ON Mode */
203*150812a8SEvalZero NRF_POWER_OFFRAM2, /**< Keep retention on RAM block 2 when RAM block is switched off */
204*150812a8SEvalZero NRF_POWER_ONRAM3, /**< Keep RAM block 3 on or off in system ON Mode */
205*150812a8SEvalZero NRF_POWER_OFFRAM3, /**< Keep retention on RAM block 3 when RAM block is switched off */
206*150812a8SEvalZero } nrf_power_onoffram_t;
207*150812a8SEvalZero
208*150812a8SEvalZero /**
209*150812a8SEvalZero * @brief RAM power state bit masks
210*150812a8SEvalZero *
211*150812a8SEvalZero * @sa nrf_power_onoffram_t
212*150812a8SEvalZero */
213*150812a8SEvalZero typedef enum
214*150812a8SEvalZero {
215*150812a8SEvalZero NRF_POWER_ONRAM0_MASK = 1U << NRF_POWER_ONRAM0, /**< Keep RAM block 0 on or off in system ON Mode */
216*150812a8SEvalZero NRF_POWER_OFFRAM0_MASK = 1U << NRF_POWER_OFFRAM0, /**< Keep retention on RAM block 0 when RAM block is switched off */
217*150812a8SEvalZero NRF_POWER_ONRAM1_MASK = 1U << NRF_POWER_ONRAM1, /**< Keep RAM block 1 on or off in system ON Mode */
218*150812a8SEvalZero NRF_POWER_OFFRAM1_MASK = 1U << NRF_POWER_OFFRAM1, /**< Keep retention on RAM block 1 when RAM block is switched off */
219*150812a8SEvalZero NRF_POWER_ONRAM2_MASK = 1U << NRF_POWER_ONRAM2, /**< Keep RAM block 2 on or off in system ON Mode */
220*150812a8SEvalZero NRF_POWER_OFFRAM2_MASK = 1U << NRF_POWER_OFFRAM2, /**< Keep retention on RAM block 2 when RAM block is switched off */
221*150812a8SEvalZero NRF_POWER_ONRAM3_MASK = 1U << NRF_POWER_ONRAM3, /**< Keep RAM block 3 on or off in system ON Mode */
222*150812a8SEvalZero NRF_POWER_OFFRAM3_MASK = 1U << NRF_POWER_OFFRAM3, /**< Keep retention on RAM block 3 when RAM block is switched off */
223*150812a8SEvalZero } nrf_power_onoffram_mask_t;
224*150812a8SEvalZero
225*150812a8SEvalZero #if NRF_POWER_HAS_POFCON
226*150812a8SEvalZero /** @brief Power failure comparator thresholds. */
227*150812a8SEvalZero typedef enum
228*150812a8SEvalZero {
229*150812a8SEvalZero NRF_POWER_POFTHR_V21 = POWER_POFCON_THRESHOLD_V21, /**< Set threshold to 2.1 V */
230*150812a8SEvalZero NRF_POWER_POFTHR_V23 = POWER_POFCON_THRESHOLD_V23, /**< Set threshold to 2.3 V */
231*150812a8SEvalZero NRF_POWER_POFTHR_V25 = POWER_POFCON_THRESHOLD_V25, /**< Set threshold to 2.5 V */
232*150812a8SEvalZero NRF_POWER_POFTHR_V27 = POWER_POFCON_THRESHOLD_V27, /**< Set threshold to 2.7 V */
233*150812a8SEvalZero #if defined(POWER_POFCON_THRESHOLD_V17) || defined(__NRFX_DOXYGEN__)
234*150812a8SEvalZero NRF_POWER_POFTHR_V17 = POWER_POFCON_THRESHOLD_V17, /**< Set threshold to 1.7 V */
235*150812a8SEvalZero NRF_POWER_POFTHR_V18 = POWER_POFCON_THRESHOLD_V18, /**< Set threshold to 1.8 V */
236*150812a8SEvalZero NRF_POWER_POFTHR_V19 = POWER_POFCON_THRESHOLD_V19, /**< Set threshold to 1.9 V */
237*150812a8SEvalZero NRF_POWER_POFTHR_V20 = POWER_POFCON_THRESHOLD_V20, /**< Set threshold to 2.0 V */
238*150812a8SEvalZero NRF_POWER_POFTHR_V22 = POWER_POFCON_THRESHOLD_V22, /**< Set threshold to 2.2 V */
239*150812a8SEvalZero NRF_POWER_POFTHR_V24 = POWER_POFCON_THRESHOLD_V24, /**< Set threshold to 2.4 V */
240*150812a8SEvalZero NRF_POWER_POFTHR_V26 = POWER_POFCON_THRESHOLD_V26, /**< Set threshold to 2.6 V */
241*150812a8SEvalZero NRF_POWER_POFTHR_V28 = POWER_POFCON_THRESHOLD_V28, /**< Set threshold to 2.8 V */
242*150812a8SEvalZero #endif // defined(POWER_POFCON_THRESHOLD_V17) || defined(__NRFX_DOXYGEN__)
243*150812a8SEvalZero } nrf_power_pof_thr_t;
244*150812a8SEvalZero #endif // NRF_POWER_HAS_POFCON
245*150812a8SEvalZero
246*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
247*150812a8SEvalZero /** @brief Power failure comparator thresholds for VDDH. */
248*150812a8SEvalZero typedef enum
249*150812a8SEvalZero {
250*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V27 = POWER_POFCON_THRESHOLDVDDH_V27, /**< Set threshold to 2.7 V */
251*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V28 = POWER_POFCON_THRESHOLDVDDH_V28, /**< Set threshold to 2.8 V */
252*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V29 = POWER_POFCON_THRESHOLDVDDH_V29, /**< Set threshold to 2.9 V */
253*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V30 = POWER_POFCON_THRESHOLDVDDH_V30, /**< Set threshold to 3.0 V */
254*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V31 = POWER_POFCON_THRESHOLDVDDH_V31, /**< Set threshold to 3.1 V */
255*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V32 = POWER_POFCON_THRESHOLDVDDH_V32, /**< Set threshold to 3.2 V */
256*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V33 = POWER_POFCON_THRESHOLDVDDH_V33, /**< Set threshold to 3.3 V */
257*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V34 = POWER_POFCON_THRESHOLDVDDH_V34, /**< Set threshold to 3.4 V */
258*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V35 = POWER_POFCON_THRESHOLDVDDH_V35, /**< Set threshold to 3.5 V */
259*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V36 = POWER_POFCON_THRESHOLDVDDH_V36, /**< Set threshold to 3.6 V */
260*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V37 = POWER_POFCON_THRESHOLDVDDH_V37, /**< Set threshold to 3.7 V */
261*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V38 = POWER_POFCON_THRESHOLDVDDH_V38, /**< Set threshold to 3.8 V */
262*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V39 = POWER_POFCON_THRESHOLDVDDH_V39, /**< Set threshold to 3.9 V */
263*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V40 = POWER_POFCON_THRESHOLDVDDH_V40, /**< Set threshold to 4.0 V */
264*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V41 = POWER_POFCON_THRESHOLDVDDH_V41, /**< Set threshold to 4.1 V */
265*150812a8SEvalZero NRF_POWER_POFTHRVDDH_V42 = POWER_POFCON_THRESHOLDVDDH_V42, /**< Set threshold to 4.2 V */
266*150812a8SEvalZero } nrf_power_pof_thrvddh_t;
267*150812a8SEvalZero
268*150812a8SEvalZero /** @brief Main regulator status. */
269*150812a8SEvalZero typedef enum
270*150812a8SEvalZero {
271*150812a8SEvalZero NRF_POWER_MAINREGSTATUS_NORMAL = POWER_MAINREGSTATUS_MAINREGSTATUS_Normal, /**< Normal voltage mode. Voltage supplied on VDD. */
272*150812a8SEvalZero NRF_POWER_MAINREGSTATUS_HIGH = POWER_MAINREGSTATUS_MAINREGSTATUS_High /**< High voltage mode. Voltage supplied on VDDH. */
273*150812a8SEvalZero } nrf_power_mainregstatus_t;
274*150812a8SEvalZero
275*150812a8SEvalZero #endif // NRF_POWER_HAS_VDDH
276*150812a8SEvalZero
277*150812a8SEvalZero #if defined(POWER_RAM_POWER_S0POWER_Msk) || defined(__NRFX_DOXYGEN__)
278*150812a8SEvalZero /**
279*150812a8SEvalZero * @brief Bit positions for RAMPOWER register
280*150812a8SEvalZero *
281*150812a8SEvalZero * All possible bits described, even if they are not used in selected MCU.
282*150812a8SEvalZero */
283*150812a8SEvalZero typedef enum
284*150812a8SEvalZero {
285*150812a8SEvalZero /** Keep RAM section S0 ON in System ON mode */
286*150812a8SEvalZero NRF_POWER_RAMPOWER_S0POWER = POWER_RAM_POWER_S0POWER_Pos,
287*150812a8SEvalZero NRF_POWER_RAMPOWER_S1POWER, /**< Keep RAM section S1 ON in System ON mode */
288*150812a8SEvalZero NRF_POWER_RAMPOWER_S2POWER, /**< Keep RAM section S2 ON in System ON mode */
289*150812a8SEvalZero NRF_POWER_RAMPOWER_S3POWER, /**< Keep RAM section S3 ON in System ON mode */
290*150812a8SEvalZero NRF_POWER_RAMPOWER_S4POWER, /**< Keep RAM section S4 ON in System ON mode */
291*150812a8SEvalZero NRF_POWER_RAMPOWER_S5POWER, /**< Keep RAM section S5 ON in System ON mode */
292*150812a8SEvalZero NRF_POWER_RAMPOWER_S6POWER, /**< Keep RAM section S6 ON in System ON mode */
293*150812a8SEvalZero NRF_POWER_RAMPOWER_S7POWER, /**< Keep RAM section S7 ON in System ON mode */
294*150812a8SEvalZero NRF_POWER_RAMPOWER_S8POWER, /**< Keep RAM section S8 ON in System ON mode */
295*150812a8SEvalZero NRF_POWER_RAMPOWER_S9POWER, /**< Keep RAM section S9 ON in System ON mode */
296*150812a8SEvalZero NRF_POWER_RAMPOWER_S10POWER, /**< Keep RAM section S10 ON in System ON mode */
297*150812a8SEvalZero NRF_POWER_RAMPOWER_S11POWER, /**< Keep RAM section S11 ON in System ON mode */
298*150812a8SEvalZero NRF_POWER_RAMPOWER_S12POWER, /**< Keep RAM section S12 ON in System ON mode */
299*150812a8SEvalZero NRF_POWER_RAMPOWER_S13POWER, /**< Keep RAM section S13 ON in System ON mode */
300*150812a8SEvalZero NRF_POWER_RAMPOWER_S14POWER, /**< Keep RAM section S14 ON in System ON mode */
301*150812a8SEvalZero NRF_POWER_RAMPOWER_S15POWER, /**< Keep RAM section S15 ON in System ON mode */
302*150812a8SEvalZero
303*150812a8SEvalZero /** Keep section retention in OFF mode when section is OFF */
304*150812a8SEvalZero NRF_POWER_RAMPOWER_S0RETENTION = POWER_RAM_POWER_S0RETENTION_Pos,
305*150812a8SEvalZero NRF_POWER_RAMPOWER_S1RETENTION, /**< Keep section retention in OFF mode when section is OFF */
306*150812a8SEvalZero NRF_POWER_RAMPOWER_S2RETENTION, /**< Keep section retention in OFF mode when section is OFF */
307*150812a8SEvalZero NRF_POWER_RAMPOWER_S3RETENTION, /**< Keep section retention in OFF mode when section is OFF */
308*150812a8SEvalZero NRF_POWER_RAMPOWER_S4RETENTION, /**< Keep section retention in OFF mode when section is OFF */
309*150812a8SEvalZero NRF_POWER_RAMPOWER_S5RETENTION, /**< Keep section retention in OFF mode when section is OFF */
310*150812a8SEvalZero NRF_POWER_RAMPOWER_S6RETENTION, /**< Keep section retention in OFF mode when section is OFF */
311*150812a8SEvalZero NRF_POWER_RAMPOWER_S7RETENTION, /**< Keep section retention in OFF mode when section is OFF */
312*150812a8SEvalZero NRF_POWER_RAMPOWER_S8RETENTION, /**< Keep section retention in OFF mode when section is OFF */
313*150812a8SEvalZero NRF_POWER_RAMPOWER_S9RETENTION, /**< Keep section retention in OFF mode when section is OFF */
314*150812a8SEvalZero NRF_POWER_RAMPOWER_S10RETENTION, /**< Keep section retention in OFF mode when section is OFF */
315*150812a8SEvalZero NRF_POWER_RAMPOWER_S11RETENTION, /**< Keep section retention in OFF mode when section is OFF */
316*150812a8SEvalZero NRF_POWER_RAMPOWER_S12RETENTION, /**< Keep section retention in OFF mode when section is OFF */
317*150812a8SEvalZero NRF_POWER_RAMPOWER_S13RETENTION, /**< Keep section retention in OFF mode when section is OFF */
318*150812a8SEvalZero NRF_POWER_RAMPOWER_S14RETENTION, /**< Keep section retention in OFF mode when section is OFF */
319*150812a8SEvalZero NRF_POWER_RAMPOWER_S15RETENTION, /**< Keep section retention in OFF mode when section is OFF */
320*150812a8SEvalZero } nrf_power_rampower_t;
321*150812a8SEvalZero
322*150812a8SEvalZero /**
323*150812a8SEvalZero * @brief Bit masks for RAMPOWER register
324*150812a8SEvalZero *
325*150812a8SEvalZero * All possible bits described, even if they are not used in selected MCU.
326*150812a8SEvalZero */
327*150812a8SEvalZero typedef enum
328*150812a8SEvalZero {
329*150812a8SEvalZero NRF_POWER_RAMPOWER_S0POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S0POWER ,
330*150812a8SEvalZero NRF_POWER_RAMPOWER_S1POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S1POWER ,
331*150812a8SEvalZero NRF_POWER_RAMPOWER_S2POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S2POWER ,
332*150812a8SEvalZero NRF_POWER_RAMPOWER_S3POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S3POWER ,
333*150812a8SEvalZero NRF_POWER_RAMPOWER_S4POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S4POWER ,
334*150812a8SEvalZero NRF_POWER_RAMPOWER_S5POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S5POWER ,
335*150812a8SEvalZero NRF_POWER_RAMPOWER_S7POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S7POWER ,
336*150812a8SEvalZero NRF_POWER_RAMPOWER_S8POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S8POWER ,
337*150812a8SEvalZero NRF_POWER_RAMPOWER_S9POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S9POWER ,
338*150812a8SEvalZero NRF_POWER_RAMPOWER_S10POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S10POWER,
339*150812a8SEvalZero NRF_POWER_RAMPOWER_S11POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S11POWER,
340*150812a8SEvalZero NRF_POWER_RAMPOWER_S12POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S12POWER,
341*150812a8SEvalZero NRF_POWER_RAMPOWER_S13POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S13POWER,
342*150812a8SEvalZero NRF_POWER_RAMPOWER_S14POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S14POWER,
343*150812a8SEvalZero NRF_POWER_RAMPOWER_S15POWER_MASK = 1UL << NRF_POWER_RAMPOWER_S15POWER,
344*150812a8SEvalZero
345*150812a8SEvalZero NRF_POWER_RAMPOWER_S0RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S0RETENTION ,
346*150812a8SEvalZero NRF_POWER_RAMPOWER_S1RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S1RETENTION ,
347*150812a8SEvalZero NRF_POWER_RAMPOWER_S2RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S2RETENTION ,
348*150812a8SEvalZero NRF_POWER_RAMPOWER_S3RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S3RETENTION ,
349*150812a8SEvalZero NRF_POWER_RAMPOWER_S4RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S4RETENTION ,
350*150812a8SEvalZero NRF_POWER_RAMPOWER_S5RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S5RETENTION ,
351*150812a8SEvalZero NRF_POWER_RAMPOWER_S7RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S7RETENTION ,
352*150812a8SEvalZero NRF_POWER_RAMPOWER_S8RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S8RETENTION ,
353*150812a8SEvalZero NRF_POWER_RAMPOWER_S9RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S9RETENTION ,
354*150812a8SEvalZero NRF_POWER_RAMPOWER_S10RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S10RETENTION,
355*150812a8SEvalZero NRF_POWER_RAMPOWER_S11RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S11RETENTION,
356*150812a8SEvalZero NRF_POWER_RAMPOWER_S12RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S12RETENTION,
357*150812a8SEvalZero NRF_POWER_RAMPOWER_S13RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S13RETENTION,
358*150812a8SEvalZero NRF_POWER_RAMPOWER_S14RETENTION_MASK = 1UL << NRF_POWER_RAMPOWER_S14RETENTION,
359*150812a8SEvalZero NRF_POWER_RAMPOWER_S15RETENTION_MASK = (int)(1UL << NRF_POWER_RAMPOWER_S15RETENTION),
360*150812a8SEvalZero } nrf_power_rampower_mask_t;
361*150812a8SEvalZero #endif // defined(POWER_RAM_POWER_S0POWER_Msk) || defined(__NRFX_DOXYGEN__)
362*150812a8SEvalZero
363*150812a8SEvalZero /**
364*150812a8SEvalZero * @brief Function for activating a specific POWER task.
365*150812a8SEvalZero *
366*150812a8SEvalZero * @param[in] task Task.
367*150812a8SEvalZero */
368*150812a8SEvalZero __STATIC_INLINE void nrf_power_task_trigger(nrf_power_task_t task);
369*150812a8SEvalZero
370*150812a8SEvalZero /**
371*150812a8SEvalZero * @brief Function for returning the address of a specific POWER task register.
372*150812a8SEvalZero *
373*150812a8SEvalZero * @param[in] task Task.
374*150812a8SEvalZero *
375*150812a8SEvalZero * @return Task address.
376*150812a8SEvalZero */
377*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_task_address_get(nrf_power_task_t task);
378*150812a8SEvalZero
379*150812a8SEvalZero /**
380*150812a8SEvalZero * @brief Function for clearing a specific event.
381*150812a8SEvalZero *
382*150812a8SEvalZero * @param[in] event Event.
383*150812a8SEvalZero */
384*150812a8SEvalZero __STATIC_INLINE void nrf_power_event_clear(nrf_power_event_t event);
385*150812a8SEvalZero
386*150812a8SEvalZero /**
387*150812a8SEvalZero * @brief Function for returning the state of a specific event.
388*150812a8SEvalZero *
389*150812a8SEvalZero * @param[in] event Event.
390*150812a8SEvalZero *
391*150812a8SEvalZero * @retval true If the event is set.
392*150812a8SEvalZero * @retval false If the event is not set.
393*150812a8SEvalZero */
394*150812a8SEvalZero __STATIC_INLINE bool nrf_power_event_check(nrf_power_event_t event);
395*150812a8SEvalZero
396*150812a8SEvalZero /**
397*150812a8SEvalZero * @brief Function for getting and clearing the state of specific event
398*150812a8SEvalZero *
399*150812a8SEvalZero * This function checks the state of the event and clears it.
400*150812a8SEvalZero *
401*150812a8SEvalZero * @param[in] event Event.
402*150812a8SEvalZero *
403*150812a8SEvalZero * @retval true If the event was set.
404*150812a8SEvalZero * @retval false If the event was not set.
405*150812a8SEvalZero */
406*150812a8SEvalZero __STATIC_INLINE bool nrf_power_event_get_and_clear(nrf_power_event_t event);
407*150812a8SEvalZero
408*150812a8SEvalZero /**
409*150812a8SEvalZero * @brief Function for returning the address of a specific POWER event register.
410*150812a8SEvalZero *
411*150812a8SEvalZero * @param[in] event Event.
412*150812a8SEvalZero *
413*150812a8SEvalZero * @return Address.
414*150812a8SEvalZero */
415*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_event_address_get(nrf_power_event_t event);
416*150812a8SEvalZero
417*150812a8SEvalZero /**
418*150812a8SEvalZero * @brief Function for enabling selected interrupts.
419*150812a8SEvalZero *
420*150812a8SEvalZero * @param[in] int_mask Interrupts mask.
421*150812a8SEvalZero */
422*150812a8SEvalZero __STATIC_INLINE void nrf_power_int_enable(uint32_t int_mask);
423*150812a8SEvalZero
424*150812a8SEvalZero /**
425*150812a8SEvalZero * @brief Function for retrieving the state of selected interrupts.
426*150812a8SEvalZero *
427*150812a8SEvalZero * @param[in] int_mask Interrupts mask.
428*150812a8SEvalZero *
429*150812a8SEvalZero * @retval true If any of selected interrupts is enabled.
430*150812a8SEvalZero * @retval false If none of selected interrupts is enabled.
431*150812a8SEvalZero */
432*150812a8SEvalZero __STATIC_INLINE bool nrf_power_int_enable_check(uint32_t int_mask);
433*150812a8SEvalZero
434*150812a8SEvalZero /**
435*150812a8SEvalZero * @brief Function for retrieving the information about enabled interrupts.
436*150812a8SEvalZero *
437*150812a8SEvalZero * @return The flags of enabled interrupts.
438*150812a8SEvalZero */
439*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_int_enable_get(void);
440*150812a8SEvalZero
441*150812a8SEvalZero /**
442*150812a8SEvalZero * @brief Function for disabling selected interrupts.
443*150812a8SEvalZero *
444*150812a8SEvalZero * @param[in] int_mask Interrupts mask.
445*150812a8SEvalZero */
446*150812a8SEvalZero __STATIC_INLINE void nrf_power_int_disable(uint32_t int_mask);
447*150812a8SEvalZero
448*150812a8SEvalZero #if defined(DPPI_PRESENT) || defined(__NRFX_DOXYGEN__)
449*150812a8SEvalZero /**
450*150812a8SEvalZero * @brief Function for setting the subscribe configuration for a given
451*150812a8SEvalZero * POWER task.
452*150812a8SEvalZero *
453*150812a8SEvalZero * @param[in] task Task for which to set the configuration.
454*150812a8SEvalZero * @param[in] channel Channel through which to subscribe events.
455*150812a8SEvalZero */
456*150812a8SEvalZero __STATIC_INLINE void nrf_power_subscribe_set(nrf_power_task_t task,
457*150812a8SEvalZero uint8_t channel);
458*150812a8SEvalZero
459*150812a8SEvalZero /**
460*150812a8SEvalZero * @brief Function for clearing the subscribe configuration for a given
461*150812a8SEvalZero * POWER task.
462*150812a8SEvalZero *
463*150812a8SEvalZero * @param[in] task Task for which to clear the configuration.
464*150812a8SEvalZero */
465*150812a8SEvalZero __STATIC_INLINE void nrf_power_subscribe_clear(nrf_power_task_t task);
466*150812a8SEvalZero
467*150812a8SEvalZero /**
468*150812a8SEvalZero * @brief Function for setting the publish configuration for a given
469*150812a8SEvalZero * POWER event.
470*150812a8SEvalZero *
471*150812a8SEvalZero * @param[in] event Event for which to set the configuration.
472*150812a8SEvalZero * @param[in] channel Channel through which to publish the event.
473*150812a8SEvalZero */
474*150812a8SEvalZero __STATIC_INLINE void nrf_power_publish_set(nrf_power_event_t event,
475*150812a8SEvalZero uint8_t channel);
476*150812a8SEvalZero
477*150812a8SEvalZero /**
478*150812a8SEvalZero * @brief Function for clearing the publish configuration for a given
479*150812a8SEvalZero * POWER event.
480*150812a8SEvalZero *
481*150812a8SEvalZero * @param[in] event Event for which to clear the configuration.
482*150812a8SEvalZero */
483*150812a8SEvalZero __STATIC_INLINE void nrf_power_publish_clear(nrf_power_event_t event);
484*150812a8SEvalZero #endif // defined(DPPI_PRESENT) || defined(__NRFX_DOXYGEN__)
485*150812a8SEvalZero
486*150812a8SEvalZero /**
487*150812a8SEvalZero * @brief Get reset reason mask
488*150812a8SEvalZero *
489*150812a8SEvalZero * Function returns the reset reason.
490*150812a8SEvalZero * Unless cleared, the RESETREAS register is cumulative.
491*150812a8SEvalZero * A field is cleared by writing '1' to it (see @ref nrf_power_resetreas_clear).
492*150812a8SEvalZero * If none of the reset sources are flagged,
493*150812a8SEvalZero * this indicates that the chip was reset from the on-chip reset generator,
494*150812a8SEvalZero * which indicates a power-on-reset or a brown out reset.
495*150812a8SEvalZero *
496*150812a8SEvalZero * @return The mask of reset reasons constructed with @ref nrf_power_resetreas_mask_t.
497*150812a8SEvalZero */
498*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_resetreas_get(void);
499*150812a8SEvalZero
500*150812a8SEvalZero /**
501*150812a8SEvalZero * @brief Clear selected reset reason field
502*150812a8SEvalZero *
503*150812a8SEvalZero * Function clears selected reset reason fields.
504*150812a8SEvalZero *
505*150812a8SEvalZero * @param[in] mask The mask constructed from @ref nrf_power_resetreas_mask_t enumerator values.
506*150812a8SEvalZero * @sa nrf_power_resetreas_get
507*150812a8SEvalZero */
508*150812a8SEvalZero __STATIC_INLINE void nrf_power_resetreas_clear(uint32_t mask);
509*150812a8SEvalZero
510*150812a8SEvalZero #if defined(POWER_POWERSTATUS_LTEMODEM_Msk) || defined(__NRFX_DOXYGEN__)
511*150812a8SEvalZero /**
512*150812a8SEvalZero * @brief Function for getting power status of the LTE Modem domain.
513*150812a8SEvalZero *
514*150812a8SEvalZero * @retval true If the LTE Modem domain is powered on.
515*150812a8SEvalZero * @retval false If the LTE Modem domain is powered off.
516*150812a8SEvalZero */
517*150812a8SEvalZero __STATIC_INLINE bool nrf_power_powerstatus_get(void);
518*150812a8SEvalZero #endif
519*150812a8SEvalZero
520*150812a8SEvalZero #if defined(POWER_RAMSTATUS_RAMBLOCK0_Msk) || defined(__NRFX_DOXYGEN__)
521*150812a8SEvalZero /**
522*150812a8SEvalZero * @brief Get RAMSTATUS register
523*150812a8SEvalZero *
524*150812a8SEvalZero * Returns the masks of RAM blocks that are powered ON.
525*150812a8SEvalZero *
526*150812a8SEvalZero * @return Value with bits sets according to masks in @ref nrf_power_ramblock_mask_t.
527*150812a8SEvalZero */
528*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_ramstatus_get(void);
529*150812a8SEvalZero #endif // defined(POWER_RAMSTATUS_RAMBLOCK0_Msk) || defined(__NRFX_DOXYGEN__)
530*150812a8SEvalZero
531*150812a8SEvalZero #if defined(POWER_SYSTEMOFF_SYSTEMOFF_Enter)
532*150812a8SEvalZero /**
533*150812a8SEvalZero * @brief Go to system OFF
534*150812a8SEvalZero *
535*150812a8SEvalZero * This function puts the CPU into system off mode.
536*150812a8SEvalZero * The only way to wake up the CPU is by reset.
537*150812a8SEvalZero *
538*150812a8SEvalZero * @note This function never returns.
539*150812a8SEvalZero */
540*150812a8SEvalZero __STATIC_INLINE void nrf_power_system_off(void);
541*150812a8SEvalZero #endif // defined(POWER_SYSTEMOFF_SYSTEMOFF_Enter)
542*150812a8SEvalZero
543*150812a8SEvalZero #if NRF_POWER_HAS_POFCON
544*150812a8SEvalZero /**
545*150812a8SEvalZero * @brief Set power failure comparator configuration
546*150812a8SEvalZero *
547*150812a8SEvalZero * Sets power failure comparator threshold and enable/disable flag.
548*150812a8SEvalZero *
549*150812a8SEvalZero * @param[in] enabled Set to true if power failure comparator should be enabled.
550*150812a8SEvalZero * @param[in] thr Set the voltage threshold value.
551*150812a8SEvalZero *
552*150812a8SEvalZero * @note
553*150812a8SEvalZero * If VDDH settings is present in the device, this function would
554*150812a8SEvalZero * clear it settings (set to the lowest voltage).
555*150812a8SEvalZero * Use @ref nrf_power_pofcon_vddh_set function to set new value.
556*150812a8SEvalZero */
557*150812a8SEvalZero __STATIC_INLINE void nrf_power_pofcon_set(bool enabled, nrf_power_pof_thr_t thr);
558*150812a8SEvalZero
559*150812a8SEvalZero /**
560*150812a8SEvalZero * @brief Get power failure comparator configuration
561*150812a8SEvalZero *
562*150812a8SEvalZero * Get power failure comparator threshold and enable bit.
563*150812a8SEvalZero *
564*150812a8SEvalZero * @param[out] p_enabled Function would set this boolean variable to true
565*150812a8SEvalZero * if power failure comparator is enabled.
566*150812a8SEvalZero * The pointer can be NULL if we do not need this information.
567*150812a8SEvalZero *
568*150812a8SEvalZero * @return Threshold setting for power failure comparator
569*150812a8SEvalZero */
570*150812a8SEvalZero __STATIC_INLINE nrf_power_pof_thr_t nrf_power_pofcon_get(bool * p_enabled);
571*150812a8SEvalZero #endif // NRF_POWER_HAS_POFCON
572*150812a8SEvalZero
573*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
574*150812a8SEvalZero /**
575*150812a8SEvalZero * @brief Set VDDH power failure comparator threshold
576*150812a8SEvalZero *
577*150812a8SEvalZero * @param[in] thr Threshold to be set
578*150812a8SEvalZero */
579*150812a8SEvalZero __STATIC_INLINE void nrf_power_pofcon_vddh_set(nrf_power_pof_thrvddh_t thr);
580*150812a8SEvalZero
581*150812a8SEvalZero /**
582*150812a8SEvalZero * @brief Get VDDH power failure comparator threshold
583*150812a8SEvalZero *
584*150812a8SEvalZero * @return VDDH threshold currently configured
585*150812a8SEvalZero */
586*150812a8SEvalZero __STATIC_INLINE nrf_power_pof_thrvddh_t nrf_power_pofcon_vddh_get(void);
587*150812a8SEvalZero #endif // NRF_POWER_HAS_VDDH
588*150812a8SEvalZero
589*150812a8SEvalZero /**
590*150812a8SEvalZero * @brief Set general purpose retention register
591*150812a8SEvalZero *
592*150812a8SEvalZero * @param[in] val Value to be set in the register
593*150812a8SEvalZero */
594*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret_set(uint8_t val);
595*150812a8SEvalZero
596*150812a8SEvalZero /**
597*150812a8SEvalZero * @brief Get general purpose retention register
598*150812a8SEvalZero *
599*150812a8SEvalZero * @return The value from the register
600*150812a8SEvalZero */
601*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret_get(void);
602*150812a8SEvalZero
603*150812a8SEvalZero #if defined(POWER_GPREGRET2_GPREGRET_Msk) || defined(__NRFX_DOXYGEN__)
604*150812a8SEvalZero /**
605*150812a8SEvalZero * @brief Set general purpose retention register 2
606*150812a8SEvalZero *
607*150812a8SEvalZero * @note This register is not available in nrf51 MCU family
608*150812a8SEvalZero *
609*150812a8SEvalZero * @param[in] val Value to be set in the register
610*150812a8SEvalZero */
611*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret2_set(uint8_t val);
612*150812a8SEvalZero
613*150812a8SEvalZero /**
614*150812a8SEvalZero * @brief Get general purpose retention register 2
615*150812a8SEvalZero *
616*150812a8SEvalZero * @note This register is not available in all MCUs.
617*150812a8SEvalZero *
618*150812a8SEvalZero * @return The value from the register
619*150812a8SEvalZero */
620*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret2_get(void);
621*150812a8SEvalZero #endif // defined(POWER_GPREGRET2_GPREGRET_Msk) || defined(__NRFX_DOXYGEN__)
622*150812a8SEvalZero
623*150812a8SEvalZero /**
624*150812a8SEvalZero * @brief Function for getting value of the particular general purpose retention register
625*150812a8SEvalZero *
626*150812a8SEvalZero * @param[in] reg_num General purpose retention register number.
627*150812a8SEvalZero *
628*150812a8SEvalZero * @return The value from the register
629*150812a8SEvalZero */
630*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret_ext_get(uint8_t reg_num);
631*150812a8SEvalZero
632*150812a8SEvalZero /**
633*150812a8SEvalZero * @brief Function for setting particular general purpose retention register.
634*150812a8SEvalZero *
635*150812a8SEvalZero * @param[in] reg_num General purpose retention register number.
636*150812a8SEvalZero * @param[in] val Value to be set in the register
637*150812a8SEvalZero */
638*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret_ext_set(uint8_t reg_num,
639*150812a8SEvalZero uint8_t val);
640*150812a8SEvalZero
641*150812a8SEvalZero #if NRF_POWER_HAS_DCDCEN
642*150812a8SEvalZero /**
643*150812a8SEvalZero * @brief Enable or disable DCDC converter
644*150812a8SEvalZero *
645*150812a8SEvalZero * @note
646*150812a8SEvalZero * If the device consist of high voltage power input (VDDH) this setting
647*150812a8SEvalZero * would relate to the converter on low voltage side (1.3 V output).
648*150812a8SEvalZero *
649*150812a8SEvalZero * @param[in] enable Set true to enable or false to disable DCDC converter.
650*150812a8SEvalZero */
651*150812a8SEvalZero __STATIC_INLINE void nrf_power_dcdcen_set(bool enable);
652*150812a8SEvalZero
653*150812a8SEvalZero /**
654*150812a8SEvalZero * @brief Get the state of DCDC converter
655*150812a8SEvalZero *
656*150812a8SEvalZero * @note
657*150812a8SEvalZero * If the device consist of high voltage power input (VDDH) this setting
658*150812a8SEvalZero * would relate to the converter on low voltage side (1.3 V output).
659*150812a8SEvalZero *
660*150812a8SEvalZero * @retval true Converter is enabled
661*150812a8SEvalZero * @retval false Converter is disabled
662*150812a8SEvalZero */
663*150812a8SEvalZero __STATIC_INLINE bool nrf_power_dcdcen_get(void);
664*150812a8SEvalZero #endif // NRF_POWER_HAS_DCDCEN
665*150812a8SEvalZero
666*150812a8SEvalZero #if defined(POWER_RAM_POWER_S0POWER_Msk) || defined(__NRFX_DOXYGEN__)
667*150812a8SEvalZero /**
668*150812a8SEvalZero * @brief Turn ON sections in selected RAM block.
669*150812a8SEvalZero *
670*150812a8SEvalZero * This function turns ON sections in block and also block retention.
671*150812a8SEvalZero *
672*150812a8SEvalZero * @sa nrf_power_rampower_mask_t
673*150812a8SEvalZero * @sa nrf_power_rampower_mask_off
674*150812a8SEvalZero *
675*150812a8SEvalZero * @param[in] block RAM block index.
676*150812a8SEvalZero * @param[in] section_mask Mask of the sections created by merging
677*150812a8SEvalZero * @ref nrf_power_rampower_mask_t flags.
678*150812a8SEvalZero */
679*150812a8SEvalZero __STATIC_INLINE void nrf_power_rampower_mask_on(uint8_t block, uint32_t section_mask);
680*150812a8SEvalZero
681*150812a8SEvalZero /**
682*150812a8SEvalZero * @brief Turn ON sections in selected RAM block.
683*150812a8SEvalZero *
684*150812a8SEvalZero * This function turns OFF sections in block and also block retention.
685*150812a8SEvalZero *
686*150812a8SEvalZero * @sa nrf_power_rampower_mask_t
687*150812a8SEvalZero * @sa nrf_power_rampower_mask_off
688*150812a8SEvalZero *
689*150812a8SEvalZero * @param[in] block RAM block index.
690*150812a8SEvalZero * @param[in] section_mask Mask of the sections created by merging
691*150812a8SEvalZero * @ref nrf_power_rampower_mask_t flags.
692*150812a8SEvalZero */
693*150812a8SEvalZero __STATIC_INLINE void nrf_power_rampower_mask_off(uint8_t block, uint32_t section_mask);
694*150812a8SEvalZero
695*150812a8SEvalZero /**
696*150812a8SEvalZero * @brief Get the mask of ON and retention sections in selected RAM block.
697*150812a8SEvalZero *
698*150812a8SEvalZero * @param[in] block RAM block index.
699*150812a8SEvalZero *
700*150812a8SEvalZero * @return Mask of sections state composed from @ref nrf_power_rampower_mask_t flags.
701*150812a8SEvalZero */
702*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_rampower_mask_get(uint8_t block);
703*150812a8SEvalZero #endif /* defined(POWER_RAM_POWER_S0POWER_Msk) || defined(__NRFX_DOXYGEN__) */
704*150812a8SEvalZero
705*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
706*150812a8SEvalZero /**
707*150812a8SEvalZero * @brief Enable of disable DCDC converter on VDDH
708*150812a8SEvalZero *
709*150812a8SEvalZero * @param[in] enable Set true to enable or false to disable DCDC converter.
710*150812a8SEvalZero */
711*150812a8SEvalZero __STATIC_INLINE void nrf_power_dcdcen_vddh_set(bool enable);
712*150812a8SEvalZero
713*150812a8SEvalZero /**
714*150812a8SEvalZero * @brief Get the state of DCDC converter on VDDH
715*150812a8SEvalZero *
716*150812a8SEvalZero * @retval true Converter is enabled
717*150812a8SEvalZero * @retval false Converter is disabled
718*150812a8SEvalZero */
719*150812a8SEvalZero __STATIC_INLINE bool nrf_power_dcdcen_vddh_get(void);
720*150812a8SEvalZero
721*150812a8SEvalZero /**
722*150812a8SEvalZero * @brief Get main supply status
723*150812a8SEvalZero *
724*150812a8SEvalZero * @return Current main supply status
725*150812a8SEvalZero */
726*150812a8SEvalZero __STATIC_INLINE nrf_power_mainregstatus_t nrf_power_mainregstatus_get(void);
727*150812a8SEvalZero #endif // NRF_POWER_HAS_VDDH
728*150812a8SEvalZero
729*150812a8SEvalZero #if NRF_POWER_HAS_USBREG
730*150812a8SEvalZero /**
731*150812a8SEvalZero * @brief Get the whole USBREGSTATUS register
732*150812a8SEvalZero *
733*150812a8SEvalZero * @return The USBREGSTATUS register value.
734*150812a8SEvalZero * Use @ref nrf_power_usbregstatus_mask_t values for bit masking.
735*150812a8SEvalZero *
736*150812a8SEvalZero * @sa nrf_power_usbregstatus_vbusdet_get
737*150812a8SEvalZero * @sa nrf_power_usbregstatus_outrdy_get
738*150812a8SEvalZero */
739*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_usbregstatus_get(void);
740*150812a8SEvalZero
741*150812a8SEvalZero /**
742*150812a8SEvalZero * @brief VBUS input detection status
743*150812a8SEvalZero *
744*150812a8SEvalZero * USBDETECTED and USBREMOVED events are derived from this information
745*150812a8SEvalZero *
746*150812a8SEvalZero * @retval false VBUS voltage below valid threshold
747*150812a8SEvalZero * @retval true VBUS voltage above valid threshold
748*150812a8SEvalZero *
749*150812a8SEvalZero * @sa nrf_power_usbregstatus_get
750*150812a8SEvalZero */
751*150812a8SEvalZero __STATIC_INLINE bool nrf_power_usbregstatus_vbusdet_get(void);
752*150812a8SEvalZero
753*150812a8SEvalZero /**
754*150812a8SEvalZero * @brief USB supply output settling time elapsed
755*150812a8SEvalZero *
756*150812a8SEvalZero * @retval false USBREG output settling time not elapsed
757*150812a8SEvalZero * @retval true USBREG output settling time elapsed
758*150812a8SEvalZero * (same information as USBPWRRDY event)
759*150812a8SEvalZero *
760*150812a8SEvalZero * @sa nrf_power_usbregstatus_get
761*150812a8SEvalZero */
762*150812a8SEvalZero __STATIC_INLINE bool nrf_power_usbregstatus_outrdy_get(void);
763*150812a8SEvalZero #endif // NRF_POWER_HAS_USBREG
764*150812a8SEvalZero
765*150812a8SEvalZero #ifndef SUPPRESS_INLINE_IMPLEMENTATION
766*150812a8SEvalZero
nrf_power_task_trigger(nrf_power_task_t task)767*150812a8SEvalZero __STATIC_INLINE void nrf_power_task_trigger(nrf_power_task_t task)
768*150812a8SEvalZero {
769*150812a8SEvalZero *((volatile uint32_t *)((uint8_t *)NRF_POWER + (uint32_t)task)) = 0x1UL;
770*150812a8SEvalZero }
771*150812a8SEvalZero
nrf_power_task_address_get(nrf_power_task_t task)772*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_task_address_get(nrf_power_task_t task)
773*150812a8SEvalZero {
774*150812a8SEvalZero return ((uint32_t)NRF_POWER + (uint32_t)task);
775*150812a8SEvalZero }
776*150812a8SEvalZero
nrf_power_event_clear(nrf_power_event_t event)777*150812a8SEvalZero __STATIC_INLINE void nrf_power_event_clear(nrf_power_event_t event)
778*150812a8SEvalZero {
779*150812a8SEvalZero *((volatile uint32_t *)((uint8_t *)NRF_POWER + (uint32_t)event)) = 0x0UL;
780*150812a8SEvalZero #if __CORTEX_M == 0x04
781*150812a8SEvalZero volatile uint32_t dummy = *((volatile uint32_t *)((uint8_t *)NRF_POWER + (uint32_t)event));
782*150812a8SEvalZero (void)dummy;
783*150812a8SEvalZero #endif
784*150812a8SEvalZero }
785*150812a8SEvalZero
nrf_power_event_check(nrf_power_event_t event)786*150812a8SEvalZero __STATIC_INLINE bool nrf_power_event_check(nrf_power_event_t event)
787*150812a8SEvalZero {
788*150812a8SEvalZero return (bool)*(volatile uint32_t *)((uint8_t *)NRF_POWER + (uint32_t)event);
789*150812a8SEvalZero }
790*150812a8SEvalZero
nrf_power_event_get_and_clear(nrf_power_event_t event)791*150812a8SEvalZero __STATIC_INLINE bool nrf_power_event_get_and_clear(nrf_power_event_t event)
792*150812a8SEvalZero {
793*150812a8SEvalZero bool ret = nrf_power_event_check(event);
794*150812a8SEvalZero if (ret)
795*150812a8SEvalZero {
796*150812a8SEvalZero nrf_power_event_clear(event);
797*150812a8SEvalZero }
798*150812a8SEvalZero return ret;
799*150812a8SEvalZero }
800*150812a8SEvalZero
nrf_power_event_address_get(nrf_power_event_t event)801*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_event_address_get(nrf_power_event_t event)
802*150812a8SEvalZero {
803*150812a8SEvalZero return ((uint32_t)NRF_POWER + (uint32_t)event);
804*150812a8SEvalZero }
805*150812a8SEvalZero
nrf_power_int_enable(uint32_t int_mask)806*150812a8SEvalZero __STATIC_INLINE void nrf_power_int_enable(uint32_t int_mask)
807*150812a8SEvalZero {
808*150812a8SEvalZero NRF_POWER->INTENSET = int_mask;
809*150812a8SEvalZero }
810*150812a8SEvalZero
nrf_power_int_enable_check(uint32_t int_mask)811*150812a8SEvalZero __STATIC_INLINE bool nrf_power_int_enable_check(uint32_t int_mask)
812*150812a8SEvalZero {
813*150812a8SEvalZero return (bool)(NRF_POWER->INTENSET & int_mask);
814*150812a8SEvalZero }
815*150812a8SEvalZero
nrf_power_int_enable_get(void)816*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_int_enable_get(void)
817*150812a8SEvalZero {
818*150812a8SEvalZero return NRF_POWER->INTENSET;
819*150812a8SEvalZero }
820*150812a8SEvalZero
nrf_power_int_disable(uint32_t int_mask)821*150812a8SEvalZero __STATIC_INLINE void nrf_power_int_disable(uint32_t int_mask)
822*150812a8SEvalZero {
823*150812a8SEvalZero NRF_POWER->INTENCLR = int_mask;
824*150812a8SEvalZero }
825*150812a8SEvalZero
826*150812a8SEvalZero #if defined(DPPI_PRESENT)
nrf_power_subscribe_set(nrf_power_task_t task,uint8_t channel)827*150812a8SEvalZero __STATIC_INLINE void nrf_power_subscribe_set(nrf_power_task_t task,
828*150812a8SEvalZero uint8_t channel)
829*150812a8SEvalZero {
830*150812a8SEvalZero *((volatile uint32_t *) ((uint8_t *) NRF_POWER + (uint32_t) task + 0x80uL)) =
831*150812a8SEvalZero ((uint32_t)channel | POWER_SUBSCRIBE_CONSTLAT_EN_Msk);
832*150812a8SEvalZero }
833*150812a8SEvalZero
nrf_power_subscribe_clear(nrf_power_task_t task)834*150812a8SEvalZero __STATIC_INLINE void nrf_power_subscribe_clear(nrf_power_task_t task)
835*150812a8SEvalZero {
836*150812a8SEvalZero *((volatile uint32_t *) ((uint8_t *) NRF_POWER + (uint32_t) task + 0x80uL)) = 0;
837*150812a8SEvalZero }
838*150812a8SEvalZero
nrf_power_publish_set(nrf_power_event_t event,uint8_t channel)839*150812a8SEvalZero __STATIC_INLINE void nrf_power_publish_set(nrf_power_event_t event,
840*150812a8SEvalZero uint8_t channel)
841*150812a8SEvalZero {
842*150812a8SEvalZero *((volatile uint32_t *) ((uint8_t *) NRF_POWER + (uint32_t) event + 0x80uL)) =
843*150812a8SEvalZero ((uint32_t)channel | POWER_PUBLISH_SLEEPENTER_EN_Msk);
844*150812a8SEvalZero }
845*150812a8SEvalZero
nrf_power_publish_clear(nrf_power_event_t event)846*150812a8SEvalZero __STATIC_INLINE void nrf_power_publish_clear(nrf_power_event_t event)
847*150812a8SEvalZero {
848*150812a8SEvalZero *((volatile uint32_t *) ((uint8_t *) NRF_POWER + (uint32_t) event + 0x80uL)) = 0;
849*150812a8SEvalZero }
850*150812a8SEvalZero #endif // defined(DPPI_PRESENT)
851*150812a8SEvalZero
nrf_power_resetreas_get(void)852*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_resetreas_get(void)
853*150812a8SEvalZero {
854*150812a8SEvalZero return NRF_POWER->RESETREAS;
855*150812a8SEvalZero }
856*150812a8SEvalZero
nrf_power_resetreas_clear(uint32_t mask)857*150812a8SEvalZero __STATIC_INLINE void nrf_power_resetreas_clear(uint32_t mask)
858*150812a8SEvalZero {
859*150812a8SEvalZero NRF_POWER->RESETREAS = mask;
860*150812a8SEvalZero }
861*150812a8SEvalZero
862*150812a8SEvalZero #if defined(POWER_POWERSTATUS_LTEMODEM_Msk)
nrf_power_powerstatus_get(void)863*150812a8SEvalZero __STATIC_INLINE bool nrf_power_powerstatus_get(void)
864*150812a8SEvalZero {
865*150812a8SEvalZero return (NRF_POWER->POWERSTATUS & POWER_POWERSTATUS_LTEMODEM_Msk) ==
866*150812a8SEvalZero (POWER_POWERSTATUS_LTEMODEM_ON << POWER_POWERSTATUS_LTEMODEM_Pos);
867*150812a8SEvalZero }
868*150812a8SEvalZero #endif // (POWER_POWERSTATUS_LTEMODEM_Msk)
869*150812a8SEvalZero
870*150812a8SEvalZero #if defined(POWER_RAMSTATUS_RAMBLOCK0_Msk)
nrf_power_ramstatus_get(void)871*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_ramstatus_get(void)
872*150812a8SEvalZero {
873*150812a8SEvalZero return NRF_POWER->RAMSTATUS;
874*150812a8SEvalZero }
875*150812a8SEvalZero #endif // defined(POWER_RAMSTATUS_RAMBLOCK0_Msk)
876*150812a8SEvalZero
877*150812a8SEvalZero #if defined(POWER_SYSTEMOFF_SYSTEMOFF_Enter)
nrf_power_system_off(void)878*150812a8SEvalZero __STATIC_INLINE void nrf_power_system_off(void)
879*150812a8SEvalZero {
880*150812a8SEvalZero NRF_POWER->SYSTEMOFF = POWER_SYSTEMOFF_SYSTEMOFF_Enter;
881*150812a8SEvalZero __DSB();
882*150812a8SEvalZero
883*150812a8SEvalZero /* Solution for simulated System OFF in debug mode */
884*150812a8SEvalZero while (true)
885*150812a8SEvalZero {
886*150812a8SEvalZero __WFE();
887*150812a8SEvalZero }
888*150812a8SEvalZero }
889*150812a8SEvalZero #endif // defined(POWER_SYSTEMOFF_SYSTEMOFF_Enter)
890*150812a8SEvalZero
891*150812a8SEvalZero #if NRF_POWER_HAS_POFCON
nrf_power_pofcon_set(bool enabled,nrf_power_pof_thr_t thr)892*150812a8SEvalZero __STATIC_INLINE void nrf_power_pofcon_set(bool enabled, nrf_power_pof_thr_t thr)
893*150812a8SEvalZero {
894*150812a8SEvalZero NRFX_ASSERT(thr == (thr & (POWER_POFCON_THRESHOLD_Msk >> POWER_POFCON_THRESHOLD_Pos)));
895*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
896*150812a8SEvalZero uint32_t pofcon = NRF_POWER->POFCON;
897*150812a8SEvalZero pofcon &= ~(POWER_POFCON_THRESHOLD_Msk | POWER_POFCON_POF_Msk);
898*150812a8SEvalZero pofcon |=
899*150812a8SEvalZero #else // NRF_POWER_HAS_VDDH
900*150812a8SEvalZero NRF_POWER->POFCON =
901*150812a8SEvalZero #endif
902*150812a8SEvalZero (((uint32_t)thr) << POWER_POFCON_THRESHOLD_Pos) |
903*150812a8SEvalZero (enabled ?
904*150812a8SEvalZero (POWER_POFCON_POF_Enabled << POWER_POFCON_POF_Pos)
905*150812a8SEvalZero :
906*150812a8SEvalZero (POWER_POFCON_POF_Disabled << POWER_POFCON_POF_Pos));
907*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
908*150812a8SEvalZero NRF_POWER->POFCON = pofcon;
909*150812a8SEvalZero #endif
910*150812a8SEvalZero }
911*150812a8SEvalZero
nrf_power_pofcon_get(bool * p_enabled)912*150812a8SEvalZero __STATIC_INLINE nrf_power_pof_thr_t nrf_power_pofcon_get(bool * p_enabled)
913*150812a8SEvalZero {
914*150812a8SEvalZero uint32_t pofcon = NRF_POWER->POFCON;
915*150812a8SEvalZero if (NULL != p_enabled)
916*150812a8SEvalZero {
917*150812a8SEvalZero (*p_enabled) = ((pofcon & POWER_POFCON_POF_Msk) >> POWER_POFCON_POF_Pos)
918*150812a8SEvalZero == POWER_POFCON_POF_Enabled;
919*150812a8SEvalZero }
920*150812a8SEvalZero return (nrf_power_pof_thr_t)((pofcon & POWER_POFCON_THRESHOLD_Msk) >>
921*150812a8SEvalZero POWER_POFCON_THRESHOLD_Pos);
922*150812a8SEvalZero }
923*150812a8SEvalZero #endif // NRF_POWER_HAS_POFCON
924*150812a8SEvalZero
925*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
nrf_power_pofcon_vddh_set(nrf_power_pof_thrvddh_t thr)926*150812a8SEvalZero __STATIC_INLINE void nrf_power_pofcon_vddh_set(nrf_power_pof_thrvddh_t thr)
927*150812a8SEvalZero {
928*150812a8SEvalZero NRFX_ASSERT(thr == (thr & (POWER_POFCON_THRESHOLDVDDH_Msk >> POWER_POFCON_THRESHOLDVDDH_Pos)));
929*150812a8SEvalZero uint32_t pofcon = NRF_POWER->POFCON;
930*150812a8SEvalZero pofcon &= ~POWER_POFCON_THRESHOLDVDDH_Msk;
931*150812a8SEvalZero pofcon |= (((uint32_t)thr) << POWER_POFCON_THRESHOLDVDDH_Pos);
932*150812a8SEvalZero NRF_POWER->POFCON = pofcon;
933*150812a8SEvalZero }
934*150812a8SEvalZero
nrf_power_pofcon_vddh_get(void)935*150812a8SEvalZero __STATIC_INLINE nrf_power_pof_thrvddh_t nrf_power_pofcon_vddh_get(void)
936*150812a8SEvalZero {
937*150812a8SEvalZero return (nrf_power_pof_thrvddh_t)((NRF_POWER->POFCON &
938*150812a8SEvalZero POWER_POFCON_THRESHOLDVDDH_Msk) >> POWER_POFCON_THRESHOLDVDDH_Pos);
939*150812a8SEvalZero }
940*150812a8SEvalZero #endif // NRF_POWER_HAS_VDDH
941*150812a8SEvalZero
nrf_power_gpregret_set(uint8_t val)942*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret_set(uint8_t val)
943*150812a8SEvalZero {
944*150812a8SEvalZero volatile uint32_t * p_gpregret;
945*150812a8SEvalZero if (sizeof(NRF_POWER->GPREGRET) > sizeof(uint32_t))
946*150812a8SEvalZero {
947*150812a8SEvalZero p_gpregret = &((volatile uint32_t *)NRF_POWER->GPREGRET)[0];
948*150812a8SEvalZero }
949*150812a8SEvalZero else
950*150812a8SEvalZero {
951*150812a8SEvalZero p_gpregret = &((volatile uint32_t *)&NRF_POWER->GPREGRET)[0];
952*150812a8SEvalZero }
953*150812a8SEvalZero *p_gpregret = val;
954*150812a8SEvalZero }
955*150812a8SEvalZero
nrf_power_gpregret_get(void)956*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret_get(void)
957*150812a8SEvalZero {
958*150812a8SEvalZero volatile uint32_t * p_gpregret;
959*150812a8SEvalZero if (sizeof(NRF_POWER->GPREGRET) > sizeof(uint32_t))
960*150812a8SEvalZero {
961*150812a8SEvalZero p_gpregret = &((volatile uint32_t *)NRF_POWER->GPREGRET)[0];
962*150812a8SEvalZero }
963*150812a8SEvalZero else
964*150812a8SEvalZero {
965*150812a8SEvalZero p_gpregret = &((volatile uint32_t *)&NRF_POWER->GPREGRET)[0];
966*150812a8SEvalZero }
967*150812a8SEvalZero return *p_gpregret;
968*150812a8SEvalZero }
969*150812a8SEvalZero
nrf_power_gpregret_ext_set(uint8_t reg_num,uint8_t val)970*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret_ext_set(uint8_t reg_num, uint8_t val)
971*150812a8SEvalZero {
972*150812a8SEvalZero #ifdef NRF91_SERIES
973*150812a8SEvalZero NRF_POWER->GPREGRET[reg_num] = val;
974*150812a8SEvalZero #else
975*150812a8SEvalZero NRFX_ASSERT(reg_num < 1);
976*150812a8SEvalZero NRF_POWER->GPREGRET = val;
977*150812a8SEvalZero #endif
978*150812a8SEvalZero }
979*150812a8SEvalZero
nrf_power_gpregret_ext_get(uint8_t reg_num)980*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret_ext_get(uint8_t reg_num)
981*150812a8SEvalZero {
982*150812a8SEvalZero #ifdef NRF91_SERIES
983*150812a8SEvalZero return NRF_POWER->GPREGRET[reg_num];
984*150812a8SEvalZero #else
985*150812a8SEvalZero NRFX_ASSERT(reg_num < 1);
986*150812a8SEvalZero return NRF_POWER->GPREGRET;
987*150812a8SEvalZero #endif
988*150812a8SEvalZero }
989*150812a8SEvalZero
990*150812a8SEvalZero #if defined(POWER_GPREGRET2_GPREGRET_Msk)
nrf_power_gpregret2_set(uint8_t val)991*150812a8SEvalZero __STATIC_INLINE void nrf_power_gpregret2_set(uint8_t val)
992*150812a8SEvalZero {
993*150812a8SEvalZero NRF_POWER->GPREGRET2 = val;
994*150812a8SEvalZero }
995*150812a8SEvalZero
nrf_power_gpregret2_get(void)996*150812a8SEvalZero __STATIC_INLINE uint8_t nrf_power_gpregret2_get(void)
997*150812a8SEvalZero {
998*150812a8SEvalZero return NRF_POWER->GPREGRET2;
999*150812a8SEvalZero }
1000*150812a8SEvalZero #endif
1001*150812a8SEvalZero
1002*150812a8SEvalZero #if NRF_POWER_HAS_DCDCEN
nrf_power_dcdcen_set(bool enable)1003*150812a8SEvalZero __STATIC_INLINE void nrf_power_dcdcen_set(bool enable)
1004*150812a8SEvalZero {
1005*150812a8SEvalZero NRF_POWER->DCDCEN = (enable ?
1006*150812a8SEvalZero POWER_DCDCEN_DCDCEN_Enabled : POWER_DCDCEN_DCDCEN_Disabled) <<
1007*150812a8SEvalZero POWER_DCDCEN_DCDCEN_Pos;
1008*150812a8SEvalZero }
1009*150812a8SEvalZero
nrf_power_dcdcen_get(void)1010*150812a8SEvalZero __STATIC_INLINE bool nrf_power_dcdcen_get(void)
1011*150812a8SEvalZero {
1012*150812a8SEvalZero return (NRF_POWER->DCDCEN & POWER_DCDCEN_DCDCEN_Msk)
1013*150812a8SEvalZero ==
1014*150812a8SEvalZero (POWER_DCDCEN_DCDCEN_Enabled << POWER_DCDCEN_DCDCEN_Pos);
1015*150812a8SEvalZero }
1016*150812a8SEvalZero #endif // NRF_POWER_HAS_DCDCEN
1017*150812a8SEvalZero
1018*150812a8SEvalZero #if defined(POWER_RAM_POWER_S0POWER_Msk)
nrf_power_rampower_mask_on(uint8_t block,uint32_t section_mask)1019*150812a8SEvalZero __STATIC_INLINE void nrf_power_rampower_mask_on(uint8_t block, uint32_t section_mask)
1020*150812a8SEvalZero {
1021*150812a8SEvalZero NRFX_ASSERT(block < NRFX_ARRAY_SIZE(NRF_POWER->RAM));
1022*150812a8SEvalZero NRF_POWER->RAM[block].POWERSET = section_mask;
1023*150812a8SEvalZero }
1024*150812a8SEvalZero
nrf_power_rampower_mask_off(uint8_t block,uint32_t section_mask)1025*150812a8SEvalZero __STATIC_INLINE void nrf_power_rampower_mask_off(uint8_t block, uint32_t section_mask)
1026*150812a8SEvalZero {
1027*150812a8SEvalZero NRFX_ASSERT(block < NRFX_ARRAY_SIZE(NRF_POWER->RAM));
1028*150812a8SEvalZero NRF_POWER->RAM[block].POWERCLR = section_mask;
1029*150812a8SEvalZero }
1030*150812a8SEvalZero
nrf_power_rampower_mask_get(uint8_t block)1031*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_rampower_mask_get(uint8_t block)
1032*150812a8SEvalZero {
1033*150812a8SEvalZero NRFX_ASSERT(block < NRFX_ARRAY_SIZE(NRF_POWER->RAM));
1034*150812a8SEvalZero return NRF_POWER->RAM[block].POWER;
1035*150812a8SEvalZero }
1036*150812a8SEvalZero #endif /* defined(POWER_RAM_POWER_S0POWER_Msk) */
1037*150812a8SEvalZero
1038*150812a8SEvalZero #if NRF_POWER_HAS_VDDH
nrf_power_dcdcen_vddh_set(bool enable)1039*150812a8SEvalZero __STATIC_INLINE void nrf_power_dcdcen_vddh_set(bool enable)
1040*150812a8SEvalZero {
1041*150812a8SEvalZero NRF_POWER->DCDCEN0 = (enable ?
1042*150812a8SEvalZero POWER_DCDCEN0_DCDCEN_Enabled : POWER_DCDCEN0_DCDCEN_Disabled) <<
1043*150812a8SEvalZero POWER_DCDCEN0_DCDCEN_Pos;
1044*150812a8SEvalZero }
1045*150812a8SEvalZero
nrf_power_dcdcen_vddh_get(void)1046*150812a8SEvalZero __STATIC_INLINE bool nrf_power_dcdcen_vddh_get(void)
1047*150812a8SEvalZero {
1048*150812a8SEvalZero return (NRF_POWER->DCDCEN0 & POWER_DCDCEN0_DCDCEN_Msk)
1049*150812a8SEvalZero ==
1050*150812a8SEvalZero (POWER_DCDCEN0_DCDCEN_Enabled << POWER_DCDCEN0_DCDCEN_Pos);
1051*150812a8SEvalZero }
1052*150812a8SEvalZero
nrf_power_mainregstatus_get(void)1053*150812a8SEvalZero __STATIC_INLINE nrf_power_mainregstatus_t nrf_power_mainregstatus_get(void)
1054*150812a8SEvalZero {
1055*150812a8SEvalZero return (nrf_power_mainregstatus_t)(((NRF_POWER->MAINREGSTATUS) &
1056*150812a8SEvalZero POWER_MAINREGSTATUS_MAINREGSTATUS_Msk) >>
1057*150812a8SEvalZero POWER_MAINREGSTATUS_MAINREGSTATUS_Pos);
1058*150812a8SEvalZero }
1059*150812a8SEvalZero #endif // NRF_POWER_HAS_VDDH
1060*150812a8SEvalZero
1061*150812a8SEvalZero #if NRF_POWER_HAS_USBREG
nrf_power_usbregstatus_get(void)1062*150812a8SEvalZero __STATIC_INLINE uint32_t nrf_power_usbregstatus_get(void)
1063*150812a8SEvalZero {
1064*150812a8SEvalZero return NRF_POWER->USBREGSTATUS;
1065*150812a8SEvalZero }
1066*150812a8SEvalZero
nrf_power_usbregstatus_vbusdet_get(void)1067*150812a8SEvalZero __STATIC_INLINE bool nrf_power_usbregstatus_vbusdet_get(void)
1068*150812a8SEvalZero {
1069*150812a8SEvalZero return (nrf_power_usbregstatus_get() &
1070*150812a8SEvalZero NRF_POWER_USBREGSTATUS_VBUSDETECT_MASK) != 0;
1071*150812a8SEvalZero }
1072*150812a8SEvalZero
nrf_power_usbregstatus_outrdy_get(void)1073*150812a8SEvalZero __STATIC_INLINE bool nrf_power_usbregstatus_outrdy_get(void)
1074*150812a8SEvalZero {
1075*150812a8SEvalZero return (nrf_power_usbregstatus_get() &
1076*150812a8SEvalZero NRF_POWER_USBREGSTATUS_OUTPUTRDY_MASK) != 0;
1077*150812a8SEvalZero }
1078*150812a8SEvalZero #endif // NRF_POWER_HAS_USBREG
1079*150812a8SEvalZero
1080*150812a8SEvalZero #endif // SUPPRESS_INLINE_IMPLEMENTATION
1081*150812a8SEvalZero
1082*150812a8SEvalZero /** @} */
1083*150812a8SEvalZero
1084*150812a8SEvalZero #ifdef __cplusplus
1085*150812a8SEvalZero }
1086*150812a8SEvalZero #endif
1087*150812a8SEvalZero
1088*150812a8SEvalZero #endif // NRF_POWER_H__
1089