1 /*
2 * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this
9 * list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its
16 * contributors may be used to endorse or promote products derived from this
17 * software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #ifndef NRF_UART_H__
33 #define NRF_UART_H__
34
35 #include <nrfx.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 /**
42 * @defgroup nrf_uart_hal UART HAL
43 * @{
44 * @ingroup nrf_uart
45 * @brief Hardware access layer for managing the UART peripheral.
46 */
47
48 #define NRF_UART_PSEL_DISCONNECTED 0xFFFFFFFF
49
50 /**
51 * @enum nrf_uart_task_t
52 * @brief UART tasks.
53 */
54 typedef enum
55 {
56 /*lint -save -e30 -esym(628,__INTADDR__)*/
57 NRF_UART_TASK_STARTRX = offsetof(NRF_UART_Type, TASKS_STARTRX), /**< Task for starting reception. */
58 NRF_UART_TASK_STOPRX = offsetof(NRF_UART_Type, TASKS_STOPRX), /**< Task for stopping reception. */
59 NRF_UART_TASK_STARTTX = offsetof(NRF_UART_Type, TASKS_STARTTX), /**< Task for starting transmission. */
60 NRF_UART_TASK_STOPTX = offsetof(NRF_UART_Type, TASKS_STOPTX), /**< Task for stopping transmission. */
61 NRF_UART_TASK_SUSPEND = offsetof(NRF_UART_Type, TASKS_SUSPEND), /**< Task for suspending UART. */
62 /*lint -restore*/
63 } nrf_uart_task_t;
64
65 /**
66 * @enum nrf_uart_event_t
67 * @brief UART events.
68 */
69 typedef enum
70 {
71 /*lint -save -e30*/
72 NRF_UART_EVENT_CTS = offsetof(NRF_UART_Type, EVENTS_CTS), /**< Event from CTS line activation. */
73 NRF_UART_EVENT_NCTS = offsetof(NRF_UART_Type, EVENTS_NCTS), /**< Event from CTS line deactivation. */
74 NRF_UART_EVENT_RXDRDY = offsetof(NRF_UART_Type, EVENTS_RXDRDY),/**< Event from data ready in RXD. */
75 NRF_UART_EVENT_TXDRDY = offsetof(NRF_UART_Type, EVENTS_TXDRDY),/**< Event from data sent from TXD. */
76 NRF_UART_EVENT_ERROR = offsetof(NRF_UART_Type, EVENTS_ERROR), /**< Event from error detection. */
77 NRF_UART_EVENT_RXTO = offsetof(NRF_UART_Type, EVENTS_RXTO) /**< Event from receiver timeout. */
78 /*lint -restore*/
79 } nrf_uart_event_t;
80
81 /**
82 * @enum nrf_uart_int_mask_t
83 * @brief UART interrupts.
84 */
85 typedef enum
86 {
87 /*lint -save -e30*/
88 NRF_UART_INT_MASK_CTS = UART_INTENCLR_CTS_Msk, /**< CTS line activation interrupt. */
89 NRF_UART_INT_MASK_NCTS = UART_INTENCLR_NCTS_Msk, /**< CTS line deactivation interrupt. */
90 NRF_UART_INT_MASK_RXDRDY = UART_INTENCLR_RXDRDY_Msk, /**< Data ready in RXD interrupt. */
91 NRF_UART_INT_MASK_TXDRDY = UART_INTENCLR_TXDRDY_Msk, /**< Data sent from TXD interrupt. */
92 NRF_UART_INT_MASK_ERROR = UART_INTENCLR_ERROR_Msk, /**< Error detection interrupt. */
93 NRF_UART_INT_MASK_RXTO = UART_INTENCLR_RXTO_Msk /**< Receiver timeout interrupt. */
94 /*lint -restore*/
95 } nrf_uart_int_mask_t;
96
97 /**
98 * @enum nrf_uart_baudrate_t
99 * @brief Baudrates supported by UART.
100 */
101 typedef enum
102 {
103 NRF_UART_BAUDRATE_1200 = UART_BAUDRATE_BAUDRATE_Baud1200, /**< 1200 baud. */
104 NRF_UART_BAUDRATE_2400 = UART_BAUDRATE_BAUDRATE_Baud2400, /**< 2400 baud. */
105 NRF_UART_BAUDRATE_4800 = UART_BAUDRATE_BAUDRATE_Baud4800, /**< 4800 baud. */
106 NRF_UART_BAUDRATE_9600 = UART_BAUDRATE_BAUDRATE_Baud9600, /**< 9600 baud. */
107 NRF_UART_BAUDRATE_14400 = UART_BAUDRATE_BAUDRATE_Baud14400, /**< 14400 baud. */
108 NRF_UART_BAUDRATE_19200 = UART_BAUDRATE_BAUDRATE_Baud19200, /**< 19200 baud. */
109 NRF_UART_BAUDRATE_28800 = UART_BAUDRATE_BAUDRATE_Baud28800, /**< 28800 baud. */
110 NRF_UART_BAUDRATE_31250 = UART_BAUDRATE_BAUDRATE_Baud31250, /**< 31250 baud. */
111 NRF_UART_BAUDRATE_38400 = UART_BAUDRATE_BAUDRATE_Baud38400, /**< 38400 baud. */
112 NRF_UART_BAUDRATE_56000 = UART_BAUDRATE_BAUDRATE_Baud56000, /**< 56000 baud. */
113 NRF_UART_BAUDRATE_57600 = UART_BAUDRATE_BAUDRATE_Baud57600, /**< 57600 baud. */
114 NRF_UART_BAUDRATE_76800 = UART_BAUDRATE_BAUDRATE_Baud76800, /**< 76800 baud. */
115 NRF_UART_BAUDRATE_115200 = UART_BAUDRATE_BAUDRATE_Baud115200, /**< 115200 baud. */
116 NRF_UART_BAUDRATE_230400 = UART_BAUDRATE_BAUDRATE_Baud230400, /**< 230400 baud. */
117 NRF_UART_BAUDRATE_250000 = UART_BAUDRATE_BAUDRATE_Baud250000, /**< 250000 baud. */
118 NRF_UART_BAUDRATE_460800 = UART_BAUDRATE_BAUDRATE_Baud460800, /**< 460800 baud. */
119 NRF_UART_BAUDRATE_921600 = UART_BAUDRATE_BAUDRATE_Baud921600, /**< 921600 baud. */
120 NRF_UART_BAUDRATE_1000000 = UART_BAUDRATE_BAUDRATE_Baud1M, /**< 1000000 baud. */
121 } nrf_uart_baudrate_t;
122
123 /**
124 * @enum nrf_uart_error_mask_t
125 * @brief Types of UART error masks.
126 */
127 typedef enum
128 {
129 NRF_UART_ERROR_OVERRUN_MASK = UART_ERRORSRC_OVERRUN_Msk, /**< Overrun error. */
130 NRF_UART_ERROR_PARITY_MASK = UART_ERRORSRC_PARITY_Msk, /**< Parity error. */
131 NRF_UART_ERROR_FRAMING_MASK = UART_ERRORSRC_FRAMING_Msk, /**< Framing error. */
132 NRF_UART_ERROR_BREAK_MASK = UART_ERRORSRC_BREAK_Msk, /**< Break error. */
133 } nrf_uart_error_mask_t;
134
135 /**
136 * @enum nrf_uart_parity_t
137 * @brief Types of UART parity modes.
138 */
139 typedef enum
140 {
141 NRF_UART_PARITY_EXCLUDED = UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos, /**< Parity excluded. */
142 NRF_UART_PARITY_INCLUDED = UART_CONFIG_PARITY_Included << UART_CONFIG_PARITY_Pos, /**< Parity included. */
143 } nrf_uart_parity_t;
144
145 /**
146 * @enum nrf_uart_hwfc_t
147 * @brief Types of UART flow control modes.
148 */
149 typedef enum
150 {
151 NRF_UART_HWFC_DISABLED = UART_CONFIG_HWFC_Disabled, /**< HW flow control disabled. */
152 NRF_UART_HWFC_ENABLED = UART_CONFIG_HWFC_Enabled, /**< HW flow control enabled. */
153 } nrf_uart_hwfc_t;
154
155 /**
156 * @brief Function for clearing a specific UART event.
157 *
158 * @param[in] p_reg Pointer to the peripheral registers structure.
159 * @param[in] event Event to clear.
160 */
161 __STATIC_INLINE void nrf_uart_event_clear(NRF_UART_Type * p_reg, nrf_uart_event_t event);
162
163 /**
164 * @brief Function for checking the state of a specific UART event.
165 *
166 * @param[in] p_reg Pointer to the peripheral registers structure.
167 * @param[in] event Event to check.
168 *
169 * @retval True if event is set, False otherwise.
170 */
171 __STATIC_INLINE bool nrf_uart_event_check(NRF_UART_Type * p_reg, nrf_uart_event_t event);
172
173 /**
174 * @brief Function for returning the address of a specific UART event register.
175 *
176 * @param[in] p_reg Pointer to the peripheral registers structure.
177 * @param[in] event Desired event.
178 *
179 * @retval Address of specified event register.
180 */
181 __STATIC_INLINE uint32_t nrf_uart_event_address_get(NRF_UART_Type * p_reg,
182 nrf_uart_event_t event);
183
184 /**
185 * @brief Function for enabling a specific interrupt.
186 *
187 * @param p_reg Pointer to the peripheral registers structure.
188 * @param int_mask Interrupts to enable.
189 */
190 __STATIC_INLINE void nrf_uart_int_enable(NRF_UART_Type * p_reg, uint32_t int_mask);
191
192 /**
193 * @brief Function for retrieving the state of a given interrupt.
194 *
195 * @param p_reg Pointer to the peripheral registers structure.
196 * @param int_mask Mask of interrupt to check.
197 *
198 * @retval true If the interrupt is enabled.
199 * @retval false If the interrupt is not enabled.
200 */
201 __STATIC_INLINE bool nrf_uart_int_enable_check(NRF_UART_Type * p_reg, uint32_t int_mask);
202
203 /**
204 * @brief Function for disabling specific interrupts.
205 *
206 * @param p_reg Pointer to the peripheral registers structure.
207 * @param int_mask Interrupts to disable.
208 */
209 __STATIC_INLINE void nrf_uart_int_disable(NRF_UART_Type * p_reg, uint32_t int_mask);
210
211 /**
212 * @brief Function for getting error source mask. Function is clearing error source flags after reading.
213 *
214 * @param p_reg Pointer to the peripheral registers structure.
215 * @return Mask with error source flags.
216 */
217 __STATIC_INLINE uint32_t nrf_uart_errorsrc_get_and_clear(NRF_UART_Type * p_reg);
218
219 /**
220 * @brief Function for enabling UART.
221 *
222 * @param p_reg Pointer to the peripheral registers structure.
223 */
224 __STATIC_INLINE void nrf_uart_enable(NRF_UART_Type * p_reg);
225
226 /**
227 * @brief Function for disabling UART.
228 *
229 * @param p_reg Pointer to the peripheral registers structure.
230 */
231 __STATIC_INLINE void nrf_uart_disable(NRF_UART_Type * p_reg);
232
233 /**
234 * @brief Function for configuring TX/RX pins.
235 *
236 * @param p_reg Pointer to the peripheral registers structure.
237 * @param pseltxd TXD pin number.
238 * @param pselrxd RXD pin number.
239 */
240 __STATIC_INLINE void nrf_uart_txrx_pins_set(NRF_UART_Type * p_reg, uint32_t pseltxd, uint32_t pselrxd);
241
242 /**
243 * @brief Function for disconnecting TX/RX pins.
244 *
245 * @param p_reg Pointer to the peripheral registers structure.
246 */
247 __STATIC_INLINE void nrf_uart_txrx_pins_disconnect(NRF_UART_Type * p_reg);
248
249 /**
250 * @brief Function for getting TX pin.
251 *
252 * @param p_reg Pointer to the peripheral registers structure.
253 */
254 __STATIC_INLINE uint32_t nrf_uart_tx_pin_get(NRF_UART_Type * p_reg);
255
256 /**
257 * @brief Function for getting RX pin.
258 *
259 * @param p_reg Pointer to the peripheral registers structure.
260 */
261 __STATIC_INLINE uint32_t nrf_uart_rx_pin_get(NRF_UART_Type * p_reg);
262
263 /**
264 * @brief Function for getting RTS pin.
265 *
266 * @param p_reg Pointer to the peripheral registers structure.
267 */
268 __STATIC_INLINE uint32_t nrf_uart_rts_pin_get(NRF_UART_Type * p_reg);
269
270 /**
271 * @brief Function for getting CTS pin.
272 *
273 * @param p_reg Pointer to the peripheral registers structure.
274 */
275 __STATIC_INLINE uint32_t nrf_uart_cts_pin_get(NRF_UART_Type * p_reg);
276
277
278 /**
279 * @brief Function for configuring flow control pins.
280 *
281 * @param p_reg Pointer to the peripheral registers structure.
282 * @param pselrts RTS pin number.
283 * @param pselcts CTS pin number.
284 */
285 __STATIC_INLINE void nrf_uart_hwfc_pins_set(NRF_UART_Type * p_reg,
286 uint32_t pselrts,
287 uint32_t pselcts);
288
289 /**
290 * @brief Function for disconnecting flow control pins.
291 *
292 * @param p_reg Pointer to the peripheral registers structure.
293 */
294 __STATIC_INLINE void nrf_uart_hwfc_pins_disconnect(NRF_UART_Type * p_reg);
295
296 /**
297 * @brief Function for reading RX data.
298 *
299 * @param p_reg Pointer to the peripheral registers structure.
300 * @return Received byte.
301 */
302 __STATIC_INLINE uint8_t nrf_uart_rxd_get(NRF_UART_Type * p_reg);
303
304 /**
305 * @brief Function for setting Tx data.
306 *
307 * @param p_reg Pointer to the peripheral registers structure.
308 * @param txd Byte.
309 */
310 __STATIC_INLINE void nrf_uart_txd_set(NRF_UART_Type * p_reg, uint8_t txd);
311
312 /**
313 * @brief Function for starting an UART task.
314 *
315 * @param p_reg Pointer to the peripheral registers structure.
316 * @param task Task.
317 */
318 __STATIC_INLINE void nrf_uart_task_trigger(NRF_UART_Type * p_reg, nrf_uart_task_t task);
319
320 /**
321 * @brief Function for returning the address of a specific task register.
322 *
323 * @param p_reg Pointer to the peripheral registers structure.
324 * @param task Task.
325 *
326 * @return Task address.
327 */
328 __STATIC_INLINE uint32_t nrf_uart_task_address_get(NRF_UART_Type * p_reg, nrf_uart_task_t task);
329
330 /**
331 * @brief Function for configuring UART.
332 *
333 * @param p_reg Pointer to the peripheral registers structure.
334 * @param hwfc Hardware flow control. Enabled if true.
335 * @param parity Parity. Included if true.
336 */
337 __STATIC_INLINE void nrf_uart_configure(NRF_UART_Type * p_reg,
338 nrf_uart_parity_t parity,
339 nrf_uart_hwfc_t hwfc);
340
341 /**
342 * @brief Function for setting UART baudrate.
343 *
344 * @param p_reg Pointer to the peripheral registers structure.
345 * @param baudrate Baudrate.
346 */
347 __STATIC_INLINE void nrf_uart_baudrate_set(NRF_UART_Type * p_reg, nrf_uart_baudrate_t baudrate);
348
349 #ifndef SUPPRESS_INLINE_IMPLEMENTATION
nrf_uart_event_clear(NRF_UART_Type * p_reg,nrf_uart_event_t event)350 __STATIC_INLINE void nrf_uart_event_clear(NRF_UART_Type * p_reg, nrf_uart_event_t event)
351 {
352 *((volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)event)) = 0x0UL;
353 #if __CORTEX_M == 0x04
354 volatile uint32_t dummy = *((volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)event));
355 (void)dummy;
356 #endif
357
358 }
359
nrf_uart_event_check(NRF_UART_Type * p_reg,nrf_uart_event_t event)360 __STATIC_INLINE bool nrf_uart_event_check(NRF_UART_Type * p_reg, nrf_uart_event_t event)
361 {
362 return (bool)*(volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)event);
363 }
364
nrf_uart_event_address_get(NRF_UART_Type * p_reg,nrf_uart_event_t event)365 __STATIC_INLINE uint32_t nrf_uart_event_address_get(NRF_UART_Type * p_reg,
366 nrf_uart_event_t event)
367 {
368 return (uint32_t)((uint8_t *)p_reg + (uint32_t)event);
369 }
370
nrf_uart_int_enable(NRF_UART_Type * p_reg,uint32_t int_mask)371 __STATIC_INLINE void nrf_uart_int_enable(NRF_UART_Type * p_reg, uint32_t int_mask)
372 {
373 p_reg->INTENSET = int_mask;
374 }
375
nrf_uart_int_enable_check(NRF_UART_Type * p_reg,uint32_t int_mask)376 __STATIC_INLINE bool nrf_uart_int_enable_check(NRF_UART_Type * p_reg, uint32_t int_mask)
377 {
378 return (bool)(p_reg->INTENSET & int_mask);
379 }
380
nrf_uart_int_disable(NRF_UART_Type * p_reg,uint32_t int_mask)381 __STATIC_INLINE void nrf_uart_int_disable(NRF_UART_Type * p_reg, uint32_t int_mask)
382 {
383 p_reg->INTENCLR = int_mask;
384 }
385
nrf_uart_errorsrc_get_and_clear(NRF_UART_Type * p_reg)386 __STATIC_INLINE uint32_t nrf_uart_errorsrc_get_and_clear(NRF_UART_Type * p_reg)
387 {
388 uint32_t errsrc_mask = p_reg->ERRORSRC;
389 p_reg->ERRORSRC = errsrc_mask;
390 return errsrc_mask;
391 }
392
nrf_uart_enable(NRF_UART_Type * p_reg)393 __STATIC_INLINE void nrf_uart_enable(NRF_UART_Type * p_reg)
394 {
395 p_reg->ENABLE = UART_ENABLE_ENABLE_Enabled;
396 }
397
nrf_uart_disable(NRF_UART_Type * p_reg)398 __STATIC_INLINE void nrf_uart_disable(NRF_UART_Type * p_reg)
399 {
400 p_reg->ENABLE = UART_ENABLE_ENABLE_Disabled;
401 }
402
nrf_uart_txrx_pins_set(NRF_UART_Type * p_reg,uint32_t pseltxd,uint32_t pselrxd)403 __STATIC_INLINE void nrf_uart_txrx_pins_set(NRF_UART_Type * p_reg, uint32_t pseltxd, uint32_t pselrxd)
404 {
405 #if defined(UART_PSEL_RXD_CONNECT_Pos)
406 p_reg->PSEL.RXD = pselrxd;
407 #else
408 p_reg->PSELRXD = pselrxd;
409 #endif
410 #if defined(UART_PSEL_TXD_CONNECT_Pos)
411 p_reg->PSEL.TXD = pseltxd;
412 #else
413 p_reg->PSELTXD = pseltxd;
414 #endif
415 }
416
nrf_uart_txrx_pins_disconnect(NRF_UART_Type * p_reg)417 __STATIC_INLINE void nrf_uart_txrx_pins_disconnect(NRF_UART_Type * p_reg)
418 {
419 nrf_uart_txrx_pins_set(p_reg, NRF_UART_PSEL_DISCONNECTED, NRF_UART_PSEL_DISCONNECTED);
420 }
421
nrf_uart_tx_pin_get(NRF_UART_Type * p_reg)422 __STATIC_INLINE uint32_t nrf_uart_tx_pin_get(NRF_UART_Type * p_reg)
423 {
424 #if defined(UART_PSEL_TXD_CONNECT_Pos)
425 return p_reg->PSEL.TXD;
426 #else
427 return p_reg->PSELTXD;
428 #endif
429 }
430
nrf_uart_rx_pin_get(NRF_UART_Type * p_reg)431 __STATIC_INLINE uint32_t nrf_uart_rx_pin_get(NRF_UART_Type * p_reg)
432 {
433 #if defined(UART_PSEL_RXD_CONNECT_Pos)
434 return p_reg->PSEL.RXD;
435 #else
436 return p_reg->PSELRXD;
437 #endif
438 }
439
nrf_uart_rts_pin_get(NRF_UART_Type * p_reg)440 __STATIC_INLINE uint32_t nrf_uart_rts_pin_get(NRF_UART_Type * p_reg)
441 {
442 #if defined(UART_PSEL_RTS_CONNECT_Pos)
443 return p_reg->PSEL.RTS;
444 #else
445 return p_reg->PSELRTS;
446 #endif
447 }
448
nrf_uart_cts_pin_get(NRF_UART_Type * p_reg)449 __STATIC_INLINE uint32_t nrf_uart_cts_pin_get(NRF_UART_Type * p_reg)
450 {
451 #if defined(UART_PSEL_RTS_CONNECT_Pos)
452 return p_reg->PSEL.CTS;
453 #else
454 return p_reg->PSELCTS;
455 #endif
456 }
457
nrf_uart_hwfc_pins_set(NRF_UART_Type * p_reg,uint32_t pselrts,uint32_t pselcts)458 __STATIC_INLINE void nrf_uart_hwfc_pins_set(NRF_UART_Type * p_reg, uint32_t pselrts, uint32_t pselcts)
459 {
460 #if defined(UART_PSEL_RTS_CONNECT_Pos)
461 p_reg->PSEL.RTS = pselrts;
462 #else
463 p_reg->PSELRTS = pselrts;
464 #endif
465
466 #if defined(UART_PSEL_RTS_CONNECT_Pos)
467 p_reg->PSEL.CTS = pselcts;
468 #else
469 p_reg->PSELCTS = pselcts;
470 #endif
471 }
472
nrf_uart_hwfc_pins_disconnect(NRF_UART_Type * p_reg)473 __STATIC_INLINE void nrf_uart_hwfc_pins_disconnect(NRF_UART_Type * p_reg)
474 {
475 nrf_uart_hwfc_pins_set(p_reg, NRF_UART_PSEL_DISCONNECTED, NRF_UART_PSEL_DISCONNECTED);
476 }
477
nrf_uart_rxd_get(NRF_UART_Type * p_reg)478 __STATIC_INLINE uint8_t nrf_uart_rxd_get(NRF_UART_Type * p_reg)
479 {
480 return p_reg->RXD;
481 }
482
nrf_uart_txd_set(NRF_UART_Type * p_reg,uint8_t txd)483 __STATIC_INLINE void nrf_uart_txd_set(NRF_UART_Type * p_reg, uint8_t txd)
484 {
485 p_reg->TXD = txd;
486 }
487
nrf_uart_task_trigger(NRF_UART_Type * p_reg,nrf_uart_task_t task)488 __STATIC_INLINE void nrf_uart_task_trigger(NRF_UART_Type * p_reg, nrf_uart_task_t task)
489 {
490 *((volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)task)) = 0x1UL;
491 }
492
nrf_uart_task_address_get(NRF_UART_Type * p_reg,nrf_uart_task_t task)493 __STATIC_INLINE uint32_t nrf_uart_task_address_get(NRF_UART_Type * p_reg, nrf_uart_task_t task)
494 {
495 return (uint32_t)p_reg + (uint32_t)task;
496 }
497
nrf_uart_configure(NRF_UART_Type * p_reg,nrf_uart_parity_t parity,nrf_uart_hwfc_t hwfc)498 __STATIC_INLINE void nrf_uart_configure(NRF_UART_Type * p_reg,
499 nrf_uart_parity_t parity,
500 nrf_uart_hwfc_t hwfc)
501 {
502 p_reg->CONFIG = (uint32_t)parity | (uint32_t)hwfc;
503 }
504
nrf_uart_baudrate_set(NRF_UART_Type * p_reg,nrf_uart_baudrate_t baudrate)505 __STATIC_INLINE void nrf_uart_baudrate_set(NRF_UART_Type * p_reg, nrf_uart_baudrate_t baudrate)
506 {
507 p_reg->BAUDRATE = baudrate;
508 }
509 #endif //SUPPRESS_INLINE_IMPLEMENTATION
510
511 /** @} */
512
513 #ifdef __cplusplus
514 }
515 #endif
516
517 #endif //NRF_UART_H__
518