1 /*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 * Copyright (c) 2019 Ioannis Glaropoulos
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8 /* Use the NRF_RTC instance for coarse radio event scheduling */
9 #define NRF_RTC NRF_RTC0
10
11 /* Override EVENT_TIMER_ID from 4 to 0, as nRF5340 does not have 4 timer
12 * instances.
13 */
14 #if defined(CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER)
15 #undef EVENT_TIMER_ID
16 #define EVENT_TIMER_ID 0
17
18 #undef EVENT_TIMER
19 #define EVENT_TIMER _CONCAT(NRF_TIMER, EVENT_TIMER_ID)
20
21 #undef SW_SWITCH_TIMER
22 #define SW_SWITCH_TIMER EVENT_TIMER
23 #endif /* CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */
24
25 /* HAL abstraction of event timer prescaler value */
26 #define HAL_EVENT_TIMER_PRESCALER_VALUE 4U
27
28 /* NRF Radio HW timing constants
29 * - provided in US and NS (for higher granularity)
30 * - based on the timings configured in the HW models, which are based
31 * on the product specification
32 * - Note that this timings are approx. the same as in the real HW,
33 * but tend to be rounded to the nearest microsecond
34 */
35
36 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
37 * in microseconds for LE 1M PHY.
38 */
39 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_FAST_NS 41000
40 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_FAST_US \
41 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_FAST_NS)
42
43 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
44 * in microseconds for LE 1M PHY.
45 */
46 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NS 141000
47 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_US \
48 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NS)
49
50 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
51 * and no HW TIFS auto-switch) in microseconds for LE 1M PHY.
52 */
53 /* 129.5 + 0.8 */
54 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS 130000
55 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US \
56 HAL_RADIO_NS2US_ROUND( \
57 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS)
58
59 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
60 * in microseconds for LE 2M PHY.
61 */
62 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_FAST_NS 40000
63 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_FAST_US \
64 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_FAST_NS)
65
66 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
67 * in microseconds for LE 2M PHY.
68 */
69 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NS 140000
70 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_US \
71 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NS)
72
73 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
74 * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
75 */
76 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS 129000
77 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US \
78 HAL_RADIO_NS2US_ROUND( \
79 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS)
80
81 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
82 * in microseconds for LE CODED PHY [S2].
83 */
84 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_FAST_NS 42000
85 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_FAST_US \
86 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_FAST_NS)
87
88 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
89 * in microseconds for LE 2M PHY [S2].
90 */
91 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NS 132000
92 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_US \
93 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NS)
94
95 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
96 * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S2].
97 */
98 /* 129.5 + 2.2 */
99 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS 132000
100 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US \
101 HAL_RADIO_NS2US_ROUND( \
102 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS)
103
104 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
105 * in microseconds for LE CODED PHY [S8].
106 */
107 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_FAST_NS 42000
108 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_FAST_US \
109 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_FAST_NS)
110 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
111 * in microseconds for LE 2M PHY [S8].
112 */
113 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NS 122000
114 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_US \
115 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NS)
116
117 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
118 * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S8].
119 */
120 /* 129.5 + 2.2 */
121 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS 132000
122 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US \
123 HAL_RADIO_NS2US_ROUND( \
124 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS)
125
126 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
127 * in microseconds for LE 1M PHY.
128 */
129 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_FAST_NS 40000
130 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_FAST_US \
131 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_FAST_NS)
132
133 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
134 * in microseconds for LE 1M PHY.
135 */
136 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NS 140000
137 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_US \
138 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NS)
139
140 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
141 * no HW TIFS auto-switch) in microseconds for LE 1M PHY.
142 */
143 /* 129.5 + 0.2 */
144 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS 129000
145 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US \
146 HAL_RADIO_NS2US_CEIL( \
147 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS)
148
149 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
150 * in microseconds for LE 2M PHY.
151 */
152 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_FAST_NS 40000
153 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_FAST_US \
154 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_FAST_NS)
155
156 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
157 * in microseconds for LE 2M PHY.
158 */
159 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NS 140000
160 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_US \
161 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NS)
162
163 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
164 * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
165 */
166 /* 129.5 + 0.2 */
167 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS 129000
168 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US \
169 HAL_RADIO_NS2US_CEIL( \
170 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS)
171
172 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
173 * in microseconds for LE Coded PHY [S2].
174 */
175 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_FAST_NS 40000
176 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_FAST_US \
177 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_FAST_NS)
178
179 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
180 * in microseconds for LE Coded PHY [S2].
181 */
182 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NS 120000
183 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_US \
184 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NS)
185
186 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode
187 * and no HW TIFS auto-switch) in microseconds for LE Coded PHY [S2].
188 */
189 /* 129.5 + 0.2 */
190 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS 130000
191 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US \
192 HAL_RADIO_NS2US_CEIL( \
193 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS)
194
195 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
196 * in microseconds for LE Coded PHY [S8].
197 */
198 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_FAST_NS 40000
199 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_FAST_US \
200 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_FAST_NS)
201
202 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
203 * in microseconds for LE Coded PHY [S8].
204 */
205 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NS 120000
206 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_US \
207 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NS)
208
209 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
210 * no HW TIFS auto-switch) in microseconds for LE Coded PHY [S8].
211 */
212 /* 129.5 + 0.2 */
213 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS 130000
214 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US \
215 HAL_RADIO_NS2US_CEIL( \
216 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS)
217
218 #define HAL_RADIO_NRF5340_TX_CHAIN_DELAY_NS 1000
219 #define HAL_RADIO_NRF5340_TX_CHAIN_DELAY_US \
220 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF5340_TX_CHAIN_DELAY_NS)
221
222 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_1M_US 9
223 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_1M_NS 9000
224 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_2M_US 5
225 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_2M_NS 5000
226 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S2_US 30
227 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S2_NS 30000
228 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S8_US 30
229 #define HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S8_NS 30000
230
231 #if defined(CONFIG_BT_CTLR_RADIO_ENABLE_FAST)
232 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_US \
233 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_FAST_US
234 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_NS \
235 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_FAST_NS
236
237 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_US \
238 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_FAST_US
239 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_NS \
240 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_FAST_NS
241
242 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_US \
243 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_FAST_US
244 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_NS \
245 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_FAST_NS
246
247 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_US \
248 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_FAST_US
249 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_NS \
250 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_FAST_NS
251
252 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_US \
253 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_FAST_US
254 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_NS \
255 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_FAST_NS
256
257 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_US \
258 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_FAST_US
259 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_NS \
260 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_FAST_NS
261
262 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_US \
263 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_FAST_US
264 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_NS \
265 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_FAST_NS
266
267 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_US \
268 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_FAST_US
269 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_NS \
270 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_FAST_NS
271
272 #else /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
273 #if defined(CONFIG_BT_CTLR_TIFS_HW)
274 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_US \
275 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_US
276 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_NS \
277 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NS
278
279 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_US \
280 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_US
281 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_NS \
282 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NS
283
284 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_US \
285 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_US
286 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_NS \
287 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NS
288
289 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_US \
290 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_US
291 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_NS \
292 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NS
293
294 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_US \
295 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_US
296 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_NS \
297 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NS
298
299 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_US \
300 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_US
301 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_NS \
302 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NS
303
304 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_US \
305 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_US
306 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_NS \
307 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NS
308
309 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_US \
310 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_US
311 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_NS \
312 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NS
313
314 #else /* !CONFIG_BT_CTLR_TIFS_HW */
315 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_US \
316 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US
317 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_NS \
318 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS
319
320 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_US \
321 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US
322 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_NS \
323 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS
324
325 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_US \
326 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US
327 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_NS \
328 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS
329
330 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_US \
331 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US
332 #define HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_NS \
333 HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS
334
335 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_US \
336 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US
337 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_NS \
338 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS
339
340 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_US \
341 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US
342 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_NS \
343 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS
344
345 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_US \
346 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US
347 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_NS \
348 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS
349
350 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_US \
351 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US
352 #define HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_NS \
353 HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS
354
355 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
356 #endif /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
357
358 /* nRF5340 supports +3dBm Tx Power using high voltage request, define +3dBm
359 * value for Controller use.
360 */
361 #ifndef RADIO_TXPOWER_TXPOWER_Pos3dBm
362 #define RADIO_TXPOWER_TXPOWER_Pos3dBm (0x03UL)
363 #endif
364
365 /* HAL abstraction of Radio bitfields */
366 #define HAL_NRF_RADIO_EVENT_END NRF_RADIO_EVENT_END
367 #define HAL_RADIO_EVENTS_END EVENTS_END
368 #define HAL_RADIO_PUBLISH_END PUBLISH_END
369 #define HAL_NRF_RADIO_EVENT_PHYEND NRF_RADIO_EVENT_PHYEND
370 #define HAL_RADIO_EVENTS_PHYEND EVENTS_PHYEND
371 #define HAL_RADIO_PUBLISH_PHYEND PUBLISH_PHYEND
372 #define HAL_RADIO_INTENSET_DISABLED_Msk RADIO_INTENSET_DISABLED_Msk
373 #define HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk RADIO_SHORTS_END_DISABLE_Msk
374 #define HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk RADIO_SHORTS_PHYEND_DISABLE_Msk
375 #define HAL_RADIO_CLEARPATTERN_CLEARPATTERN_Clear RADIO_CLEARPATTERN_CLEARPATTERN_Clear
376
377 /* HAL abstraction of Radio IRQ number */
378 #define HAL_RADIO_IRQn RADIO_IRQn
379
380 /* SoC specific NRF_RADIO power-on reset value. Refer to Product Specification,
381 * RADIO Registers section for the documented reset values.
382 *
383 * NOTE: Only implementation used values defined here.
384 * In the future if MDK or nRFx header include these, use them instead.
385 */
386 #define HAL_RADIO_RESET_VALUE_DFEMODE 0x00000000UL
387 #define HAL_RADIO_RESET_VALUE_CTEINLINECONF 0x00002800UL
388
389 static inline void hal_radio_tx_power_high_voltage_clear(void);
390
hal_radio_reset(void)391 static inline void hal_radio_reset(void)
392 {
393 }
394
hal_radio_stop(void)395 static inline void hal_radio_stop(void)
396 {
397 /* If +3dBm Tx power was used, then turn off high voltage when radio not
398 * used.
399 */
400 hal_radio_tx_power_high_voltage_clear();
401 }
402
hal_radio_ram_prio_setup(void)403 static inline void hal_radio_ram_prio_setup(void)
404 {
405 }
406
hal_radio_phy_mode_get(uint8_t phy,uint8_t flags)407 static inline uint32_t hal_radio_phy_mode_get(uint8_t phy, uint8_t flags)
408 {
409 uint32_t mode;
410
411 switch (phy) {
412 case BIT(0):
413 default:
414 mode = RADIO_MODE_MODE_Ble_1Mbit;
415 break;
416
417 case BIT(1):
418 mode = RADIO_MODE_MODE_Ble_2Mbit;
419 break;
420
421 #if defined(CONFIG_BT_CTLR_PHY_CODED)
422 case BIT(2):
423 if (flags & 0x01) {
424 mode = RADIO_MODE_MODE_Ble_LR125Kbit;
425 } else {
426 mode = RADIO_MODE_MODE_Ble_LR500Kbit;
427 }
428 break;
429 #endif /* CONFIG_BT_CTLR_PHY_CODED */
430 }
431
432 return mode;
433 }
434
hal_radio_tx_power_max_get(void)435 static inline uint32_t hal_radio_tx_power_max_get(void)
436 {
437 return RADIO_TXPOWER_TXPOWER_0dBm;
438 }
439
hal_radio_tx_power_min_get(void)440 static inline uint32_t hal_radio_tx_power_min_get(void)
441 {
442 return RADIO_TXPOWER_TXPOWER_Neg40dBm;
443 }
444
hal_radio_tx_power_floor(int8_t tx_power_lvl)445 static inline uint32_t hal_radio_tx_power_floor(int8_t tx_power_lvl)
446 {
447 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_0dBm) {
448 return RADIO_TXPOWER_TXPOWER_0dBm;
449 }
450
451 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg1dBm) {
452 return RADIO_TXPOWER_TXPOWER_Neg1dBm;
453 }
454
455 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg2dBm) {
456 return RADIO_TXPOWER_TXPOWER_Neg2dBm;
457 }
458
459 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg3dBm) {
460 return RADIO_TXPOWER_TXPOWER_Neg3dBm;
461 }
462
463 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg4dBm) {
464 return RADIO_TXPOWER_TXPOWER_Neg4dBm;
465 }
466
467 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg5dBm) {
468 return RADIO_TXPOWER_TXPOWER_Neg5dBm;
469 }
470
471 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg6dBm) {
472 return RADIO_TXPOWER_TXPOWER_Neg6dBm;
473 }
474
475 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg7dBm) {
476 return RADIO_TXPOWER_TXPOWER_Neg7dBm;
477 }
478
479 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg8dBm) {
480 return RADIO_TXPOWER_TXPOWER_Neg8dBm;
481 }
482
483 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg12dBm) {
484 return RADIO_TXPOWER_TXPOWER_Neg12dBm;
485 }
486
487 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg16dBm) {
488 return RADIO_TXPOWER_TXPOWER_Neg16dBm;
489 }
490
491 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg20dBm) {
492 return RADIO_TXPOWER_TXPOWER_Neg20dBm;
493 }
494
495 /* Note: The -30 dBm power level is deprecated so ignore it! */
496 return RADIO_TXPOWER_TXPOWER_Neg40dBm;
497 }
498
hal_radio_tx_power_high_voltage_set(int8_t tx_power_lvl)499 static inline void hal_radio_tx_power_high_voltage_set(int8_t tx_power_lvl)
500 {
501 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos3dBm) {
502 nrf_vreqctrl_radio_high_voltage_set(NRF_VREQCTRL, true);
503 }
504 }
505
hal_radio_tx_power_high_voltage_clear(void)506 static inline void hal_radio_tx_power_high_voltage_clear(void)
507 {
508 nrf_vreqctrl_radio_high_voltage_set(NRF_VREQCTRL, false);
509 }
510
hal_radio_tx_ready_delay_us_get(uint8_t phy,uint8_t flags)511 static inline uint32_t hal_radio_tx_ready_delay_us_get(uint8_t phy, uint8_t flags)
512 {
513 ARG_UNUSED(flags);
514
515 switch (phy) {
516 default:
517 case BIT(0):
518 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_US;
519 case BIT(1):
520 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_US;
521
522 #if defined(CONFIG_BT_CTLR_PHY_CODED)
523 case BIT(2):
524 if (flags & 0x01) {
525 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_US;
526 } else {
527 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_US;
528 }
529 #endif /* CONFIG_BT_CTLR_PHY_CODED */
530 }
531 }
532
hal_radio_rx_ready_delay_us_get(uint8_t phy,uint8_t flags)533 static inline uint32_t hal_radio_rx_ready_delay_us_get(uint8_t phy, uint8_t flags)
534 {
535 ARG_UNUSED(flags);
536
537 switch (phy) {
538 default:
539 case BIT(0):
540 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_US;
541 case BIT(1):
542 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_US;
543
544 #if defined(CONFIG_BT_CTLR_PHY_CODED)
545 case BIT(2):
546 if (flags & 0x01) {
547 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_US;
548 } else {
549 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_US;
550 }
551 #endif /* CONFIG_BT_CTLR_PHY_CODED */
552 }
553 }
554
hal_radio_tx_chain_delay_us_get(uint8_t phy,uint8_t flags)555 static inline uint32_t hal_radio_tx_chain_delay_us_get(uint8_t phy, uint8_t flags)
556 {
557 ARG_UNUSED(phy);
558 ARG_UNUSED(flags);
559
560 return HAL_RADIO_NRF5340_TX_CHAIN_DELAY_US;
561 }
562
hal_radio_rx_chain_delay_us_get(uint8_t phy,uint8_t flags)563 static inline uint32_t hal_radio_rx_chain_delay_us_get(uint8_t phy, uint8_t flags)
564 {
565 ARG_UNUSED(flags);
566
567 switch (phy) {
568 default:
569 case BIT(0):
570 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_1M_US;
571 case BIT(1):
572 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_2M_US;
573
574 #if defined(CONFIG_BT_CTLR_PHY_CODED)
575 case BIT(2):
576 if (flags & 0x01) {
577 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S8_US;
578 } else {
579 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S2_US;
580 }
581 #endif /* CONFIG_BT_CTLR_PHY_CODED */
582 }
583 }
584
hal_radio_tx_ready_delay_ns_get(uint8_t phy,uint8_t flags)585 static inline uint32_t hal_radio_tx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
586 {
587 ARG_UNUSED(flags);
588
589 switch (phy) {
590 default:
591 case BIT(0):
592 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_1M_NS;
593 case BIT(1):
594 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_2M_NS;
595
596 #if defined(CONFIG_BT_CTLR_PHY_CODED)
597 case BIT(2):
598 if (flags & 0x01) {
599 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S8_NS;
600 } else {
601 return HAL_RADIO_NRF5340_TXEN_TXIDLE_TX_S2_NS;
602 }
603 #endif /* CONFIG_BT_CTLR_PHY_CODED */
604 }
605 }
606
hal_radio_rx_ready_delay_ns_get(uint8_t phy,uint8_t flags)607 static inline uint32_t hal_radio_rx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
608 {
609 ARG_UNUSED(flags);
610
611 switch (phy) {
612 default:
613 case BIT(0):
614 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_1M_NS;
615 case BIT(1):
616 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_2M_NS;
617
618 #if defined(CONFIG_BT_CTLR_PHY_CODED)
619 case BIT(2):
620 if (flags & 0x01) {
621 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S8_NS;
622 } else {
623 return HAL_RADIO_NRF5340_RXEN_RXIDLE_RX_S2_NS;
624 }
625 #endif /* CONFIG_BT_CTLR_PHY_CODED */
626 }
627 }
628
hal_radio_tx_chain_delay_ns_get(uint8_t phy,uint8_t flags)629 static inline uint32_t hal_radio_tx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
630 {
631 ARG_UNUSED(phy);
632 ARG_UNUSED(flags);
633
634 return HAL_RADIO_NRF5340_TX_CHAIN_DELAY_NS;
635 }
636
hal_radio_rx_chain_delay_ns_get(uint8_t phy,uint8_t flags)637 static inline uint32_t hal_radio_rx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
638 {
639 ARG_UNUSED(flags);
640
641 switch (phy) {
642 default:
643 case BIT(0):
644 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_1M_NS;
645 case BIT(1):
646 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_2M_NS;
647
648 #if defined(CONFIG_BT_CTLR_PHY_CODED)
649 case BIT(2):
650 if (flags & 0x01) {
651 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S8_NS;
652 } else {
653 return HAL_RADIO_NRF5340_RX_CHAIN_DELAY_S2_NS;
654 }
655 #endif /* CONFIG_BT_CTLR_PHY_CODED */
656 }
657 }
658