k210_hal/
peripherals.rs

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/// All the peripherals
5#[allow(non_snake_case)]
6pub struct Peripherals {
7    // All the peripherals except FPIOA
8    #[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    /// External pins
76    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    /// Returns all the peripherals *once*
120    #[inline]
121    pub fn take() -> Option<Self> {
122        k210_pac::Peripherals::take().map(Peripherals::construct)
123    }
124
125    /// Unchecked version of `Peripherals::take`
126    pub unsafe fn steal() -> Self {
127        Peripherals::construct(k210_pac::Peripherals::steal())
128    }
129}