1 /*
2 * Copyright (c) 2023 - 2024, Nordic Semiconductor ASA
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the copyright holder nor the names of its
18 * contributors may be used to endorse or promote products derived from this
19 * software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34 #ifndef NRF_PPIB_H__
35 #define NRF_PPIB_H__
36
37 #include <nrfx.h>
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 /**
44 * @defgroup nrf_ppib_hal PPIB HAL
45 * @{
46 * @ingroup nrf_ppib
47 * @brief Hardware access layer for managing the PPI Bridge (PPIB) peripheral.
48 */
49
50 /** @brief Number of send tasks. */
51 #define NRF_PPIB_TASKS_SEND_COUNT PPIB_TASKS_SEND_MaxCount
52
53 /** @brief Number of receive events. */
54 #define NRF_PPIB_EVENTS_RECEIVE_COUNT PPIB_EVENTS_RECEIVE_MaxCount
55
56 /** @brief PPIB tasks. */
57 typedef enum
58 {
59 NRF_PPIB_TASK_SEND_0 = offsetof(NRF_PPIB_Type, TASKS_SEND[0]), /**< Send 0 task. */
60 NRF_PPIB_TASK_SEND_1 = offsetof(NRF_PPIB_Type, TASKS_SEND[1]), /**< Send 1 task. */
61 NRF_PPIB_TASK_SEND_2 = offsetof(NRF_PPIB_Type, TASKS_SEND[2]), /**< Send 2 task. */
62 NRF_PPIB_TASK_SEND_3 = offsetof(NRF_PPIB_Type, TASKS_SEND[3]), /**< Send 3 task. */
63 NRF_PPIB_TASK_SEND_4 = offsetof(NRF_PPIB_Type, TASKS_SEND[4]), /**< Send 4 task. */
64 NRF_PPIB_TASK_SEND_5 = offsetof(NRF_PPIB_Type, TASKS_SEND[5]), /**< Send 5 task. */
65 NRF_PPIB_TASK_SEND_6 = offsetof(NRF_PPIB_Type, TASKS_SEND[6]), /**< Send 6 task. */
66 NRF_PPIB_TASK_SEND_7 = offsetof(NRF_PPIB_Type, TASKS_SEND[7]), /**< Send 7 task. */
67 NRF_PPIB_TASK_SEND_8 = offsetof(NRF_PPIB_Type, TASKS_SEND[8]), /**< Send 8 task. */
68 NRF_PPIB_TASK_SEND_9 = offsetof(NRF_PPIB_Type, TASKS_SEND[9]), /**< Send 9 task. */
69 NRF_PPIB_TASK_SEND_10 = offsetof(NRF_PPIB_Type, TASKS_SEND[10]), /**< Send 10 task. */
70 NRF_PPIB_TASK_SEND_11 = offsetof(NRF_PPIB_Type, TASKS_SEND[11]), /**< Send 11 task. */
71 NRF_PPIB_TASK_SEND_12 = offsetof(NRF_PPIB_Type, TASKS_SEND[12]), /**< Send 12 task. */
72 NRF_PPIB_TASK_SEND_13 = offsetof(NRF_PPIB_Type, TASKS_SEND[13]), /**< Send 13 task. */
73 NRF_PPIB_TASK_SEND_14 = offsetof(NRF_PPIB_Type, TASKS_SEND[14]), /**< Send 14 task. */
74 NRF_PPIB_TASK_SEND_15 = offsetof(NRF_PPIB_Type, TASKS_SEND[15]), /**< Send 15 task. */
75 NRF_PPIB_TASK_SEND_16 = offsetof(NRF_PPIB_Type, TASKS_SEND[16]), /**< Send 16 task. */
76 NRF_PPIB_TASK_SEND_17 = offsetof(NRF_PPIB_Type, TASKS_SEND[17]), /**< Send 17 task. */
77 NRF_PPIB_TASK_SEND_18 = offsetof(NRF_PPIB_Type, TASKS_SEND[18]), /**< Send 18 task. */
78 NRF_PPIB_TASK_SEND_19 = offsetof(NRF_PPIB_Type, TASKS_SEND[19]), /**< Send 19 task. */
79 NRF_PPIB_TASK_SEND_20 = offsetof(NRF_PPIB_Type, TASKS_SEND[20]), /**< Send 20 task. */
80 NRF_PPIB_TASK_SEND_21 = offsetof(NRF_PPIB_Type, TASKS_SEND[21]), /**< Send 21 task. */
81 NRF_PPIB_TASK_SEND_22 = offsetof(NRF_PPIB_Type, TASKS_SEND[22]), /**< Send 22 task. */
82 NRF_PPIB_TASK_SEND_23 = offsetof(NRF_PPIB_Type, TASKS_SEND[23]), /**< Send 23 task. */
83 NRF_PPIB_TASK_SEND_24 = offsetof(NRF_PPIB_Type, TASKS_SEND[24]), /**< Send 24 task. */
84 NRF_PPIB_TASK_SEND_25 = offsetof(NRF_PPIB_Type, TASKS_SEND[25]), /**< Send 25 task. */
85 NRF_PPIB_TASK_SEND_26 = offsetof(NRF_PPIB_Type, TASKS_SEND[26]), /**< Send 26 task. */
86 NRF_PPIB_TASK_SEND_27 = offsetof(NRF_PPIB_Type, TASKS_SEND[27]), /**< Send 27 task. */
87 NRF_PPIB_TASK_SEND_28 = offsetof(NRF_PPIB_Type, TASKS_SEND[28]), /**< Send 28 task. */
88 NRF_PPIB_TASK_SEND_29 = offsetof(NRF_PPIB_Type, TASKS_SEND[29]), /**< Send 29 task. */
89 NRF_PPIB_TASK_SEND_30 = offsetof(NRF_PPIB_Type, TASKS_SEND[30]), /**< Send 30 task. */
90 NRF_PPIB_TASK_SEND_31 = offsetof(NRF_PPIB_Type, TASKS_SEND[31]), /**< Send 31 task. */
91 } nrf_ppib_task_t;
92
93 /** @brief PPIB events. */
94 typedef enum
95 {
96 NRF_PPIB_EVENT_RECEIVE_0 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[0]), /**< Receive 0 event. */
97 NRF_PPIB_EVENT_RECEIVE_1 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[1]), /**< Receive 1 event. */
98 NRF_PPIB_EVENT_RECEIVE_2 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[2]), /**< Receive 2 event. */
99 NRF_PPIB_EVENT_RECEIVE_3 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[3]), /**< Receive 3 event. */
100 NRF_PPIB_EVENT_RECEIVE_4 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[4]), /**< Receive 4 event. */
101 NRF_PPIB_EVENT_RECEIVE_5 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[5]), /**< Receive 5 event. */
102 NRF_PPIB_EVENT_RECEIVE_6 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[6]), /**< Receive 6 event. */
103 NRF_PPIB_EVENT_RECEIVE_7 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[7]), /**< Receive 7 event. */
104 NRF_PPIB_EVENT_RECEIVE_8 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[8]), /**< Receive 8 event. */
105 NRF_PPIB_EVENT_RECEIVE_9 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[9]), /**< Receive 9 event. */
106 NRF_PPIB_EVENT_RECEIVE_10 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[10]), /**< Receive 10 event. */
107 NRF_PPIB_EVENT_RECEIVE_11 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[11]), /**< Receive 11 event. */
108 NRF_PPIB_EVENT_RECEIVE_12 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[12]), /**< Receive 12 event. */
109 NRF_PPIB_EVENT_RECEIVE_13 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[13]), /**< Receive 13 event. */
110 NRF_PPIB_EVENT_RECEIVE_14 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[14]), /**< Receive 14 event. */
111 NRF_PPIB_EVENT_RECEIVE_15 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[15]), /**< Receive 15 event. */
112 NRF_PPIB_EVENT_RECEIVE_16 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[16]), /**< Receive 16 event. */
113 NRF_PPIB_EVENT_RECEIVE_17 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[17]), /**< Receive 17 event. */
114 NRF_PPIB_EVENT_RECEIVE_18 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[18]), /**< Receive 18 event. */
115 NRF_PPIB_EVENT_RECEIVE_19 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[19]), /**< Receive 19 event. */
116 NRF_PPIB_EVENT_RECEIVE_20 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[20]), /**< Receive 20 event. */
117 NRF_PPIB_EVENT_RECEIVE_21 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[21]), /**< Receive 21 event. */
118 NRF_PPIB_EVENT_RECEIVE_22 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[22]), /**< Receive 22 event. */
119 NRF_PPIB_EVENT_RECEIVE_23 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[23]), /**< Receive 23 event. */
120 NRF_PPIB_EVENT_RECEIVE_24 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[24]), /**< Receive 24 event. */
121 NRF_PPIB_EVENT_RECEIVE_25 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[25]), /**< Receive 25 event. */
122 NRF_PPIB_EVENT_RECEIVE_26 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[26]), /**< Receive 26 event. */
123 NRF_PPIB_EVENT_RECEIVE_27 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[27]), /**< Receive 27 event. */
124 NRF_PPIB_EVENT_RECEIVE_28 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[28]), /**< Receive 28 event. */
125 NRF_PPIB_EVENT_RECEIVE_29 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[29]), /**< Receive 29 event. */
126 NRF_PPIB_EVENT_RECEIVE_30 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[30]), /**< Receive 30 event. */
127 NRF_PPIB_EVENT_RECEIVE_31 = offsetof(NRF_PPIB_Type, EVENTS_RECEIVE[31]), /**< Receive 31 event. */
128 } nrf_ppib_event_t;
129
130 #if defined(__GNUC__)
131 #pragma GCC diagnostic push
132 #pragma GCC diagnostic ignored "-Wpedantic"
133 #endif
134
135 /** @brief Send task mask. */
136 typedef enum
137 {
138 NRF_PPIB_SEND_0_MASK = PPIB_OVERFLOW_SEND_SEND0_Msk, /* Send task 0 mask. */
139 NRF_PPIB_SEND_1_MASK = PPIB_OVERFLOW_SEND_SEND1_Msk, /* Send task 1 mask. */
140 NRF_PPIB_SEND_2_MASK = PPIB_OVERFLOW_SEND_SEND2_Msk, /* Send task 2 mask. */
141 NRF_PPIB_SEND_3_MASK = PPIB_OVERFLOW_SEND_SEND3_Msk, /* Send task 3 mask. */
142 NRF_PPIB_SEND_4_MASK = PPIB_OVERFLOW_SEND_SEND4_Msk, /* Send task 4 mask. */
143 NRF_PPIB_SEND_5_MASK = PPIB_OVERFLOW_SEND_SEND5_Msk, /* Send task 5 mask. */
144 NRF_PPIB_SEND_6_MASK = PPIB_OVERFLOW_SEND_SEND6_Msk, /* Send task 6 mask. */
145 NRF_PPIB_SEND_7_MASK = PPIB_OVERFLOW_SEND_SEND7_Msk, /* Send task 7 mask. */
146 NRF_PPIB_SEND_8_MASK = PPIB_OVERFLOW_SEND_SEND8_Msk, /* Send task 8 mask. */
147 NRF_PPIB_SEND_9_MASK = PPIB_OVERFLOW_SEND_SEND9_Msk, /* Send task 9 mask. */
148 NRF_PPIB_SEND_10_MASK = PPIB_OVERFLOW_SEND_SEND10_Msk, /* Send task 10 mask. */
149 NRF_PPIB_SEND_11_MASK = PPIB_OVERFLOW_SEND_SEND11_Msk, /* Send task 11 mask. */
150 NRF_PPIB_SEND_12_MASK = PPIB_OVERFLOW_SEND_SEND12_Msk, /* Send task 12 mask. */
151 NRF_PPIB_SEND_13_MASK = PPIB_OVERFLOW_SEND_SEND13_Msk, /* Send task 13 mask. */
152 NRF_PPIB_SEND_14_MASK = PPIB_OVERFLOW_SEND_SEND14_Msk, /* Send task 14 mask. */
153 NRF_PPIB_SEND_15_MASK = PPIB_OVERFLOW_SEND_SEND15_Msk, /* Send task 15 mask. */
154 NRF_PPIB_SEND_16_MASK = PPIB_OVERFLOW_SEND_SEND16_Msk, /* Send task 16 mask. */
155 NRF_PPIB_SEND_17_MASK = PPIB_OVERFLOW_SEND_SEND17_Msk, /* Send task 17 mask. */
156 NRF_PPIB_SEND_18_MASK = PPIB_OVERFLOW_SEND_SEND18_Msk, /* Send task 18 mask. */
157 NRF_PPIB_SEND_19_MASK = PPIB_OVERFLOW_SEND_SEND19_Msk, /* Send task 19 mask. */
158 NRF_PPIB_SEND_20_MASK = PPIB_OVERFLOW_SEND_SEND20_Msk, /* Send task 20 mask. */
159 NRF_PPIB_SEND_21_MASK = PPIB_OVERFLOW_SEND_SEND21_Msk, /* Send task 21 mask. */
160 NRF_PPIB_SEND_22_MASK = PPIB_OVERFLOW_SEND_SEND22_Msk, /* Send task 22 mask. */
161 NRF_PPIB_SEND_23_MASK = PPIB_OVERFLOW_SEND_SEND23_Msk, /* Send task 23 mask. */
162 NRF_PPIB_SEND_24_MASK = PPIB_OVERFLOW_SEND_SEND24_Msk, /* Send task 24 mask. */
163 NRF_PPIB_SEND_25_MASK = PPIB_OVERFLOW_SEND_SEND25_Msk, /* Send task 25 mask. */
164 NRF_PPIB_SEND_26_MASK = PPIB_OVERFLOW_SEND_SEND26_Msk, /* Send task 26 mask. */
165 NRF_PPIB_SEND_27_MASK = PPIB_OVERFLOW_SEND_SEND27_Msk, /* Send task 27 mask. */
166 NRF_PPIB_SEND_28_MASK = PPIB_OVERFLOW_SEND_SEND28_Msk, /* Send task 28 mask. */
167 NRF_PPIB_SEND_29_MASK = PPIB_OVERFLOW_SEND_SEND29_Msk, /* Send task 29 mask. */
168 NRF_PPIB_SEND_30_MASK = PPIB_OVERFLOW_SEND_SEND30_Msk, /* Send task 30 mask. */
169 NRF_PPIB_SEND_31_MASK = PPIB_OVERFLOW_SEND_SEND31_Msk, /* Send task 31 mask. */
170 } nrf_ppib_send_mask_t;
171
172 #if defined(__GNUC__)
173 #pragma GCC diagnostic pop
174 #endif
175
176 /**
177 * @brief Function for returning the specified PPIB SEND task.
178 *
179 * @param[in] index Task index.
180 *
181 * @return The specified PPIB SEND task.
182 */
183 NRF_STATIC_INLINE nrf_ppib_task_t nrf_ppib_send_task_get(uint8_t index);
184
185 /**
186 * @brief Function for returning the specified PPIB RECEIVE event.
187 *
188 * @param[in] index Event index.
189 *
190 * @return The specified PPIB RECEIVE event.
191 */
192 NRF_STATIC_INLINE nrf_ppib_event_t nrf_ppib_receive_event_get(uint8_t index);
193
194 /**
195 * @brief Function for setting the subscribe configuration for a given task.
196 *
197 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
198 * @param[in] task Task for which to set the configuration.
199 * @param[in] channel DPPI channel through which to subscribe events.
200 */
201 NRF_STATIC_INLINE void nrf_ppib_subscribe_set(NRF_PPIB_Type * p_reg,
202 nrf_ppib_task_t task,
203 uint8_t channel);
204
205 /**
206 * @brief Function for clearing the subscribe configuration for a given task.
207 *
208 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
209 * @param[in] task Task for which to clear the configuration.
210 */
211 NRF_STATIC_INLINE void nrf_ppib_subscribe_clear(NRF_PPIB_Type * p_reg, nrf_ppib_task_t task);
212
213 /**
214 * @brief Function for setting the publish configuration for a given event.
215 *
216 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
217 * @param[in] event Event for which to set the configuration.
218 * @param[in] channel DPPI channel through which to publish the event.
219 */
220 NRF_STATIC_INLINE void nrf_ppib_publish_set(NRF_PPIB_Type * p_reg,
221 nrf_ppib_event_t event,
222 uint8_t channel);
223
224 /**
225 * @brief Function for clearing the publish configuration for a given event.
226 *
227 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
228 * @param[in] event Event for which to clear the configuration.
229 */
230 NRF_STATIC_INLINE void nrf_ppib_publish_clear(NRF_PPIB_Type * p_reg, nrf_ppib_event_t event);
231
232 /**
233 * @brief Function for getting the task oveflow register for SEND tasks.
234 * Task overflow mask is cleared after reading.
235 *
236 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
237 *
238 * @return Mask of SEND tasks overflow, constructed with @ref nrf_ppib_send_mask_t.
239 */
240 NRF_STATIC_INLINE uint32_t nrf_ppib_overflow_get_and_clear(NRF_PPIB_Type * p_reg);
241
242 /**
243 * @brief Function for retrieving the state of overflow for a given SEND task.
244 *
245 * @param[in] p_reg Pointer to the structure of registers of the peripheral.
246 * @param[in] index SEND task index to be checked for overflow.
247 *
248 * @retval true The overflow has happened.
249 * @retval false The overflow has not happened.
250 */
251 NRF_STATIC_INLINE bool nrf_ppib_overflow_check(NRF_PPIB_Type const * p_reg, uint8_t index);
252
253 #ifndef NRF_DECLARE_ONLY
254
nrf_ppib_send_task_get(uint8_t index)255 NRF_STATIC_INLINE nrf_ppib_task_t nrf_ppib_send_task_get(uint8_t index)
256 {
257 NRFX_ASSERT(index < NRF_PPIB_TASKS_SEND_COUNT);
258 return (nrf_ppib_task_t)NRFX_OFFSETOF(NRF_PPIB_Type, TASKS_SEND[index]);
259 }
260
nrf_ppib_receive_event_get(uint8_t index)261 NRF_STATIC_INLINE nrf_ppib_event_t nrf_ppib_receive_event_get(uint8_t index)
262 {
263 NRFX_ASSERT(index < NRF_PPIB_EVENTS_RECEIVE_COUNT);
264 return (nrf_ppib_event_t)NRFX_OFFSETOF(NRF_PPIB_Type, EVENTS_RECEIVE[index]);
265 }
266
nrf_ppib_subscribe_set(NRF_PPIB_Type * p_reg,nrf_ppib_task_t task,uint8_t channel)267 NRF_STATIC_INLINE void nrf_ppib_subscribe_set(NRF_PPIB_Type * p_reg,
268 nrf_ppib_task_t task,
269 uint8_t channel)
270 {
271 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) task + 0x80UL)) =
272 ((uint32_t)channel | NRF_SUBSCRIBE_PUBLISH_ENABLE);
273 }
274
nrf_ppib_subscribe_clear(NRF_PPIB_Type * p_reg,nrf_ppib_task_t task)275 NRF_STATIC_INLINE void nrf_ppib_subscribe_clear(NRF_PPIB_Type * p_reg,
276 nrf_ppib_task_t task)
277 {
278 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) task + 0x80UL)) = 0;
279 }
280
nrf_ppib_publish_set(NRF_PPIB_Type * p_reg,nrf_ppib_event_t event,uint8_t channel)281 NRF_STATIC_INLINE void nrf_ppib_publish_set(NRF_PPIB_Type * p_reg,
282 nrf_ppib_event_t event,
283 uint8_t channel)
284 {
285 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) event + 0x80UL)) =
286 ((uint32_t)channel | NRF_SUBSCRIBE_PUBLISH_ENABLE);
287 }
288
nrf_ppib_publish_clear(NRF_PPIB_Type * p_reg,nrf_ppib_event_t event)289 NRF_STATIC_INLINE void nrf_ppib_publish_clear(NRF_PPIB_Type * p_reg,
290 nrf_ppib_event_t event)
291 {
292 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) event + 0x80UL)) = 0;
293 }
294
nrf_ppib_overflow_get_and_clear(NRF_PPIB_Type * p_reg)295 NRF_STATIC_INLINE uint32_t nrf_ppib_overflow_get_and_clear(NRF_PPIB_Type * p_reg)
296 {
297 uint32_t overflow_mask = p_reg->OVERFLOW.SEND;
298 p_reg->OVERFLOW.SEND = ~overflow_mask;
299 return overflow_mask;
300 }
301
nrf_ppib_overflow_check(NRF_PPIB_Type const * p_reg,uint8_t index)302 NRF_STATIC_INLINE bool nrf_ppib_overflow_check(NRF_PPIB_Type const * p_reg, uint8_t index)
303 {
304 NRFX_ASSERT(index < NRF_PPIB_TASKS_SEND_COUNT);
305 return (bool)((p_reg->OVERFLOW.SEND >> index) & 0x1UL);
306 }
307
308 #endif // NRF_DECLARE_ONLY
309
310 /** @} */
311
312 #ifdef __cplusplus
313 }
314 #endif
315
316 #endif
317