1#![no_std]
2
3pub mod prelude {
4 pub use nrf52840_hal::prelude::*;
5}
6
7use nrf52840_hal::{
8 gpio::{p0, p1, Floating, Input},
9 prelude::*,
10 target::{self as pac, CorePeripherals, Peripherals},
11 };
13
14#[allow(non_snake_case)]
15pub struct Board {
16 pub pins: Pins,
17
18 pub CBP: pac::CBP,
20
21 pub CPUID: pac::CPUID,
23
24 pub DCB: pac::DCB,
26
27 pub DWT: pac::DWT,
29
30 pub FPB: pac::FPB,
32
33 pub FPU: pac::FPU,
35
36 pub ITM: pac::ITM,
38
39 pub MPU: pac::MPU,
41
42 pub NVIC: pac::NVIC,
44
45 pub SCB: pac::SCB,
47
48 pub SYST: pac::SYST,
50
51 pub TPIU: pac::TPIU,
53
54 pub FICR: pac::FICR,
56
57 pub UICR: pac::UICR,
59
60 pub POWER: pac::POWER,
62
63 pub CLOCK: pac::CLOCK,
65
66 pub RADIO: pac::RADIO,
68
69 pub UART0: pac::UART0,
71
72 pub SPIM0: pac::SPIM0,
74
75 pub SPIS0: pac::SPIS0,
77
78 pub TWIM0: pac::TWIM0,
80
81 pub TWIS0: pac::TWIS0,
83
84 pub SPI0: pac::SPI0,
86
87 pub TWI0: pac::TWI0,
89
90 pub SPIM1: pac::SPIM1,
92
93 pub SPIS1: pac::SPIS1,
95
96 pub TWIS1: pac::TWIS1,
98
99 pub SPI1: pac::SPI1,
101
102 pub TWI1: pac::TWI1,
104
105 pub NFCT: pac::NFCT,
107
108 pub GPIOTE: pac::GPIOTE,
110
111 pub SAADC: pac::SAADC,
113
114 pub TIMER0: pac::TIMER0,
116
117 pub TIMER1: pac::TIMER1,
119
120 pub TIMER2: pac::TIMER2,
122
123 pub RTC0: pac::RTC0,
125
126 pub TEMP: pac::TEMP,
128
129 pub RNG: pac::RNG,
131
132 pub ECB: pac::ECB,
134
135 pub CCM: pac::CCM,
137
138 pub AAR: pac::AAR,
140
141 pub WDT: pac::WDT,
143
144 pub RTC1: pac::RTC1,
146
147 pub QDEC: pac::QDEC,
149
150 pub COMP: pac::COMP,
152
153 pub LPCOMP: pac::LPCOMP,
155
156 pub SWI0: pac::SWI0,
158
159 pub EGU0: pac::EGU0,
161
162 pub SWI1: pac::SWI1,
164
165 pub EGU1: pac::EGU1,
167
168 pub SWI2: pac::SWI2,
170
171 pub EGU2: pac::EGU2,
173
174 pub SWI3: pac::SWI3,
176
177 pub EGU3: pac::EGU3,
179
180 pub SWI4: pac::SWI4,
182
183 pub EGU4: pac::EGU4,
185
186 pub SWI5: pac::SWI5,
188
189 pub EGU5: pac::EGU5,
191
192 pub TIMER3: pac::TIMER3,
194
195 pub TIMER4: pac::TIMER4,
197
198 pub PWM0: pac::PWM0,
200
201 pub PDM: pac::PDM,
203
204 pub NVMC: pac::NVMC,
206
207 pub PPI: pac::PPI,
209
210 pub MWU: pac::MWU,
212
213 pub PWM1: pac::PWM1,
215
216 pub PWM2: pac::PWM2,
218
219 pub RTC2: pac::RTC2,
221
222 pub I2S: pac::I2S,
224}
225
226impl Board {
227 pub fn take() -> Option<Self> {
228 Some(Self::new(CorePeripherals::take()?, Peripherals::take()?))
229 }
230
231 pub unsafe fn steal() -> Self {
232 Self::new(CorePeripherals::steal(), Peripherals::steal())
233 }
234
235 pub fn new(cp: CorePeripherals, p: Peripherals) -> Self {
236 let pins0 = p.P0.split();
240 let pins1 = p.P1.split();
241
242 Self {
243 pins: Pins {
244 rst: pins0.p0_18,
245 mode: pins0.p0_11,
246 a0: pins0.p0_03,
247 a1: pins0.p0_04,
248 a2: pins0.p0_28,
249 a3: pins0.p0_29,
250 a4: pins0.p0_30,
251 a5: pins0.p0_31,
252 sck: pins1.p1_15,
253 mosi: pins1.p1_13,
254 miso: pins1.p1_14,
255 rx: pins0.p0_08,
256 tx: pins0.p0_06,
257 d0: pins0.p0_26,
258 d1: pins0.p0_27,
259 d2: pins1.p1_01,
260 d3: pins1.p1_02,
261 d4: pins1.p1_08,
262 d5: pins1.p1_10,
263 d6: pins1.p1_11,
264 d7: pins1.p1_12,
265 d8: pins1.p1_03,
266 },
267 CBP: cp.CBP,
269 CPUID: cp.CPUID,
270 DCB: cp.DCB,
271 DWT: cp.DWT,
272 FPB: cp.FPB,
273 FPU: cp.FPU,
274 ITM: cp.ITM,
275 MPU: cp.MPU,
276 NVIC: cp.NVIC,
277 SCB: cp.SCB,
278 SYST: cp.SYST,
279 TPIU: cp.TPIU,
280
281 FICR: p.FICR,
283 UICR: p.UICR,
284 POWER: p.POWER,
285 CLOCK: p.CLOCK,
286 RADIO: p.RADIO,
287
288 UART0: p.UART0,
289 SPIM0: p.SPIM0,
290 SPIS0: p.SPIS0,
291 TWIM0: p.TWIM0,
292 TWIS0: p.TWIS0,
293 SPI0: p.SPI0,
294 TWI0: p.TWI0,
295 SPIM1: p.SPIM1,
296 SPIS1: p.SPIS1,
297 TWIS1: p.TWIS1,
298 SPI1: p.SPI1,
299 TWI1: p.TWI1,
300 NFCT: p.NFCT,
301 GPIOTE: p.GPIOTE,
302 SAADC: p.SAADC,
303 TIMER0: p.TIMER0,
304 TIMER1: p.TIMER1,
305 TIMER2: p.TIMER2,
306 RTC0: p.RTC0,
307 TEMP: p.TEMP,
308 RNG: p.RNG,
309 ECB: p.ECB,
310 CCM: p.CCM,
311 AAR: p.AAR,
312 WDT: p.WDT,
313 RTC1: p.RTC1,
314 QDEC: p.QDEC,
315 COMP: p.COMP,
316 LPCOMP: p.LPCOMP,
317 SWI0: p.SWI0,
318 EGU0: p.EGU0,
319 SWI1: p.SWI1,
320 EGU1: p.EGU1,
321 SWI2: p.SWI2,
322 EGU2: p.EGU2,
323 SWI3: p.SWI3,
324 EGU3: p.EGU3,
325 SWI4: p.SWI4,
326 EGU4: p.EGU4,
327 SWI5: p.SWI5,
328 EGU5: p.EGU5,
329 TIMER3: p.TIMER3,
330 TIMER4: p.TIMER4,
331 PWM0: p.PWM0,
332 PDM: p.PDM,
333 NVMC: p.NVMC,
334 PPI: p.PPI,
335 MWU: p.MWU,
336 PWM1: p.PWM1,
337 PWM2: p.PWM2,
338 RTC2: p.RTC2,
339 I2S: p.I2S,
340 }
341 }
342}
343
344pub struct Pins {
346 pub rst: p0::P0_18<Input<Floating>>,
347 pub mode: p0::P0_11<Input<Floating>>,
348 pub a0: p0::P0_03<Input<Floating>>,
349 pub a1: p0::P0_04<Input<Floating>>,
350 pub a2: p0::P0_28<Input<Floating>>,
351 pub a3: p0::P0_29<Input<Floating>>,
352 pub a4: p0::P0_30<Input<Floating>>,
353 pub a5: p0::P0_31<Input<Floating>>,
354 pub sck: p1::P1_15<Input<Floating>>,
355 pub mosi: p1::P1_13<Input<Floating>>,
356 pub miso: p1::P1_14<Input<Floating>>,
357 pub rx: p0::P0_08<Input<Floating>>,
358 pub tx: p0::P0_06<Input<Floating>>,
359 pub d0: p0::P0_26<Input<Floating>>,
360 pub d1: p0::P0_27<Input<Floating>>,
361 pub d2: p1::P1_01<Input<Floating>>,
362 pub d3: p1::P1_02<Input<Floating>>,
363 pub d4: p1::P1_08<Input<Floating>>,
364 pub d5: p1::P1_10<Input<Floating>>,
365 pub d6: p1::P1_11<Input<Floating>>,
366 pub d7: p1::P1_12<Input<Floating>>,
367 pub d8: p1::P1_03<Input<Floating>>,
368}