Nordic nrf51 sdk sources. Mirrored from https://github.com/ARMmbed/nrf51-sdk.

Dependents:   nRF51822 nRF51822

Committer:
vcoubard
Date:
Thu Apr 07 17:37:56 2016 +0100
Revision:
28:041dac1366b2
Parent:
20:a90c48eb1d30
Child:
29:286940b7ee5a
Synchronized with git rev 012b8118
Author: Liyou Zhou
Pull in files from sdk 10.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vcoubard 28:041dac1366b2 1 /* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved.
vcoubard 9:7cca4996583b 2 *
vcoubard 28:041dac1366b2 3 * The information contained herein is property of Nordic Semiconductor ASA.
vcoubard 28:041dac1366b2 4 * Terms and conditions of usage are described in detail in NORDIC
vcoubard 28:041dac1366b2 5 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
vcoubard 9:7cca4996583b 6 *
vcoubard 28:041dac1366b2 7 * Licensees are granted free, non-transferable use of the information. NO
vcoubard 28:041dac1366b2 8 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
vcoubard 28:041dac1366b2 9 * the file.
vcoubard 9:7cca4996583b 10 *
vcoubard 9:7cca4996583b 11 */
vcoubard 9:7cca4996583b 12
vcoubard 9:7cca4996583b 13 /**
vcoubard 9:7cca4996583b 14 * @defgroup nrf_wdt_hal WDT HAL
vcoubard 9:7cca4996583b 15 * @{
vcoubard 9:7cca4996583b 16 * @ingroup nrf_wdt
vcoubard 9:7cca4996583b 17 *
vcoubard 28:041dac1366b2 18 * @brief Hardware access layer for accessing the watchdog timer (WDT) peripheral.
vcoubard 9:7cca4996583b 19 */
vcoubard 9:7cca4996583b 20
vcoubard 9:7cca4996583b 21 #ifndef NRF_WDT_H__
vcoubard 9:7cca4996583b 22 #define NRF_WDT_H__
vcoubard 9:7cca4996583b 23
vcoubard 9:7cca4996583b 24 #include <stddef.h>
vcoubard 9:7cca4996583b 25 #include <stdbool.h>
vcoubard 9:7cca4996583b 26 #include <stdint.h>
vcoubard 9:7cca4996583b 27
vcoubard 9:7cca4996583b 28 #include "nrf.h"
vcoubard 9:7cca4996583b 29
vcoubard 9:7cca4996583b 30 #define NRF_WDT_CHANNEL_NUMBER 0x8UL
vcoubard 9:7cca4996583b 31 #define NRF_WDT_RR_VALUE 0x6E524635UL /* Fixed value, shouldn't be modified.*/
vcoubard 9:7cca4996583b 32
vcoubard 9:7cca4996583b 33 #define NRF_WDT_TASK_SET 1UL
vcoubard 9:7cca4996583b 34 #define NRF_WDT_EVENT_CLEAR 0UL
vcoubard 9:7cca4996583b 35
vcoubard 9:7cca4996583b 36 /**
vcoubard 9:7cca4996583b 37 * @enum nrf_wdt_task_t
vcoubard 9:7cca4996583b 38 * @brief WDT tasks.
vcoubard 9:7cca4996583b 39 */
vcoubard 9:7cca4996583b 40 typedef enum
vcoubard 9:7cca4996583b 41 {
vcoubard 9:7cca4996583b 42 /*lint -save -e30 -esym(628,__INTADDR__)*/
vcoubard 9:7cca4996583b 43 NRF_WDT_TASK_START = offsetof(NRF_WDT_Type, TASKS_START), /**< Task for starting WDT. */
vcoubard 9:7cca4996583b 44 /*lint -restore*/
vcoubard 9:7cca4996583b 45 } nrf_wdt_task_t;
vcoubard 9:7cca4996583b 46
vcoubard 9:7cca4996583b 47 /**
vcoubard 9:7cca4996583b 48 * @enum nrf_wdt_event_t
vcoubard 9:7cca4996583b 49 * @brief WDT events.
vcoubard 9:7cca4996583b 50 */
vcoubard 9:7cca4996583b 51 typedef enum
vcoubard 9:7cca4996583b 52 {
vcoubard 9:7cca4996583b 53 /*lint -save -e30*/
vcoubard 9:7cca4996583b 54 NRF_WDT_EVENT_TIMEOUT = offsetof(NRF_WDT_Type, EVENTS_TIMEOUT), /**< Event from WDT time-out. */
vcoubard 9:7cca4996583b 55 /*lint -restore*/
vcoubard 9:7cca4996583b 56 } nrf_wdt_event_t;
vcoubard 9:7cca4996583b 57
vcoubard 9:7cca4996583b 58 /**
vcoubard 9:7cca4996583b 59 * @enum nrf_wdt_behaviour_t
vcoubard 9:7cca4996583b 60 * @brief WDT behavior in CPU SLEEP or HALT mode.
vcoubard 9:7cca4996583b 61 */
vcoubard 9:7cca4996583b 62 typedef enum
vcoubard 9:7cca4996583b 63 {
vcoubard 9:7cca4996583b 64 NRF_WDT_BEHAVIOUR_RUN_SLEEP = WDT_CONFIG_SLEEP_Msk, /**< WDT will run when CPU is in SLEEP mode. */
vcoubard 9:7cca4996583b 65 NRF_WDT_BEHAVIOUR_RUN_HALT = WDT_CONFIG_HALT_Msk, /**< WDT will run when CPU is in HALT mode. */
vcoubard 9:7cca4996583b 66 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. */
vcoubard 9:7cca4996583b 67 NRF_WDT_BEHAVIOUR_PAUSE_SLEEP_HALT = 0, /**< WDT will be paused when CPU is in SLEEP or HALT mode. */
vcoubard 9:7cca4996583b 68 } nrf_wdt_behaviour_t;
vcoubard 9:7cca4996583b 69
vcoubard 9:7cca4996583b 70 /**
vcoubard 9:7cca4996583b 71 * @enum nrf_wdt_rr_register_t
vcoubard 9:7cca4996583b 72 * @brief WDT reload request registers.
vcoubard 9:7cca4996583b 73 */
vcoubard 9:7cca4996583b 74 typedef enum
vcoubard 9:7cca4996583b 75 {
vcoubard 9:7cca4996583b 76 NRF_WDT_RR0 = 0, /**< Reload request register 0. */
vcoubard 9:7cca4996583b 77 NRF_WDT_RR1, /**< Reload request register 1. */
vcoubard 9:7cca4996583b 78 NRF_WDT_RR2, /**< Reload request register 2. */
vcoubard 9:7cca4996583b 79 NRF_WDT_RR3, /**< Reload request register 3. */
vcoubard 9:7cca4996583b 80 NRF_WDT_RR4, /**< Reload request register 4. */
vcoubard 9:7cca4996583b 81 NRF_WDT_RR5, /**< Reload request register 5. */
vcoubard 9:7cca4996583b 82 NRF_WDT_RR6, /**< Reload request register 6. */
vcoubard 9:7cca4996583b 83 NRF_WDT_RR7 /**< Reload request register 7. */
vcoubard 9:7cca4996583b 84 } nrf_wdt_rr_register_t;
vcoubard 9:7cca4996583b 85
vcoubard 9:7cca4996583b 86 /**
vcoubard 9:7cca4996583b 87 * @enum nrf_wdt_int_mask_t
vcoubard 9:7cca4996583b 88 * @brief WDT interrupts.
vcoubard 9:7cca4996583b 89 */
vcoubard 9:7cca4996583b 90 typedef enum
vcoubard 9:7cca4996583b 91 {
vcoubard 9:7cca4996583b 92 NRF_WDT_INT_TIMEOUT_MASK = WDT_INTENSET_TIMEOUT_Msk, /**< WDT interrupt from time-out event. */
vcoubard 9:7cca4996583b 93 } nrf_wdt_int_mask_t;
vcoubard 9:7cca4996583b 94
vcoubard 9:7cca4996583b 95 /**
vcoubard 9:7cca4996583b 96 * @brief Function for configuring the watchdog behavior when the CPU is sleeping or halted.
vcoubard 9:7cca4996583b 97 *
vcoubard 9:7cca4996583b 98 * @param behaviour Watchdog behavior when CPU is in SLEEP or HALT mode.
vcoubard 9:7cca4996583b 99 */
vcoubard 9:7cca4996583b 100 __STATIC_INLINE void nrf_wdt_behaviour_set(nrf_wdt_behaviour_t behaviour)
vcoubard 9:7cca4996583b 101 {
vcoubard 9:7cca4996583b 102 NRF_WDT->CONFIG = behaviour;
vcoubard 9:7cca4996583b 103 }
vcoubard 9:7cca4996583b 104
vcoubard 9:7cca4996583b 105
vcoubard 9:7cca4996583b 106 /**
vcoubard 9:7cca4996583b 107 * @brief Function for starting the watchdog.
vcoubard 9:7cca4996583b 108 *
vcoubard 9:7cca4996583b 109 * @param[in] task Task.
vcoubard 9:7cca4996583b 110 */
vcoubard 9:7cca4996583b 111 __STATIC_INLINE void nrf_wdt_task_trigger(nrf_wdt_task_t task)
vcoubard 9:7cca4996583b 112 {
vcoubard 9:7cca4996583b 113 *((volatile uint32_t *)((uint8_t *)NRF_WDT + task)) = NRF_WDT_TASK_SET;
vcoubard 9:7cca4996583b 114 }
vcoubard 9:7cca4996583b 115
vcoubard 9:7cca4996583b 116
vcoubard 9:7cca4996583b 117 /**
vcoubard 9:7cca4996583b 118 * @brief Function for clearing the WDT event.
vcoubard 9:7cca4996583b 119 *
vcoubard 9:7cca4996583b 120 * @param[in] event Event.
vcoubard 9:7cca4996583b 121 */
vcoubard 9:7cca4996583b 122 __STATIC_INLINE void nrf_wdt_event_clear(nrf_wdt_event_t event)
vcoubard 9:7cca4996583b 123 {
vcoubard 9:7cca4996583b 124 *((volatile uint32_t *)((uint8_t *)NRF_WDT + (uint32_t)event)) = NRF_WDT_EVENT_CLEAR;
vcoubard 9:7cca4996583b 125 }
vcoubard 9:7cca4996583b 126
vcoubard 9:7cca4996583b 127
vcoubard 9:7cca4996583b 128 /**
vcoubard 9:7cca4996583b 129 * @brief Function for retrieving the state of the WDT event.
vcoubard 9:7cca4996583b 130 *
vcoubard 9:7cca4996583b 131 * @param[in] event Event.
vcoubard 9:7cca4996583b 132 *
vcoubard 9:7cca4996583b 133 * @retval true If the event is set.
vcoubard 9:7cca4996583b 134 * @retval false If the event is not set.
vcoubard 9:7cca4996583b 135 */
vcoubard 9:7cca4996583b 136 __STATIC_INLINE bool nrf_wdt_event_check(nrf_wdt_event_t event)
vcoubard 9:7cca4996583b 137 {
vcoubard 9:7cca4996583b 138 return (bool)*((volatile uint32_t *)((uint8_t *)NRF_WDT + event));
vcoubard 9:7cca4996583b 139 }
vcoubard 9:7cca4996583b 140
vcoubard 9:7cca4996583b 141
vcoubard 9:7cca4996583b 142 /**
vcoubard 9:7cca4996583b 143 * @brief Function for enabling a specific interrupt.
vcoubard 9:7cca4996583b 144 *
vcoubard 9:7cca4996583b 145 * @param[in] int_mask Interrupt.
vcoubard 9:7cca4996583b 146 */
vcoubard 9:7cca4996583b 147 __STATIC_INLINE void nrf_wdt_int_enable(uint32_t int_mask)
vcoubard 9:7cca4996583b 148 {
vcoubard 9:7cca4996583b 149 NRF_WDT->INTENSET = int_mask;
vcoubard 9:7cca4996583b 150 }
vcoubard 9:7cca4996583b 151
vcoubard 9:7cca4996583b 152
vcoubard 9:7cca4996583b 153 /**
vcoubard 9:7cca4996583b 154 * @brief Function for retrieving the state of given interrupt.
vcoubard 9:7cca4996583b 155 *
vcoubard 9:7cca4996583b 156 * @param[in] int_mask Interrupt.
vcoubard 9:7cca4996583b 157 *
vcoubard 9:7cca4996583b 158 * @retval true Interrupt is enabled.
vcoubard 9:7cca4996583b 159 * @retval false Interrupt is not enabled.
vcoubard 9:7cca4996583b 160 */
vcoubard 9:7cca4996583b 161 __STATIC_INLINE bool nrf_wdt_int_enable_check(uint32_t int_mask)
vcoubard 9:7cca4996583b 162 {
vcoubard 9:7cca4996583b 163 return (bool)(NRF_WDT->INTENSET & int_mask);
vcoubard 9:7cca4996583b 164 }
vcoubard 9:7cca4996583b 165
vcoubard 9:7cca4996583b 166
vcoubard 9:7cca4996583b 167 /**
vcoubard 9:7cca4996583b 168 * @brief Function for disabling a specific interrupt.
vcoubard 9:7cca4996583b 169 *
vcoubard 9:7cca4996583b 170 * @param[in] int_mask Interrupt.
vcoubard 9:7cca4996583b 171 */
vcoubard 9:7cca4996583b 172 __STATIC_INLINE void nrf_wdt_int_disable(uint32_t int_mask)
vcoubard 9:7cca4996583b 173 {
vcoubard 9:7cca4996583b 174 NRF_WDT->INTENCLR = int_mask;
vcoubard 9:7cca4996583b 175 }
vcoubard 9:7cca4996583b 176
vcoubard 9:7cca4996583b 177
vcoubard 9:7cca4996583b 178 /**
vcoubard 9:7cca4996583b 179 * @brief Function for returning the address of a specific WDT task register.
vcoubard 9:7cca4996583b 180 *
vcoubard 9:7cca4996583b 181 * @param[in] task Task.
vcoubard 9:7cca4996583b 182 */
vcoubard 9:7cca4996583b 183 __STATIC_INLINE uint32_t nrf_wdt_task_address_get(nrf_wdt_task_t task)
vcoubard 9:7cca4996583b 184 {
vcoubard 9:7cca4996583b 185 return ((uint32_t)NRF_WDT + task);
vcoubard 9:7cca4996583b 186 }
vcoubard 9:7cca4996583b 187
vcoubard 9:7cca4996583b 188
vcoubard 9:7cca4996583b 189 /**
vcoubard 9:7cca4996583b 190 * @brief Function for returning the address of a specific WDT event register.
vcoubard 9:7cca4996583b 191 *
vcoubard 9:7cca4996583b 192 * @param[in] event Event.
vcoubard 9:7cca4996583b 193 *
vcoubard 9:7cca4996583b 194 * @retval address of requested event register
vcoubard 9:7cca4996583b 195 */
vcoubard 9:7cca4996583b 196 __STATIC_INLINE uint32_t nrf_wdt_event_address_get(nrf_wdt_event_t event)
vcoubard 9:7cca4996583b 197 {
vcoubard 9:7cca4996583b 198 return ((uint32_t)NRF_WDT + event);
vcoubard 9:7cca4996583b 199 }
vcoubard 9:7cca4996583b 200
vcoubard 9:7cca4996583b 201
vcoubard 9:7cca4996583b 202 /**
vcoubard 9:7cca4996583b 203 * @brief Function for retrieving the watchdog status.
vcoubard 9:7cca4996583b 204 *
vcoubard 9:7cca4996583b 205 * @retval true If the watchdog is started.
vcoubard 9:7cca4996583b 206 * @retval false If the watchdog is not started.
vcoubard 9:7cca4996583b 207 */
vcoubard 9:7cca4996583b 208 __STATIC_INLINE bool nrf_wdt_started(void)
vcoubard 9:7cca4996583b 209 {
vcoubard 9:7cca4996583b 210 return (bool)(NRF_WDT->RUNSTATUS);
vcoubard 9:7cca4996583b 211 }
vcoubard 9:7cca4996583b 212
vcoubard 9:7cca4996583b 213
vcoubard 9:7cca4996583b 214 /**
vcoubard 9:7cca4996583b 215 * @brief Function for retrieving the watchdog reload request status.
vcoubard 9:7cca4996583b 216 *
vcoubard 9:7cca4996583b 217 * @param[in] rr_register Reload request register to check.
vcoubard 9:7cca4996583b 218 *
vcoubard 9:7cca4996583b 219 * @retval true If a reload request is running.
vcoubard 9:7cca4996583b 220 * @retval false If no reload request is running.
vcoubard 9:7cca4996583b 221 */
vcoubard 9:7cca4996583b 222 __STATIC_INLINE bool nrf_wdt_request_status(nrf_wdt_rr_register_t rr_register)
vcoubard 9:7cca4996583b 223 {
vcoubard 9:7cca4996583b 224 return (bool)(((NRF_WDT->REQSTATUS) >> rr_register) & 0x1UL);
vcoubard 9:7cca4996583b 225 }
vcoubard 9:7cca4996583b 226
vcoubard 9:7cca4996583b 227
vcoubard 9:7cca4996583b 228 /**
vcoubard 9:7cca4996583b 229 * @brief Function for setting the watchdog reload value.
vcoubard 9:7cca4996583b 230 *
vcoubard 9:7cca4996583b 231 * @param[in] reload_value Watchdog counter initial value.
vcoubard 9:7cca4996583b 232 */
vcoubard 9:7cca4996583b 233 __STATIC_INLINE void nrf_wdt_reload_value_set(uint32_t reload_value)
vcoubard 9:7cca4996583b 234 {
vcoubard 9:7cca4996583b 235 NRF_WDT->CRV = reload_value;
vcoubard 9:7cca4996583b 236 }
vcoubard 9:7cca4996583b 237
vcoubard 9:7cca4996583b 238
vcoubard 9:7cca4996583b 239 /**
vcoubard 9:7cca4996583b 240 * @brief Function for retrieving the watchdog reload value.
vcoubard 9:7cca4996583b 241 *
vcoubard 9:7cca4996583b 242 * @retval Reload value.
vcoubard 9:7cca4996583b 243 */
vcoubard 9:7cca4996583b 244 __STATIC_INLINE uint32_t nrf_wdt_reload_value_get(void)
vcoubard 9:7cca4996583b 245 {
vcoubard 9:7cca4996583b 246 return (uint32_t)NRF_WDT->CRV;
vcoubard 9:7cca4996583b 247 }
vcoubard 9:7cca4996583b 248
vcoubard 9:7cca4996583b 249
vcoubard 9:7cca4996583b 250 /**
vcoubard 9:7cca4996583b 251 * @brief Function for enabling a specific reload request register.
vcoubard 9:7cca4996583b 252 *
vcoubard 9:7cca4996583b 253 * @param[in] rr_register Reload request register to enable.
vcoubard 9:7cca4996583b 254 */
vcoubard 9:7cca4996583b 255 __STATIC_INLINE void nrf_wdt_reload_request_enable(nrf_wdt_rr_register_t rr_register)
vcoubard 9:7cca4996583b 256 {
vcoubard 9:7cca4996583b 257 NRF_WDT->RREN |= 0x1UL << rr_register;
vcoubard 9:7cca4996583b 258 }
vcoubard 9:7cca4996583b 259
vcoubard 9:7cca4996583b 260
vcoubard 9:7cca4996583b 261 /**
vcoubard 9:7cca4996583b 262 * @brief Function for disabling a specific reload request register.
vcoubard 9:7cca4996583b 263 *
vcoubard 9:7cca4996583b 264 * @param[in] rr_register Reload request register to disable.
vcoubard 9:7cca4996583b 265 */
vcoubard 9:7cca4996583b 266 __STATIC_INLINE void nrf_wdt_reload_request_disable(nrf_wdt_rr_register_t rr_register)
vcoubard 9:7cca4996583b 267 {
vcoubard 9:7cca4996583b 268 NRF_WDT->RREN &= ~(0x1UL << rr_register);
vcoubard 9:7cca4996583b 269 }
vcoubard 9:7cca4996583b 270
vcoubard 9:7cca4996583b 271
vcoubard 9:7cca4996583b 272 /**
vcoubard 9:7cca4996583b 273 * @brief Function for retrieving the status of a specific reload request register.
vcoubard 9:7cca4996583b 274 *
vcoubard 9:7cca4996583b 275 * @param[in] rr_register Reload request register to check.
vcoubard 9:7cca4996583b 276 *
vcoubard 9:7cca4996583b 277 * @retval true If the reload request register is enabled.
vcoubard 9:7cca4996583b 278 * @retval false If the reload request register is not enabled.
vcoubard 9:7cca4996583b 279 */
vcoubard 9:7cca4996583b 280 __STATIC_INLINE bool nrf_wdt_reload_request_is_enabled(nrf_wdt_rr_register_t rr_register)
vcoubard 9:7cca4996583b 281 {
vcoubard 9:7cca4996583b 282 return (bool)(NRF_WDT->RREN & (0x1UL << rr_register));
vcoubard 9:7cca4996583b 283 }
vcoubard 9:7cca4996583b 284
vcoubard 9:7cca4996583b 285
vcoubard 9:7cca4996583b 286 /**
vcoubard 9:7cca4996583b 287 * @brief Function for setting a specific reload request register.
vcoubard 9:7cca4996583b 288 *
vcoubard 9:7cca4996583b 289 * @param[in] rr_register Reload request register to set.
vcoubard 9:7cca4996583b 290 */
vcoubard 9:7cca4996583b 291 __STATIC_INLINE void nrf_wdt_reload_request_set(nrf_wdt_rr_register_t rr_register)
vcoubard 9:7cca4996583b 292 {
vcoubard 9:7cca4996583b 293 NRF_WDT->RR[rr_register] = NRF_WDT_RR_VALUE;
vcoubard 9:7cca4996583b 294 }
vcoubard 9:7cca4996583b 295
vcoubard 9:7cca4996583b 296
vcoubard 9:7cca4996583b 297 #endif
vcoubard 9:7cca4996583b 298
vcoubard 9:7cca4996583b 299 /** @} */