Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of nrf51-sdk by
nrf_wdt.h
00001 /* 00002 * Copyright (c) Nordic Semiconductor ASA 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without modification, 00006 * are permitted provided that the following conditions are met: 00007 * 00008 * 1. Redistributions of source code must retain the above copyright notice, this 00009 * list of conditions and the following disclaimer. 00010 * 00011 * 2. Redistributions in binary form must reproduce the above copyright notice, this 00012 * list of conditions and the following disclaimer in the documentation and/or 00013 * other materials provided with the distribution. 00014 * 00015 * 3. Neither the name of Nordic Semiconductor ASA nor the names of other 00016 * contributors to this software may be used to endorse or promote products 00017 * derived from this software without specific prior written permission. 00018 * 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00021 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00022 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00023 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 00024 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00025 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00026 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00027 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00029 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 * 00031 */ 00032 00033 /** 00034 * @defgroup nrf_wdt_hal WDT HAL 00035 * @{ 00036 * @ingroup nrf_wdt 00037 * 00038 * @brief Hardware access layer for accessing the watchdog timer (WDT) peripheral. 00039 */ 00040 00041 #ifndef NRF_WDT_H__ 00042 #define NRF_WDT_H__ 00043 00044 #include <stddef.h> 00045 #include <stdbool.h> 00046 #include <stdint.h> 00047 00048 #include "nrf.h" 00049 00050 #define NRF_WDT_CHANNEL_NUMBER 0x8UL 00051 #define NRF_WDT_RR_VALUE 0x6E524635UL /* Fixed value, shouldn't be modified.*/ 00052 00053 #define NRF_WDT_TASK_SET 1UL 00054 #define NRF_WDT_EVENT_CLEAR 0UL 00055 00056 /** 00057 * @enum nrf_wdt_task_t 00058 * @brief WDT tasks. 00059 */ 00060 typedef enum 00061 { 00062 /*lint -save -e30 -esym(628,__INTADDR__)*/ 00063 NRF_WDT_TASK_START = offsetof(NRF_WDT_Type, TASKS_START), /**< Task for starting WDT. */ 00064 /*lint -restore*/ 00065 } nrf_wdt_task_t; 00066 00067 /** 00068 * @enum nrf_wdt_event_t 00069 * @brief WDT events. 00070 */ 00071 typedef enum 00072 { 00073 /*lint -save -e30*/ 00074 NRF_WDT_EVENT_TIMEOUT = offsetof(NRF_WDT_Type, EVENTS_TIMEOUT), /**< Event from WDT time-out. */ 00075 /*lint -restore*/ 00076 } nrf_wdt_event_t; 00077 00078 /** 00079 * @enum nrf_wdt_behaviour_t 00080 * @brief WDT behavior in CPU SLEEP or HALT mode. 00081 */ 00082 typedef enum 00083 { 00084 NRF_WDT_BEHAVIOUR_RUN_SLEEP = WDT_CONFIG_SLEEP_Msk, /**< WDT will run when CPU is in SLEEP mode. */ 00085 NRF_WDT_BEHAVIOUR_RUN_HALT = WDT_CONFIG_HALT_Msk, /**< WDT will run when CPU is in HALT mode. */ 00086 NRF_WDT_BEHAVIOUR_RUN_SLEEP_HALT = WDT_CONFIG_SLEEP_Msk | WDT_CONFIG_HALT_Msk, /**< WDT will run when CPU is in SLEEP or HALT mode. */ 00087 NRF_WDT_BEHAVIOUR_PAUSE_SLEEP_HALT = 0, /**< WDT will be paused when CPU is in SLEEP or HALT mode. */ 00088 } nrf_wdt_behaviour_t; 00089 00090 /** 00091 * @enum nrf_wdt_rr_register_t 00092 * @brief WDT reload request registers. 00093 */ 00094 typedef enum 00095 { 00096 NRF_WDT_RR0 = 0, /**< Reload request register 0. */ 00097 NRF_WDT_RR1, /**< Reload request register 1. */ 00098 NRF_WDT_RR2, /**< Reload request register 2. */ 00099 NRF_WDT_RR3, /**< Reload request register 3. */ 00100 NRF_WDT_RR4, /**< Reload request register 4. */ 00101 NRF_WDT_RR5, /**< Reload request register 5. */ 00102 NRF_WDT_RR6, /**< Reload request register 6. */ 00103 NRF_WDT_RR7 /**< Reload request register 7. */ 00104 } nrf_wdt_rr_register_t; 00105 00106 /** 00107 * @enum nrf_wdt_int_mask_t 00108 * @brief WDT interrupts. 00109 */ 00110 typedef enum 00111 { 00112 NRF_WDT_INT_TIMEOUT_MASK = WDT_INTENSET_TIMEOUT_Msk, /**< WDT interrupt from time-out event. */ 00113 } nrf_wdt_int_mask_t; 00114 00115 /** 00116 * @brief Function for configuring the watchdog behavior when the CPU is sleeping or halted. 00117 * 00118 * @param behaviour Watchdog behavior when CPU is in SLEEP or HALT mode. 00119 */ 00120 __STATIC_INLINE void nrf_wdt_behaviour_set(nrf_wdt_behaviour_t behaviour) 00121 { 00122 NRF_WDT->CONFIG = behaviour; 00123 } 00124 00125 00126 /** 00127 * @brief Function for starting the watchdog. 00128 * 00129 * @param[in] task Task. 00130 */ 00131 __STATIC_INLINE void nrf_wdt_task_trigger(nrf_wdt_task_t task) 00132 { 00133 *((volatile uint32_t *)((uint8_t *)NRF_WDT + task)) = NRF_WDT_TASK_SET; 00134 } 00135 00136 00137 /** 00138 * @brief Function for clearing the WDT event. 00139 * 00140 * @param[in] event Event. 00141 */ 00142 __STATIC_INLINE void nrf_wdt_event_clear(nrf_wdt_event_t event) 00143 { 00144 *((volatile uint32_t *)((uint8_t *)NRF_WDT + (uint32_t)event)) = NRF_WDT_EVENT_CLEAR; 00145 } 00146 00147 00148 /** 00149 * @brief Function for retrieving the state of the WDT event. 00150 * 00151 * @param[in] event Event. 00152 * 00153 * @retval true If the event is set. 00154 * @retval false If the event is not set. 00155 */ 00156 __STATIC_INLINE bool nrf_wdt_event_check(nrf_wdt_event_t event) 00157 { 00158 return (bool)*((volatile uint32_t *)((uint8_t *)NRF_WDT + event)); 00159 } 00160 00161 00162 /** 00163 * @brief Function for enabling a specific interrupt. 00164 * 00165 * @param[in] int_mask Interrupt. 00166 */ 00167 __STATIC_INLINE void nrf_wdt_int_enable(uint32_t int_mask) 00168 { 00169 NRF_WDT->INTENSET = int_mask; 00170 } 00171 00172 00173 /** 00174 * @brief Function for retrieving the state of given interrupt. 00175 * 00176 * @param[in] int_mask Interrupt. 00177 * 00178 * @retval true Interrupt is enabled. 00179 * @retval false Interrupt is not enabled. 00180 */ 00181 __STATIC_INLINE bool nrf_wdt_int_enable_check(uint32_t int_mask) 00182 { 00183 return (bool)(NRF_WDT->INTENSET & int_mask); 00184 } 00185 00186 00187 /** 00188 * @brief Function for disabling a specific interrupt. 00189 * 00190 * @param[in] int_mask Interrupt. 00191 */ 00192 __STATIC_INLINE void nrf_wdt_int_disable(uint32_t int_mask) 00193 { 00194 NRF_WDT->INTENCLR = int_mask; 00195 } 00196 00197 00198 /** 00199 * @brief Function for returning the address of a specific WDT task register. 00200 * 00201 * @param[in] task Task. 00202 */ 00203 __STATIC_INLINE uint32_t nrf_wdt_task_address_get(nrf_wdt_task_t task) 00204 { 00205 return ((uint32_t)NRF_WDT + task); 00206 } 00207 00208 00209 /** 00210 * @brief Function for returning the address of a specific WDT event register. 00211 * 00212 * @param[in] event Event. 00213 * 00214 * @retval address of requested event register 00215 */ 00216 __STATIC_INLINE uint32_t nrf_wdt_event_address_get(nrf_wdt_event_t event) 00217 { 00218 return ((uint32_t)NRF_WDT + event); 00219 } 00220 00221 00222 /** 00223 * @brief Function for retrieving the watchdog status. 00224 * 00225 * @retval true If the watchdog is started. 00226 * @retval false If the watchdog is not started. 00227 */ 00228 __STATIC_INLINE bool nrf_wdt_started(void) 00229 { 00230 return (bool)(NRF_WDT->RUNSTATUS); 00231 } 00232 00233 00234 /** 00235 * @brief Function for retrieving the watchdog reload request status. 00236 * 00237 * @param[in] rr_register Reload request register to check. 00238 * 00239 * @retval true If a reload request is running. 00240 * @retval false If no reload request is running. 00241 */ 00242 __STATIC_INLINE bool nrf_wdt_request_status(nrf_wdt_rr_register_t rr_register) 00243 { 00244 return (bool)(((NRF_WDT->REQSTATUS) >> rr_register) & 0x1UL); 00245 } 00246 00247 00248 /** 00249 * @brief Function for setting the watchdog reload value. 00250 * 00251 * @param[in] reload_value Watchdog counter initial value. 00252 */ 00253 __STATIC_INLINE void nrf_wdt_reload_value_set(uint32_t reload_value) 00254 { 00255 NRF_WDT->CRV = reload_value; 00256 } 00257 00258 00259 /** 00260 * @brief Function for retrieving the watchdog reload value. 00261 * 00262 * @retval Reload value. 00263 */ 00264 __STATIC_INLINE uint32_t nrf_wdt_reload_value_get(void) 00265 { 00266 return (uint32_t)NRF_WDT->CRV; 00267 } 00268 00269 00270 /** 00271 * @brief Function for enabling a specific reload request register. 00272 * 00273 * @param[in] rr_register Reload request register to enable. 00274 */ 00275 __STATIC_INLINE void nrf_wdt_reload_request_enable(nrf_wdt_rr_register_t rr_register) 00276 { 00277 NRF_WDT->RREN |= 0x1UL << rr_register; 00278 } 00279 00280 00281 /** 00282 * @brief Function for disabling a specific reload request register. 00283 * 00284 * @param[in] rr_register Reload request register to disable. 00285 */ 00286 __STATIC_INLINE void nrf_wdt_reload_request_disable(nrf_wdt_rr_register_t rr_register) 00287 { 00288 NRF_WDT->RREN &= ~(0x1UL << rr_register); 00289 } 00290 00291 00292 /** 00293 * @brief Function for retrieving the status of a specific reload request register. 00294 * 00295 * @param[in] rr_register Reload request register to check. 00296 * 00297 * @retval true If the reload request register is enabled. 00298 * @retval false If the reload request register is not enabled. 00299 */ 00300 __STATIC_INLINE bool nrf_wdt_reload_request_is_enabled(nrf_wdt_rr_register_t rr_register) 00301 { 00302 return (bool)(NRF_WDT->RREN & (0x1UL << rr_register)); 00303 } 00304 00305 00306 /** 00307 * @brief Function for setting a specific reload request register. 00308 * 00309 * @param[in] rr_register Reload request register to set. 00310 */ 00311 __STATIC_INLINE void nrf_wdt_reload_request_set(nrf_wdt_rr_register_t rr_register) 00312 { 00313 NRF_WDT->RR[rr_register] = NRF_WDT_RR_VALUE; 00314 } 00315 00316 00317 #endif 00318 00319 /** @} */
Generated on Tue Jul 12 2022 14:11:20 by
