1use crate::core::CorePeripherals;
4use crate::gpio::{gpio0::*, GpioExt, Unknown};
5use e310x::{
6 Aonclk, Backup, Gpio0, Otp, Peripherals, Pmu, Prci, Pwm0, Pwm1, Pwm2, Qspi0, Qspi1, Rtc, Uart0,
7 Wdog,
8};
9#[cfg(feature = "g002")]
10use e310x::{I2c0, Uart1};
11
12#[allow(non_snake_case)]
14pub struct DevicePeripherals {
15 pub WDOG: Wdog,
17 pub RTC: Rtc,
19 pub AONCLK: Aonclk,
21 pub BACKUP: Backup,
23 pub PMU: Pmu,
25 pub PRCI: Prci,
27 pub OTP: Otp,
29
30 pub UART0: Uart0,
32 #[cfg(feature = "g002")]
33 pub UART1: Uart1,
35
36 pub QSPI0: Qspi0,
38 pub QSPI1: Qspi1,
40
41 #[cfg(feature = "g002")]
42 pub I2C0: I2c0,
44
45 pub PWM0: Pwm0,
47 pub PWM1: Pwm1,
49 pub PWM2: Pwm2,
51}
52
53pub struct DeviceGpioPins {
55 pub pin0: Pin0<Unknown>,
57 pub pin1: Pin1<Unknown>,
59 pub pin2: Pin2<Unknown>,
61 pub pin3: Pin3<Unknown>,
63 pub pin4: Pin4<Unknown>,
65 pub pin5: Pin5<Unknown>,
67 pub pin9: Pin9<Unknown>,
69 pub pin10: Pin10<Unknown>,
71 pub pin11: Pin11<Unknown>,
73 pub pin12: Pin12<Unknown>,
75 pub pin13: Pin13<Unknown>,
77 pub pin16: Pin16<Unknown>,
79 pub pin17: Pin17<Unknown>,
81 pub pin18: Pin18<Unknown>,
83 pub pin19: Pin19<Unknown>,
85 pub pin20: Pin20<Unknown>,
87 pub pin21: Pin21<Unknown>,
89 pub pin22: Pin22<Unknown>,
91 pub pin23: Pin23<Unknown>,
93}
94
95impl From<Gpio0> for DeviceGpioPins {
96 fn from(gpio: Gpio0) -> Self {
97 let parts = gpio.split();
98
99 DeviceGpioPins {
100 pin0: parts.pin0,
101 pin1: parts.pin1,
102 pin2: parts.pin2,
103 pin3: parts.pin3,
104 pin4: parts.pin4,
105 pin5: parts.pin5,
106 pin9: parts.pin9,
107 pin10: parts.pin10,
108 pin11: parts.pin11,
109 pin12: parts.pin12,
110 pin13: parts.pin13,
111 pin16: parts.pin16,
112 pin17: parts.pin17,
113 pin18: parts.pin18,
114 pin19: parts.pin19,
115 pin20: parts.pin20,
116 pin21: parts.pin21,
117 pin22: parts.pin22,
118 pin23: parts.pin23,
119 }
120 }
121}
122
123pub struct DeviceResources {
125 pub core_peripherals: CorePeripherals,
127
128 pub peripherals: DevicePeripherals,
130
131 pub pins: DeviceGpioPins,
133}
134
135impl From<Peripherals> for DeviceResources {
136 fn from(p: Peripherals) -> Self {
137 let peripherals = DevicePeripherals {
138 WDOG: p.wdog,
139 RTC: p.rtc,
140 AONCLK: p.aonclk,
141 BACKUP: p.backup,
142 PMU: p.pmu,
143 PRCI: p.prci,
144 OTP: p.otp,
145
146 UART0: p.uart0,
147 #[cfg(feature = "g002")]
148 UART1: p.uart1,
149
150 QSPI0: p.qspi0,
151 QSPI1: p.qspi1,
152
153 #[cfg(feature = "g002")]
154 I2C0: p.i2c0,
155
156 PWM0: p.pwm0,
157 PWM1: p.pwm1,
158 PWM2: p.pwm2,
159 };
160
161 DeviceResources {
162 core_peripherals: CorePeripherals::new(),
163 peripherals,
164 pins: p.gpio0.into(),
165 }
166 }
167}
168
169impl DeviceResources {
170 #[inline]
172 pub fn take() -> Option<Self> {
173 e310x::Peripherals::take().map(DeviceResources::from)
174 }
175
176 pub unsafe fn steal() -> Self {
182 e310x::Peripherals::steal().into()
183 }
184}