1pub trait Signal: private::Sealed {}
5
6pub enum Sck {}
8pub enum Sdo {}
10pub enum Sdi {}
12pub enum Pcs0 {}
14pub enum Pcs1 {}
16pub enum Pcs2 {}
18pub enum Pcs3 {}
20
21impl Signal for Sck {}
22impl Signal for Sdo {}
23impl Signal for Sdi {}
24impl Signal for Pcs0 {}
25impl Signal for Pcs1 {}
26impl Signal for Pcs2 {}
27impl Signal for Pcs3 {}
28
29mod private {
30 pub trait Sealed {}
31 impl Sealed for super::Sck {}
32 impl Sealed for super::Sdo {}
33 impl Sealed for super::Sdi {}
34 impl Sealed for super::Pcs0 {}
35 impl Sealed for super::Pcs1 {}
36 impl Sealed for super::Pcs2 {}
37 impl Sealed for super::Pcs3 {}
38}
39
40pub trait Pin: super::Iomuxc {
42 const ALT: u32;
44 const DAISY: Option<super::Daisy>;
46 type Signal: Signal;
48 type Module: super::consts::Unsigned;
50}
51
52pub fn prepare<P: Pin>(pin: &mut P) {
61 super::alternate(pin, P::ALT);
62 super::set_sion(pin);
63 if let Some(daisy) = P::DAISY {
64 unsafe { daisy.write() };
65 }
66}
67
68#[allow(unused)] macro_rules! spi {
70 (module: $module:ty, alt: $alt:expr, pad: $pad:ty, signal: $signal:ty, daisy: $daisy:expr) => {
71 impl Pin for $pad {
72 const ALT: u32 = $alt;
73 const DAISY: Option<Daisy> = $daisy;
74 type Signal = $signal;
75 type Module = $module;
76 }
77 };
78}