diff options
| author | JuliDi <[email protected]> | 2023-08-31 10:53:51 +0200 |
|---|---|---|
| committer | JuliDi <[email protected]> | 2023-10-02 09:30:57 +0200 |
| commit | 729338875ccb1acd9f991dd2fec47ed33a66e415 (patch) | |
| tree | 3d0239ca4a85dc4ce89bfa1204a47438dacad785 | |
| parent | a1036e111eddf82462ce3f6e50923bded89af450 (diff) | |
support QSPI BK2
| -rw-r--r-- | embassy-stm32/build.rs | 16 | ||||
| -rw-r--r-- | embassy-stm32/src/qspi/mod.rs | 67 |
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 | ||
| 85 | impl<'d, T: Instance, Dma> Qspi<'d, T, Dma> { | 85 | impl<'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 { | |||
| 313 | pub trait Instance: Peripheral<P = Self> + sealed::Instance + RccPeripheral {} | 352 | pub trait Instance: Peripheral<P = Self> + sealed::Instance + RccPeripheral {} |
| 314 | 353 | ||
| 315 | pin_trait!(SckPin, Instance); | 354 | pin_trait!(SckPin, Instance); |
| 316 | pin_trait!(D0Pin, Instance); | 355 | pin_trait!(BK1D0Pin, Instance); |
| 317 | pin_trait!(D1Pin, Instance); | 356 | pin_trait!(BK1D1Pin, Instance); |
| 318 | pin_trait!(D2Pin, Instance); | 357 | pin_trait!(BK1D2Pin, Instance); |
| 319 | pin_trait!(D3Pin, Instance); | 358 | pin_trait!(BK1D3Pin, Instance); |
| 320 | pin_trait!(NSSPin, Instance); | 359 | pin_trait!(BK1NSSPin, Instance); |
| 360 | |||
| 361 | pin_trait!(BK2D0Pin, Instance); | ||
| 362 | pin_trait!(BK2D1Pin, Instance); | ||
| 363 | pin_trait!(BK2D2Pin, Instance); | ||
| 364 | pin_trait!(BK2D3Pin, Instance); | ||
| 365 | pin_trait!(BK2NSSPin, Instance); | ||
| 321 | 366 | ||
| 322 | dma_trait!(QuadDma, Instance); | 367 | dma_trait!(QuadDma, Instance); |
| 323 | 368 | ||
