1use k210_pac::{CLINT, PLIC, UARTHS, GPIOHS, KPU, FFT, DMAC, GPIO, UART1, UART2, UART3, SPI0, SPI1, SPI2, SPI3, I2S0, APU, I2S1, I2S2, I2C0, I2C1, I2C2, SHA256, TIMER0, TIMER1, TIMER2, WDT0, WDT1, OTP, DVP, SYSCTL, AES, RTC};
2use crate::external_pins::ExternalPins;
3
4#[allow(non_snake_case)]
6pub struct Peripherals {
7 #[doc = "CLINT"]
9 pub CLINT: CLINT,
10 #[doc = "PLIC"]
11 pub PLIC: PLIC,
12 #[doc = "UARTHS"]
13 pub UARTHS: UARTHS,
14 #[doc = "GPIOHS"]
15 pub GPIOHS: GPIOHS,
16 #[doc = "KPU"]
17 pub KPU: KPU,
18 #[doc = "FFT"]
19 pub FFT: FFT,
20 #[doc = "DMAC"]
21 pub DMAC: DMAC,
22 #[doc = "GPIO"]
23 pub GPIO: GPIO,
24 #[doc = "UART1"]
25 pub UART1: UART1,
26 #[doc = "UART2"]
27 pub UART2: UART2,
28 #[doc = "UART3"]
29 pub UART3: UART3,
30 #[doc = "SPI0"]
31 pub SPI0: SPI0,
32 #[doc = "SPI1"]
33 pub SPI1: SPI1,
34 #[doc = "SPI2"]
35 pub SPI2: SPI2,
36 #[doc = "SPI3"]
37 pub SPI3: SPI3,
38 #[doc = "I2S0"]
39 pub I2S0: I2S0,
40 #[doc = "APU"]
41 pub APU: APU,
42 #[doc = "I2S1"]
43 pub I2S1: I2S1,
44 #[doc = "I2S2"]
45 pub I2S2: I2S2,
46 #[doc = "I2C0"]
47 pub I2C0: I2C0,
48 #[doc = "I2C1"]
49 pub I2C1: I2C1,
50 #[doc = "I2C2"]
51 pub I2C2: I2C2,
52 #[doc = "SHA256"]
53 pub SHA256: SHA256,
54 #[doc = "TIMER0"]
55 pub TIMER0: TIMER0,
56 #[doc = "TIMER1"]
57 pub TIMER1: TIMER1,
58 #[doc = "TIMER2"]
59 pub TIMER2: TIMER2,
60 #[doc = "WDT0"]
61 pub WDT0: WDT0,
62 #[doc = "WDT1"]
63 pub WDT1: WDT1,
64 #[doc = "OTP"]
65 pub OTP: OTP,
66 #[doc = "DVP"]
67 pub DVP: DVP,
68 #[doc = "SYSCTL"]
69 pub SYSCTL: SYSCTL,
70 #[doc = "AES"]
71 pub AES: AES,
72 #[doc = "RTC"]
73 pub RTC: RTC,
74
75 pub pins: ExternalPins,
77}
78
79impl Peripherals {
80 fn construct(p: k210_pac::Peripherals) -> Self {
81 Peripherals {
82 CLINT: p.CLINT,
83 PLIC: p.PLIC,
84 UARTHS: p.UARTHS,
85 GPIOHS: p.GPIOHS,
86 KPU: p.KPU,
87 FFT: p.FFT,
88 DMAC: p.DMAC,
89 GPIO: p.GPIO,
90 UART1: p.UART1,
91 UART2: p.UART2,
92 UART3: p.UART3,
93 SPI0: p.SPI0,
94 SPI1: p.SPI1,
95 SPI2: p.SPI2,
96 SPI3: p.SPI3,
97 I2S0: p.I2S0,
98 APU: p.APU,
99 I2S1: p.I2S1,
100 I2S2: p.I2S2,
101 I2C0: p.I2C0,
102 I2C1: p.I2C1,
103 I2C2: p.I2C2,
104 SHA256: p.SHA256,
105 TIMER0: p.TIMER0,
106 TIMER1: p.TIMER1,
107 TIMER2: p.TIMER2,
108 WDT0: p.WDT0,
109 WDT1: p.WDT1,
110 OTP: p.OTP,
111 DVP: p.DVP,
112 SYSCTL: p.SYSCTL,
113 AES: p.AES,
114 RTC: p.RTC,
115 pins: ExternalPins::new(),
116 }
117 }
118
119 #[inline]
121 pub fn take() -> Option<Self> {
122 k210_pac::Peripherals::take().map(Peripherals::construct)
123 }
124
125 pub unsafe fn steal() -> Self {
127 Peripherals::construct(k210_pac::Peripherals::steal())
128 }
129}