aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuliDi <[email protected]>2023-08-31 10:53:51 +0200
committerJuliDi <[email protected]>2023-10-02 09:30:57 +0200
commit729338875ccb1acd9f991dd2fec47ed33a66e415 (patch)
tree3d0239ca4a85dc4ce89bfa1204a47438dacad785
parenta1036e111eddf82462ce3f6e50923bded89af450 (diff)
support QSPI BK2
-rw-r--r--embassy-stm32/build.rs16
-rw-r--r--embassy-stm32/src/qspi/mod.rs67
2 files changed, 67 insertions, 16 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index 76db0a762..6fa10c7ea 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -719,18 +719,24 @@ fn main() {
719 (("sdmmc", "D6"), quote!(crate::sdmmc::D6Pin)), 719 (("sdmmc", "D6"), quote!(crate::sdmmc::D6Pin)),
720 (("sdmmc", "D6"), quote!(crate::sdmmc::D7Pin)), 720 (("sdmmc", "D6"), quote!(crate::sdmmc::D7Pin)),
721 (("sdmmc", "D8"), quote!(crate::sdmmc::D8Pin)), 721 (("sdmmc", "D8"), quote!(crate::sdmmc::D8Pin)),
722 (("quadspi", "BK1_IO0"), quote!(crate::qspi::D0Pin)), 722 (("quadspi", "BK1_IO0"), quote!(crate::qspi::BK1D0Pin)),
723 (("quadspi", "BK1_IO1"), quote!(crate::qspi::D1Pin)), 723 (("quadspi", "BK1_IO1"), quote!(crate::qspi::BK1D1Pin)),
724 (("quadspi", "BK1_IO2"), quote!(crate::qspi::D2Pin)), 724 (("quadspi", "BK1_IO2"), quote!(crate::qspi::BK1D2Pin)),
725 (("quadspi", "BK1_IO3"), quote!(crate::qspi::D3Pin)), 725 (("quadspi", "BK1_IO3"), quote!(crate::qspi::BK1D3Pin)),
726 (("quadspi", "BK1_NCS"), quote!(crate::qspi::BK1NSSPin)),
727 (("quadspi", "BK2_IO0"), quote!(crate::qspi::BK2D0Pin)),
728 (("quadspi", "BK2_IO1"), quote!(crate::qspi::BK2D1Pin)),
729 (("quadspi", "BK2_IO2"), quote!(crate::qspi::BK2D2Pin)),
730 (("quadspi", "BK2_IO3"), quote!(crate::qspi::BK2D3Pin)),
731 (("quadspi", "BK2_NCS"), quote!(crate::qspi::BK2NSSPin)),
726 (("quadspi", "CLK"), quote!(crate::qspi::SckPin)), 732 (("quadspi", "CLK"), quote!(crate::qspi::SckPin)),
727 (("quadspi", "BK1_NCS"), quote!(crate::qspi::NSSPin)),
728 ].into(); 733 ].into();
729 734
730 for p in METADATA.peripherals { 735 for p in METADATA.peripherals {
731 if let Some(regs) = &p.registers { 736 if let Some(regs) = &p.registers {
732 for pin in p.pins { 737 for pin in p.pins {
733 let key = (regs.kind, pin.signal); 738 let key = (regs.kind, pin.signal);
739 eprintln!("key: {:#?}", &key);
734 if let Some(tr) = signals.get(&key) { 740 if let Some(tr) = signals.get(&key) {
735 let mut peri = format_ident!("{}", p.name); 741 let mut peri = format_ident!("{}", p.name);
736 742
diff --git a/embassy-stm32/src/qspi/mod.rs b/embassy-stm32/src/qspi/mod.rs
index 32382fb28..9ca40f8f7 100644
--- a/embassy-stm32/src/qspi/mod.rs
+++ b/embassy-stm32/src/qspi/mod.rs
@@ -83,14 +83,53 @@ pub struct Qspi<'d, T: Instance, Dma> {
83} 83}
84 84
85impl<'d, T: Instance, Dma> Qspi<'d, T, Dma> { 85impl<'d, T: Instance, Dma> Qspi<'d, T, Dma> {
86 pub fn new( 86 pub fn new_bk1(
87 peri: impl Peripheral<P = T> + 'd, 87 peri: impl Peripheral<P = T> + 'd,
88 d0: impl Peripheral<P = impl D0Pin<T>> + 'd, 88 d0: impl Peripheral<P = impl BK1D0Pin<T>> + 'd,
89 d1: impl Peripheral<P = impl D1Pin<T>> + 'd, 89 d1: impl Peripheral<P = impl BK1D1Pin<T>> + 'd,
90 d2: impl Peripheral<P = impl D2Pin<T>> + 'd, 90 d2: impl Peripheral<P = impl BK1D2Pin<T>> + 'd,
91 d3: impl Peripheral<P = impl D3Pin<T>> + 'd, 91 d3: impl Peripheral<P = impl BK1D3Pin<T>> + 'd,
92 sck: impl Peripheral<P = impl SckPin<T>> + 'd, 92 sck: impl Peripheral<P = impl SckPin<T>> + 'd,
93 nss: impl Peripheral<P = impl NSSPin<T>> + 'd, 93 nss: impl Peripheral<P = impl BK1NSSPin<T>> + 'd,
94 dma: impl Peripheral<P = Dma> + 'd,
95 config: Config,
96 ) -> Self {
97 into_ref!(peri, d0, d1, d2, d3, sck, nss);
98
99 sck.set_as_af(sck.af_num(), AFType::OutputPushPull);
100 sck.set_speed(crate::gpio::Speed::VeryHigh);
101 nss.set_as_af(nss.af_num(), AFType::OutputPushPull);
102 nss.set_speed(crate::gpio::Speed::VeryHigh);
103 d0.set_as_af(d0.af_num(), AFType::OutputPushPull);
104 d0.set_speed(crate::gpio::Speed::VeryHigh);
105 d1.set_as_af(d1.af_num(), AFType::OutputPushPull);
106 d1.set_speed(crate::gpio::Speed::VeryHigh);
107 d2.set_as_af(d2.af_num(), AFType::OutputPushPull);
108 d2.set_speed(crate::gpio::Speed::VeryHigh);
109 d3.set_as_af(d3.af_num(), AFType::OutputPushPull);
110 d3.set_speed(crate::gpio::Speed::VeryHigh);
111
112 Self::new_inner(
113 peri,
114 Some(d0.map_into()),
115 Some(d1.map_into()),
116 Some(d2.map_into()),
117 Some(d3.map_into()),
118 Some(sck.map_into()),
119 Some(nss.map_into()),
120 dma,
121 config,
122 )
123 }
124
125 pub fn new_bk2(
126 peri: impl Peripheral<P = T> + 'd,
127 d0: impl Peripheral<P = impl BK2D0Pin<T>> + 'd,
128 d1: impl Peripheral<P = impl BK2D1Pin<T>> + 'd,
129 d2: impl Peripheral<P = impl BK2D2Pin<T>> + 'd,
130 d3: impl Peripheral<P = impl BK2D3Pin<T>> + 'd,
131 sck: impl Peripheral<P = impl SckPin<T>> + 'd,
132 nss: impl Peripheral<P = impl BK2NSSPin<T>> + 'd,
94 dma: impl Peripheral<P = Dma> + 'd, 133 dma: impl Peripheral<P = Dma> + 'd,
95 config: Config, 134 config: Config,
96 ) -> Self { 135 ) -> Self {
@@ -313,11 +352,17 @@ pub(crate) mod sealed {
313pub trait Instance: Peripheral<P = Self> + sealed::Instance + RccPeripheral {} 352pub trait Instance: Peripheral<P = Self> + sealed::Instance + RccPeripheral {}
314 353
315pin_trait!(SckPin, Instance); 354pin_trait!(SckPin, Instance);
316pin_trait!(D0Pin, Instance); 355pin_trait!(BK1D0Pin, Instance);
317pin_trait!(D1Pin, Instance); 356pin_trait!(BK1D1Pin, Instance);
318pin_trait!(D2Pin, Instance); 357pin_trait!(BK1D2Pin, Instance);
319pin_trait!(D3Pin, Instance); 358pin_trait!(BK1D3Pin, Instance);
320pin_trait!(NSSPin, Instance); 359pin_trait!(BK1NSSPin, Instance);
360
361pin_trait!(BK2D0Pin, Instance);
362pin_trait!(BK2D1Pin, Instance);
363pin_trait!(BK2D2Pin, Instance);
364pin_trait!(BK2D3Pin, Instance);
365pin_trait!(BK2NSSPin, Instance);
321 366
322dma_trait!(QuadDma, Instance); 367dma_trait!(QuadDma, Instance);
323 368