aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src/chips/nrf5340_app.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-10-28 03:07:06 +0200
committerDario Nieuwenhuis <[email protected]>2021-10-28 03:36:25 +0200
commit663141b4e456bbfacaaff8decdba6840c76a136b (patch)
tree8d151a795b008ab0791a6faa5dbd36e5b83522b5 /embassy-nrf/src/chips/nrf5340_app.rs
parentc995a97f2032d329c2955c79054b7e466b0b423b (diff)
nrf: add initial nrf5340 support
Diffstat (limited to 'embassy-nrf/src/chips/nrf5340_app.rs')
-rw-r--r--embassy-nrf/src/chips/nrf5340_app.rs506
1 files changed, 506 insertions, 0 deletions
diff --git a/embassy-nrf/src/chips/nrf5340_app.rs b/embassy-nrf/src/chips/nrf5340_app.rs
new file mode 100644
index 000000000..ca761893f
--- /dev/null
+++ b/embassy-nrf/src/chips/nrf5340_app.rs
@@ -0,0 +1,506 @@
1#[allow(unused_imports)]
2#[rustfmt::skip]
3pub mod pac {
4 // The nRF5340 has a secure and non-secure (NS) mode.
5 // To avoid cfg spam, we remove _ns or _s suffixes here.
6
7 pub use nrf5340_app_pac::{
8 interrupt,
9 Interrupt,
10 Peripherals,
11
12 cache_s as cache,
13 cachedata_s as cachedata,
14 cacheinfo_s as cacheinfo,
15 clock_ns as clock,
16 comp_ns as comp,
17 cryptocell_s as cryptocell,
18 cti_s as cti,
19 ctrlap_ns as ctrlap,
20 dcnf_ns as dcnf,
21 dppic_ns as dppic,
22 egu0_ns as egu0,
23 ficr_s as ficr,
24 fpu_ns as fpu,
25 gpiote0_s as gpiote,
26 i2s0_ns as i2s0,
27 ipc_ns as ipc,
28 kmu_ns as kmu,
29 lpcomp_ns as lpcomp,
30 mutex_ns as mutex,
31 nfct_ns as nfct,
32 nvmc_ns as nvmc,
33 oscillators_ns as oscillators,
34 p0_ns as p0,
35 pdm0_ns as pdm0,
36 power_ns as power,
37 pwm0_ns as pwm0,
38 qdec0_ns as qdec0,
39 qspi_ns as qspi,
40 regulators_ns as regulators,
41 reset_ns as reset,
42 rtc0_ns as rtc0,
43 saadc_ns as saadc,
44 spim0_ns as spim0,
45 spis0_ns as spis0,
46 spu_s as spu,
47 tad_s as tad,
48 timer0_ns as timer0,
49 twim0_ns as twim0,
50 twis0_ns as twis0,
51 uarte0_ns as uarte0,
52 uicr_s as uicr,
53 usbd_ns as usbd,
54 usbregulator_ns as usbregulator,
55 vmc_ns as vmc,
56 wdt0_ns as wdt0,
57 };
58
59 #[cfg(feature = "nrf5340-app-ns")]
60 pub use nrf5340_app_pac::{
61 CLOCK_NS as CLOCK,
62 COMP_NS as COMP,
63 CTRLAP_NS as CTRLAP,
64 DCNF_NS as DCNF,
65 DPPIC_NS as DPPIC,
66 EGU0_NS as EGU0,
67 EGU1_NS as EGU1,
68 EGU2_NS as EGU2,
69 EGU3_NS as EGU3,
70 EGU4_NS as EGU4,
71 EGU5_NS as EGU5,
72 FPU_NS as FPU,
73 GPIOTE1_NS as GPIOTE1,
74 I2S0_NS as I2S0,
75 IPC_NS as IPC,
76 KMU_NS as KMU,
77 LPCOMP_NS as LPCOMP,
78 MUTEX_NS as MUTEX,
79 NFCT_NS as NFCT,
80 NVMC_NS as NVMC,
81 OSCILLATORS_NS as OSCILLATORS,
82 P0_NS as P0,
83 P1_NS as P1,
84 PDM0_NS as PDM0,
85 POWER_NS as POWER,
86 PWM0_NS as PWM0,
87 PWM1_NS as PWM1,
88 PWM2_NS as PWM2,
89 PWM3_NS as PWM3,
90 QDEC0_NS as QDEC0,
91 QDEC1_NS as QDEC1,
92 QSPI_NS as QSPI,
93 REGULATORS_NS as REGULATORS,
94 RESET_NS as RESET,
95 RTC0_NS as RTC0,
96 RTC1_NS as RTC1,
97 SAADC_NS as SAADC,
98 SPIM0_NS as SPIM0,
99 SPIM1_NS as SPIM1,
100 SPIM2_NS as SPIM2,
101 SPIM3_NS as SPIM3,
102 SPIM4_NS as SPIM4,
103 SPIS0_NS as SPIS0,
104 SPIS1_NS as SPIS1,
105 SPIS2_NS as SPIS2,
106 SPIS3_NS as SPIS3,
107 TIMER0_NS as TIMER0,
108 TIMER1_NS as TIMER1,
109 TIMER2_NS as TIMER2,
110 TWIM0_NS as TWIM0,
111 TWIM1_NS as TWIM1,
112 TWIM2_NS as TWIM2,
113 TWIM3_NS as TWIM3,
114 TWIS0_NS as TWIS0,
115 TWIS1_NS as TWIS1,
116 TWIS2_NS as TWIS2,
117 TWIS3_NS as TWIS3,
118 UARTE0_NS as UARTE0,
119 UARTE1_NS as UARTE1,
120 UARTE2_NS as UARTE2,
121 UARTE3_NS as UARTE3,
122 USBD_NS as USBD,
123 USBREGULATOR_NS as USBREGULATOR,
124 VMC_NS as VMC,
125 WDT0_NS as WDT0,
126 WDT1_NS as WDT1,
127 };
128
129 #[cfg(feature = "nrf5340-app-s")]
130 pub use nrf5340_app_pac::{
131 CACHEDATA_S as CACHEDATA,
132 CACHEINFO_S as CACHEINFO,
133 CACHE_S as CACHE,
134 CLOCK_S as CLOCK,
135 COMP_S as COMP,
136 CRYPTOCELL_S as CRYPTOCELL,
137 CTI_S as CTI,
138 CTRLAP_S as CTRLAP,
139 DCNF_S as DCNF,
140 DPPIC_S as DPPIC,
141 EGU0_S as EGU0,
142 EGU1_S as EGU1,
143 EGU2_S as EGU2,
144 EGU3_S as EGU3,
145 EGU4_S as EGU4,
146 EGU5_S as EGU5,
147 FICR_S as FICR,
148 FPU_S as FPU,
149 GPIOTE0_S as GPIOTE0,
150 I2S0_S as I2S0,
151 IPC_S as IPC,
152 KMU_S as KMU,
153 LPCOMP_S as LPCOMP,
154 MUTEX_S as MUTEX,
155 NFCT_S as NFCT,
156 NVMC_S as NVMC,
157 OSCILLATORS_S as OSCILLATORS,
158 P0_S as P0,
159 P1_S as P1,
160 PDM0_S as PDM0,
161 POWER_S as POWER,
162 PWM0_S as PWM0,
163 PWM1_S as PWM1,
164 PWM2_S as PWM2,
165 PWM3_S as PWM3,
166 QDEC0_S as QDEC0,
167 QDEC1_S as QDEC1,
168 QSPI_S as QSPI,
169 REGULATORS_S as REGULATORS,
170 RESET_S as RESET,
171 RTC0_S as RTC0,
172 RTC1_S as RTC1,
173 SAADC_S as SAADC,
174 SPIM0_S as SPIM0,
175 SPIM1_S as SPIM1,
176 SPIM2_S as SPIM2,
177 SPIM3_S as SPIM3,
178 SPIM4_S as SPIM4,
179 SPIS0_S as SPIS0,
180 SPIS1_S as SPIS1,
181 SPIS2_S as SPIS2,
182 SPIS3_S as SPIS3,
183 SPU_S as SPU,
184 TAD_S as TAD,
185 TIMER0_S as TIMER0,
186 TIMER1_S as TIMER1,
187 TIMER2_S as TIMER2,
188 TWIM0_S as TWIM0,
189 TWIM1_S as TWIM1,
190 TWIM2_S as TWIM2,
191 TWIM3_S as TWIM3,
192 TWIS0_S as TWIS0,
193 TWIS1_S as TWIS1,
194 TWIS2_S as TWIS2,
195 TWIS3_S as TWIS3,
196 UARTE0_S as UARTE0,
197 UARTE1_S as UARTE1,
198 UARTE2_S as UARTE2,
199 UARTE3_S as UARTE3,
200 UICR_S as UICR,
201 USBD_S as USBD,
202 USBREGULATOR_S as USBREGULATOR,
203 VMC_S as VMC,
204 WDT0_S as WDT0,
205 WDT1_S as WDT1,
206 };
207}
208
209/// The maximum buffer size that the EasyDMA can send/recv in one operation.
210pub const EASY_DMA_SIZE: usize = (1 << 16) - 1;
211pub const FORCE_COPY_BUFFER_SIZE: usize = 1024;
212
213embassy_hal_common::peripherals! {
214 // RTC
215 RTC0,
216 RTC1,
217
218 // WDT
219 WDT,
220
221 // UARTE, TWI & SPI
222 UARTETWISPI0,
223 UARTETWISPI1,
224 UARTETWISPI2,
225 UARTETWISPI3,
226
227 // SAADC
228 SAADC,
229
230 // PWM
231 PWM0,
232 PWM1,
233 PWM2,
234 PWM3,
235
236 // TIMER
237 TIMER0,
238 TIMER1,
239 TIMER2,
240
241 // GPIOTE
242 GPIOTE_CH0,
243 GPIOTE_CH1,
244 GPIOTE_CH2,
245 GPIOTE_CH3,
246 GPIOTE_CH4,
247 GPIOTE_CH5,
248 GPIOTE_CH6,
249 GPIOTE_CH7,
250
251 // PPI
252 PPI_CH0,
253 PPI_CH1,
254 PPI_CH2,
255 PPI_CH3,
256 PPI_CH4,
257 PPI_CH5,
258 PPI_CH6,
259 PPI_CH7,
260 PPI_CH8,
261 PPI_CH9,
262 PPI_CH10,
263 PPI_CH11,
264 PPI_CH12,
265 PPI_CH13,
266 PPI_CH14,
267 PPI_CH15,
268 PPI_CH16,
269 PPI_CH17,
270 PPI_CH18,
271 PPI_CH19,
272 PPI_CH20,
273 PPI_CH21,
274 PPI_CH22,
275 PPI_CH23,
276 PPI_CH24,
277 PPI_CH25,
278 PPI_CH26,
279 PPI_CH27,
280 PPI_CH28,
281 PPI_CH29,
282 PPI_CH30,
283 PPI_CH31,
284
285 PPI_GROUP0,
286 PPI_GROUP1,
287 PPI_GROUP2,
288 PPI_GROUP3,
289 PPI_GROUP4,
290 PPI_GROUP5,
291
292 // GPIO port 0
293 P0_00,
294 P0_01,
295 P0_02,
296 P0_03,
297 P0_04,
298 P0_05,
299 P0_06,
300 P0_07,
301 P0_08,
302 P0_09,
303 P0_10,
304 P0_11,
305 P0_12,
306 P0_13,
307 P0_14,
308 P0_15,
309 P0_16,
310 P0_17,
311 P0_18,
312 P0_19,
313 P0_20,
314 P0_21,
315 P0_22,
316 P0_23,
317 P0_24,
318 P0_25,
319 P0_26,
320 P0_27,
321 P0_28,
322 P0_29,
323 P0_30,
324 P0_31,
325
326 // GPIO port 1
327 P1_00,
328 P1_01,
329 P1_02,
330 P1_03,
331 P1_04,
332 P1_05,
333 P1_06,
334 P1_07,
335 P1_08,
336 P1_09,
337 P1_10,
338 P1_11,
339 P1_12,
340 P1_13,
341 P1_14,
342 P1_15,
343}
344
345impl_uarte!(UARTETWISPI0, UARTE0, SERIAL0);
346impl_uarte!(UARTETWISPI1, UARTE1, SERIAL1);
347impl_uarte!(UARTETWISPI2, UARTE2, SERIAL2);
348impl_uarte!(UARTETWISPI3, UARTE3, SERIAL3);
349
350impl_spim!(UARTETWISPI0, SPIM0, SERIAL0);
351impl_spim!(UARTETWISPI1, SPIM1, SERIAL1);
352impl_spim!(UARTETWISPI2, SPIM2, SERIAL2);
353impl_spim!(UARTETWISPI3, SPIM3, SERIAL3);
354
355impl_twim!(UARTETWISPI0, TWIM0, SERIAL0);
356impl_twim!(UARTETWISPI1, TWIM1, SERIAL1);
357impl_twim!(UARTETWISPI2, TWIM2, SERIAL2);
358impl_twim!(UARTETWISPI3, TWIM3, SERIAL3);
359
360impl_pwm!(PWM0, PWM0, PWM0);
361impl_pwm!(PWM1, PWM1, PWM1);
362impl_pwm!(PWM2, PWM2, PWM2);
363impl_pwm!(PWM3, PWM3, PWM3);
364
365impl_timer!(TIMER0, TIMER0, TIMER0);
366impl_timer!(TIMER1, TIMER1, TIMER1);
367impl_timer!(TIMER2, TIMER2, TIMER2);
368
369impl_pin!(P0_00, 0, 0);
370impl_pin!(P0_01, 0, 1);
371impl_pin!(P0_02, 0, 2);
372impl_pin!(P0_03, 0, 3);
373impl_pin!(P0_04, 0, 4);
374impl_pin!(P0_05, 0, 5);
375impl_pin!(P0_06, 0, 6);
376impl_pin!(P0_07, 0, 7);
377impl_pin!(P0_08, 0, 8);
378impl_pin!(P0_09, 0, 9);
379impl_pin!(P0_10, 0, 10);
380impl_pin!(P0_11, 0, 11);
381impl_pin!(P0_12, 0, 12);
382impl_pin!(P0_13, 0, 13);
383impl_pin!(P0_14, 0, 14);
384impl_pin!(P0_15, 0, 15);
385impl_pin!(P0_16, 0, 16);
386impl_pin!(P0_17, 0, 17);
387impl_pin!(P0_18, 0, 18);
388impl_pin!(P0_19, 0, 19);
389impl_pin!(P0_20, 0, 20);
390impl_pin!(P0_21, 0, 21);
391impl_pin!(P0_22, 0, 22);
392impl_pin!(P0_23, 0, 23);
393impl_pin!(P0_24, 0, 24);
394impl_pin!(P0_25, 0, 25);
395impl_pin!(P0_26, 0, 26);
396impl_pin!(P0_27, 0, 27);
397impl_pin!(P0_28, 0, 28);
398impl_pin!(P0_29, 0, 29);
399impl_pin!(P0_30, 0, 30);
400impl_pin!(P0_31, 0, 31);
401
402impl_pin!(P1_00, 1, 0);
403impl_pin!(P1_01, 1, 1);
404impl_pin!(P1_02, 1, 2);
405impl_pin!(P1_03, 1, 3);
406impl_pin!(P1_04, 1, 4);
407impl_pin!(P1_05, 1, 5);
408impl_pin!(P1_06, 1, 6);
409impl_pin!(P1_07, 1, 7);
410impl_pin!(P1_08, 1, 8);
411impl_pin!(P1_09, 1, 9);
412impl_pin!(P1_10, 1, 10);
413impl_pin!(P1_11, 1, 11);
414impl_pin!(P1_12, 1, 12);
415impl_pin!(P1_13, 1, 13);
416impl_pin!(P1_14, 1, 14);
417impl_pin!(P1_15, 1, 15);
418
419impl_ppi_channel!(PPI_CH0, 0 => configurable);
420impl_ppi_channel!(PPI_CH1, 1 => configurable);
421impl_ppi_channel!(PPI_CH2, 2 => configurable);
422impl_ppi_channel!(PPI_CH3, 3 => configurable);
423impl_ppi_channel!(PPI_CH4, 4 => configurable);
424impl_ppi_channel!(PPI_CH5, 5 => configurable);
425impl_ppi_channel!(PPI_CH6, 6 => configurable);
426impl_ppi_channel!(PPI_CH7, 7 => configurable);
427impl_ppi_channel!(PPI_CH8, 8 => configurable);
428impl_ppi_channel!(PPI_CH9, 9 => configurable);
429impl_ppi_channel!(PPI_CH10, 10 => configurable);
430impl_ppi_channel!(PPI_CH11, 11 => configurable);
431impl_ppi_channel!(PPI_CH12, 12 => configurable);
432impl_ppi_channel!(PPI_CH13, 13 => configurable);
433impl_ppi_channel!(PPI_CH14, 14 => configurable);
434impl_ppi_channel!(PPI_CH15, 15 => configurable);
435impl_ppi_channel!(PPI_CH16, 16 => configurable);
436impl_ppi_channel!(PPI_CH17, 17 => configurable);
437impl_ppi_channel!(PPI_CH18, 18 => configurable);
438impl_ppi_channel!(PPI_CH19, 19 => configurable);
439impl_ppi_channel!(PPI_CH20, 20 => configurable);
440impl_ppi_channel!(PPI_CH21, 21 => configurable);
441impl_ppi_channel!(PPI_CH22, 22 => configurable);
442impl_ppi_channel!(PPI_CH23, 23 => configurable);
443impl_ppi_channel!(PPI_CH24, 24 => configurable);
444impl_ppi_channel!(PPI_CH25, 25 => configurable);
445impl_ppi_channel!(PPI_CH26, 26 => configurable);
446impl_ppi_channel!(PPI_CH27, 27 => configurable);
447impl_ppi_channel!(PPI_CH28, 28 => configurable);
448impl_ppi_channel!(PPI_CH29, 29 => configurable);
449impl_ppi_channel!(PPI_CH30, 30 => configurable);
450impl_ppi_channel!(PPI_CH31, 31 => configurable);
451
452impl_saadc_input!(P0_13, ANALOGINPUT0);
453impl_saadc_input!(P0_14, ANALOGINPUT1);
454impl_saadc_input!(P0_15, ANALOGINPUT2);
455impl_saadc_input!(P0_16, ANALOGINPUT3);
456impl_saadc_input!(P0_17, ANALOGINPUT4);
457impl_saadc_input!(P0_18, ANALOGINPUT5);
458impl_saadc_input!(P0_19, ANALOGINPUT6);
459impl_saadc_input!(P0_20, ANALOGINPUT7);
460
461pub mod irqs {
462 use crate::pac::Interrupt as InterruptEnum;
463 use embassy_macros::interrupt_declare as declare;
464
465 declare!(FPU);
466 declare!(CACHE);
467 declare!(SPU);
468 declare!(CLOCK_POWER);
469 declare!(SERIAL0);
470 declare!(SERIAL1);
471 declare!(SPIM4);
472 declare!(SERIAL2);
473 declare!(SERIAL3);
474 declare!(GPIOTE0);
475 declare!(SAADC);
476 declare!(TIMER0);
477 declare!(TIMER1);
478 declare!(TIMER2);
479 declare!(RTC0);
480 declare!(RTC1);
481 declare!(WDT0);
482 declare!(WDT1);
483 declare!(COMP_LPCOMP);
484 declare!(EGU0);
485 declare!(EGU1);
486 declare!(EGU2);
487 declare!(EGU3);
488 declare!(EGU4);
489 declare!(EGU5);
490 declare!(PWM0);
491 declare!(PWM1);
492 declare!(PWM2);
493 declare!(PWM3);
494 declare!(PDM0);
495 declare!(I2S0);
496 declare!(IPC);
497 declare!(QSPI);
498 declare!(NFCT);
499 declare!(GPIOTE1);
500 declare!(QDEC0);
501 declare!(QDEC1);
502 declare!(USBD);
503 declare!(USBREGULATOR);
504 declare!(KMU);
505 declare!(CRYPTOCELL);
506}