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