1 /*
2 * Copyright (c) 2019 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 /* Use the NRF_RTC instance for coarse radio event scheduling */
8 #define NRF_RTC NRF_RTC0
9
10 /* HAL abstraction of event timer prescaler value */
11 #define HAL_EVENT_TIMER_PRESCALER_VALUE 4U
12
13 /* NRF Radio HW timing constants
14 * - provided in US and NS (for higher granularity)
15 * - based on empirical measurements and sniffer logs
16 */
17
18 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
19 * in microseconds for LE 1M PHY.
20 */
21 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS 40900 /*40.1 + 0.8*/
22 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_US \
23 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS)
24
25 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
26 * in microseconds for LE 1M PHY.
27 */
28 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS 140900 /*140.1 + 0.8*/
29 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_US \
30 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS)
31
32 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
33 * and no HW TIFS auto-switch) in microseconds for LE 1M PHY.
34 */
35 /* 129.5 + 0.8 */
36 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS 130300
37 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US \
38 HAL_RADIO_NS2US_ROUND( \
39 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS)
40
41 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
42 * in microseconds for LE 2M PHY.
43 */
44 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS 40000 /* 40.1 - 0.1 */
45 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_US \
46 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS)
47
48 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
49 * in microseconds for LE 2M PHY.
50 */
51 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS 144900 /* 145 - 0.1 */
52 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_US \
53 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS)
54
55 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
56 * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
57 */
58 /* 129.5 - 0.1 */
59 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS 129400
60 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US \
61 HAL_RADIO_NS2US_ROUND( \
62 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS)
63
64 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
65 * in microseconds for LE CODED PHY [S2].
66 */
67 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS 42300 /* 40.1 + 2.2 */
68 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_US \
69 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS)
70
71 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
72 * in microseconds for LE 2M PHY [S2].
73 */
74 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS 132200 /* 130 + 2.2 */
75 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_US \
76 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS)
77
78 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
79 * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S2].
80 */
81 /* 129.5 + 2.2 */
82 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS 131700
83 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US \
84 HAL_RADIO_NS2US_ROUND( \
85 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS)
86
87 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
88 * in microseconds for LE CODED PHY [S8].
89 */
90 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS 42300 /* 40.1 + 2.2 */
91 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_US \
92 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS)
93 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
94 * in microseconds for LE 2M PHY [S8].
95 */
96 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS 121800 /*119.6 + 2.2*/
97 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_US \
98 HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS)
99
100 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
101 * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S8].
102 */
103 /* 129.5 + 2.2 */
104 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS 131700
105 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US \
106 HAL_RADIO_NS2US_ROUND( \
107 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS)
108
109 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
110 * in microseconds for LE 1M PHY.
111 */
112 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS 40300 /* 40.1 + 0.2 */
113 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_US \
114 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS)
115
116 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
117 * in microseconds for LE 1M PHY.
118 */
119 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS 140300 /*140.1 + 0.2*/
120 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_US \
121 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS)
122
123 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
124 * no HW TIFS auto-switch) in microseconds for LE 1M PHY.
125 */
126 /* 129.5 + 0.2 */
127 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS 129700
128 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US \
129 HAL_RADIO_NS2US_CEIL( \
130 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS)
131
132 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
133 * in microseconds for LE 2M PHY.
134 */
135 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS 40300 /* 40.1 + 0.2 */
136 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_US \
137 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS)
138
139 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
140 * in microseconds for LE 2M PHY.
141 */
142 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS 144800 /*144.6 + 0.2*/
143 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_US \
144 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS)
145
146 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
147 * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
148 */
149 /* 129.5 + 0.2 */
150 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS 129700
151 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US \
152 HAL_RADIO_NS2US_CEIL( \
153 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS)
154
155 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
156 * in microseconds for LE Coded PHY [S2].
157 */
158 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS 40300 /* 40.1 + 0.2 */
159 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_US \
160 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS)
161
162 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
163 * in microseconds for LE Coded PHY [S2].
164 */
165 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS 130200 /* 130 + 0.2 */
166 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_US \
167 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS)
168
169 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode
170 * and no HW TIFS auto-switch) in microseconds for LE Coded PHY [S2].
171 */
172 /* 129.5 + 0.2 */
173 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS 129700
174 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US \
175 HAL_RADIO_NS2US_CEIL( \
176 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS)
177
178 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
179 * in microseconds for LE Coded PHY [S8].
180 */
181 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS 40300 /* 40.1 + 0.2 */
182 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_US \
183 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS)
184
185 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
186 * in microseconds for LE Coded PHY [S8].
187 */
188 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS 120200 /* 120.0 + 0.2 */
189 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_US \
190 HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS)
191
192 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
193 * no HW TIFS auto-switch) in microseconds for LE Coded PHY [S8].
194 */
195 /* 129.5 + 0.2 */
196 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS 129700
197 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US \
198 HAL_RADIO_NS2US_CEIL( \
199 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS)
200
201 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_1M_US 1 /* ceil(0.6) */
202 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_1M_NS 600 /* 0.6 */
203 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_2M_US 1 /* ceil(0.6) */
204 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_2M_NS 600 /* 0.6 */
205 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S2_US 1 /* ceil(0.6) */
206 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S2_NS 600 /* 0.6 */
207 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S8_US 1 /* ceil(0.6) */
208 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S8_NS 600 /* 0.6 */
209
210 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_US 10 /* ceil(9.4) */
211 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_NS 9400 /* 9.4 */
212 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_US 5 /* ceil(5.0) */
213 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_NS 5000 /* 5.0 */
214 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_US 25 /* ceil(19.6) */
215 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_NS 24600 /* 19.6 */
216 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_US 30 /* ceil(29.6) */
217 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_NS 29600 /* 29.6 */
218
219 #if defined(CONFIG_BT_CTLR_RADIO_ENABLE_FAST)
220 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
221 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_US
222 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
223 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS
224
225 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
226 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_US
227 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
228 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS
229
230 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
231 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_US
232 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
233 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS
234
235 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
236 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_US
237 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
238 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS
239
240 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
241 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_US
242 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
243 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS
244
245 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
246 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_US
247 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
248 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS
249
250 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
251 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_US
252 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
253 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS
254
255 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
256 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_US
257 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
258 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS
259
260 #else /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
261 #if defined(CONFIG_BT_CTLR_TIFS_HW)
262 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
263 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_US
264 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
265 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS
266
267 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
268 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_US
269 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
270 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS
271
272 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
273 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_US
274 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
275 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS
276
277 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
278 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_US
279 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
280 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS
281
282 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
283 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_US
284 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
285 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS
286
287 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
288 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_US
289 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
290 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS
291
292 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
293 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_US
294 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
295 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS
296
297 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
298 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_US
299 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
300 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS
301
302 #else /* !CONFIG_BT_CTLR_TIFS_HW */
303 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
304 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US
305 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
306 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS
307
308 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
309 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US
310 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
311 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS
312
313 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
314 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US
315 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
316 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS
317
318 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
319 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US
320 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
321 HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS
322
323 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
324 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US
325 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
326 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS
327
328 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
329 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US
330 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
331 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS
332
333 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
334 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US
335 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
336 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS
337
338 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
339 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US
340 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
341 HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS
342 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
343 #endif /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
344
345 /* HAL abstraction of Radio bitfields */
346 #define HAL_RADIO_INTENSET_DISABLED_Msk RADIO_INTENSET_DISABLED_Msk
347 #define HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk RADIO_SHORTS_END_DISABLE_Msk
348 #define HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk RADIO_SHORTS_PHYEND_DISABLE_Msk
349 #define HAL_RADIO_CLEARPATTERN_CLEARPATTERN_Clear RADIO_CLEARPATTERN_CLEARPATTERN_Clear
350
351 /* HAL abstraction of Radio IRQ number */
352 #define HAL_RADIO_IRQn RADIO_IRQn
353
354 /* SoC specific NRF_RADIO power-on reset value. Refer to Product Specification,
355 * RADIO Registers section for the documented reset values.
356 *
357 * NOTE: Only implementation used values defined here.
358 * In the future if MDK or nRFx header include these, use them instead.
359 */
360 #define HAL_RADIO_RESET_VALUE_DFEMODE 0x00000000UL
361 #define HAL_RADIO_RESET_VALUE_CTEINLINECONF 0x00002800UL
362
hal_radio_reset(void)363 static inline void hal_radio_reset(void)
364 {
365
366 }
367
hal_radio_stop(void)368 static inline void hal_radio_stop(void)
369 {
370 /* TODO: Add any required cleanup of actions taken in hal_radio_reset()
371 */
372 }
373
hal_radio_ram_prio_setup(void)374 static inline void hal_radio_ram_prio_setup(void)
375 {
376 struct {
377 uint32_t volatile reserved_0[0x5a0 >> 2];
378 uint32_t volatile bridge_type;
379 uint32_t volatile reserved_1[((0xe00 - 0x5a0) >> 2) - 1];
380 struct {
381 uint32_t volatile CPU0;
382 uint32_t volatile SPIS1;
383 uint32_t volatile RADIO;
384 uint32_t volatile ECB;
385 uint32_t volatile CCM;
386 uint32_t volatile AAR;
387 uint32_t volatile SAADC;
388 uint32_t volatile UARTE;
389 uint32_t volatile SERIAL0;
390 uint32_t volatile SERIAL2;
391 uint32_t volatile NFCT;
392 uint32_t volatile I2S;
393 uint32_t volatile PDM;
394 uint32_t volatile PWM;
395 } RAMPRI;
396 } volatile *NRF_AMLI = (void volatile *)0x40000000UL;
397
398 NRF_AMLI->RAMPRI.CPU0 = 0xFFFFFFFFUL;
399 NRF_AMLI->RAMPRI.SPIS1 = 0xFFFFFFFFUL;
400 NRF_AMLI->RAMPRI.RADIO = 0x00000000UL;
401 NRF_AMLI->RAMPRI.ECB = 0xFFFFFFFFUL;
402 NRF_AMLI->RAMPRI.CCM = 0x00000000UL;
403 NRF_AMLI->RAMPRI.AAR = 0xFFFFFFFFUL;
404 NRF_AMLI->RAMPRI.SAADC = 0xFFFFFFFFUL;
405 NRF_AMLI->RAMPRI.UARTE = 0xFFFFFFFFUL;
406 NRF_AMLI->RAMPRI.SERIAL0 = 0xFFFFFFFFUL;
407 NRF_AMLI->RAMPRI.SERIAL2 = 0xFFFFFFFFUL;
408 NRF_AMLI->RAMPRI.NFCT = 0xFFFFFFFFUL;
409 NRF_AMLI->RAMPRI.I2S = 0xFFFFFFFFUL;
410 NRF_AMLI->RAMPRI.PDM = 0xFFFFFFFFUL;
411 NRF_AMLI->RAMPRI.PWM = 0xFFFFFFFFUL;
412 }
413
hal_radio_phy_mode_get(uint8_t phy,uint8_t flags)414 static inline uint32_t hal_radio_phy_mode_get(uint8_t phy, uint8_t flags)
415 {
416 uint32_t mode;
417
418 switch (phy) {
419 case BIT(0):
420 default:
421 mode = RADIO_MODE_MODE_Ble_1Mbit;
422 break;
423
424 case BIT(1):
425 mode = RADIO_MODE_MODE_Ble_2Mbit;
426 break;
427
428 #if defined(CONFIG_BT_CTLR_PHY_CODED)
429 case BIT(2):
430 if (flags & 0x01) {
431 mode = RADIO_MODE_MODE_Ble_LR125Kbit;
432 } else {
433 mode = RADIO_MODE_MODE_Ble_LR500Kbit;
434 }
435 break;
436 #endif /* CONFIG_BT_CTLR_PHY_CODED */
437 }
438
439 return mode;
440 }
441
hal_radio_tx_power_min_get(void)442 static inline uint32_t hal_radio_tx_power_min_get(void)
443 {
444 return RADIO_TXPOWER_TXPOWER_Neg40dBm;
445 }
446
hal_radio_tx_power_max_get(void)447 static inline uint32_t hal_radio_tx_power_max_get(void)
448 {
449 return RADIO_TXPOWER_TXPOWER_Pos8dBm;
450 }
451
hal_radio_tx_power_floor(int8_t tx_power_lvl)452 static inline uint32_t hal_radio_tx_power_floor(int8_t tx_power_lvl)
453 {
454 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos8dBm) {
455 return RADIO_TXPOWER_TXPOWER_Pos8dBm;
456 }
457
458 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos7dBm) {
459 return RADIO_TXPOWER_TXPOWER_Pos7dBm;
460 }
461
462 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos6dBm) {
463 return RADIO_TXPOWER_TXPOWER_Pos6dBm;
464 }
465
466 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos5dBm) {
467 return RADIO_TXPOWER_TXPOWER_Pos5dBm;
468 }
469
470 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos4dBm) {
471 return RADIO_TXPOWER_TXPOWER_Pos4dBm;
472 }
473
474 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos3dBm) {
475 return RADIO_TXPOWER_TXPOWER_Pos3dBm;
476 }
477
478 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos2dBm) {
479 return RADIO_TXPOWER_TXPOWER_Pos2dBm;
480 }
481
482 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_0dBm) {
483 return RADIO_TXPOWER_TXPOWER_0dBm;
484 }
485
486 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg4dBm) {
487 return RADIO_TXPOWER_TXPOWER_Neg4dBm;
488 }
489
490 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg8dBm) {
491 return RADIO_TXPOWER_TXPOWER_Neg8dBm;
492 }
493
494 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg12dBm) {
495 return RADIO_TXPOWER_TXPOWER_Neg12dBm;
496 }
497
498 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg16dBm) {
499 return RADIO_TXPOWER_TXPOWER_Neg16dBm;
500 }
501
502 if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg20dBm) {
503 return RADIO_TXPOWER_TXPOWER_Neg20dBm;
504 }
505
506 /* Note: The -30 dBm power level is deprecated so ignore it! */
507 return RADIO_TXPOWER_TXPOWER_Neg40dBm;
508 }
509
hal_radio_tx_ready_delay_us_get(uint8_t phy,uint8_t flags)510 static inline uint32_t hal_radio_tx_ready_delay_us_get(uint8_t phy, uint8_t flags)
511 {
512 switch (phy) {
513 default:
514 case BIT(0):
515 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US;
516 case BIT(1):
517 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US;
518
519 #if defined(CONFIG_BT_CTLR_PHY_CODED)
520 case BIT(2):
521 if (flags & 0x01) {
522 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US;
523 } else {
524 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US;
525 }
526 #endif /* CONFIG_BT_CTLR_PHY_CODED */
527 }
528 }
529
hal_radio_rx_ready_delay_us_get(uint8_t phy,uint8_t flags)530 static inline uint32_t hal_radio_rx_ready_delay_us_get(uint8_t phy, uint8_t flags)
531 {
532 switch (phy) {
533 default:
534 case BIT(0):
535 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US;
536 case BIT(1):
537 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US;
538
539 #if defined(CONFIG_BT_CTLR_PHY_CODED)
540 case BIT(2):
541 if (flags & 0x01) {
542 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US;
543 } else {
544 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US;
545 }
546 #endif /* CONFIG_BT_CTLR_PHY_CODED */
547 }
548 }
549
hal_radio_tx_chain_delay_us_get(uint8_t phy,uint8_t flags)550 static inline uint32_t hal_radio_tx_chain_delay_us_get(uint8_t phy, uint8_t flags)
551 {
552 switch (phy) {
553 default:
554 case BIT(0):
555 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_1M_US;
556 case BIT(1):
557 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_2M_US;
558
559 #if defined(CONFIG_BT_CTLR_PHY_CODED)
560 case BIT(2):
561 if (flags & 0x01) {
562 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S8_US;
563 } else {
564 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S2_US;
565 }
566 #endif /* CONFIG_BT_CTLR_PHY_CODED */
567 }
568 }
569
hal_radio_rx_chain_delay_us_get(uint8_t phy,uint8_t flags)570 static inline uint32_t hal_radio_rx_chain_delay_us_get(uint8_t phy, uint8_t flags)
571 {
572 switch (phy) {
573 default:
574 case BIT(0):
575 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_US;
576 case BIT(1):
577 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_US;
578
579 #if defined(CONFIG_BT_CTLR_PHY_CODED)
580 case BIT(2):
581 if (flags & 0x01) {
582 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_US;
583 } else {
584 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_US;
585 }
586 #endif /* CONFIG_BT_CTLR_PHY_CODED */
587 }
588 }
589
hal_radio_tx_ready_delay_ns_get(uint8_t phy,uint8_t flags)590 static inline uint32_t hal_radio_tx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
591 {
592 switch (phy) {
593 default:
594 case BIT(0):
595 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS;
596 case BIT(1):
597 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS;
598
599 #if defined(CONFIG_BT_CTLR_PHY_CODED)
600 case BIT(2):
601 if (flags & 0x01) {
602 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS;
603 } else {
604 return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS;
605 }
606 #endif /* CONFIG_BT_CTLR_PHY_CODED */
607 }
608 }
609
hal_radio_rx_ready_delay_ns_get(uint8_t phy,uint8_t flags)610 static inline uint32_t hal_radio_rx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
611 {
612 switch (phy) {
613 default:
614 case BIT(0):
615 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS;
616 case BIT(1):
617 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS;
618
619 #if defined(CONFIG_BT_CTLR_PHY_CODED)
620 case BIT(2):
621 if (flags & 0x01) {
622 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS;
623 } else {
624 return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS;
625 }
626 #endif /* CONFIG_BT_CTLR_PHY_CODED */
627 }
628 }
629
hal_radio_tx_chain_delay_ns_get(uint8_t phy,uint8_t flags)630 static inline uint32_t hal_radio_tx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
631 {
632 switch (phy) {
633 default:
634 case BIT(0):
635 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_1M_NS;
636 case BIT(1):
637 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_2M_NS;
638
639 #if defined(CONFIG_BT_CTLR_PHY_CODED)
640 case BIT(2):
641 if (flags & 0x01) {
642 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S8_NS;
643 } else {
644 return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_S2_NS;
645 }
646 #endif /* CONFIG_BT_CTLR_PHY_CODED */
647 }
648 }
649
hal_radio_rx_chain_delay_ns_get(uint8_t phy,uint8_t flags)650 static inline uint32_t hal_radio_rx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
651 {
652 switch (phy) {
653 default:
654 case BIT(0):
655 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_NS;
656 case BIT(1):
657 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_NS;
658
659 #if defined(CONFIG_BT_CTLR_PHY_CODED)
660 case BIT(2):
661 if (flags & 0x01) {
662 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_NS;
663 } else {
664 return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_NS;
665 }
666 #endif /* CONFIG_BT_CTLR_PHY_CODED */
667 }
668 }
669