diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-10-12 14:29:23 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-12 14:29:23 +0000 |
| commit | debda2f52c320904755d89ef9c19fa6e54734fe8 (patch) | |
| tree | 20f7a2f1e27e0d30e530047e819b6efeaf2bd9cc /embassy-stm32/src/lib.rs | |
| parent | 66e399b5c61653f1f66cd3fd1592936e4085d6b5 (diff) | |
| parent | 97ca0e77bf6e6f36aae18cb57fbfa8e583597327 (diff) | |
Merge pull request #2045 from embassy-rs/stm32-cs-spam
Avoid creating many tiny critical sections in embassy-stm32::init
Diffstat (limited to 'embassy-stm32/src/lib.rs')
| -rw-r--r-- | embassy-stm32/src/lib.rs | 145 |
1 files changed, 73 insertions, 72 deletions
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs index b93e5ee87..372246f87 100644 --- a/embassy-stm32/src/lib.rs +++ b/embassy-stm32/src/lib.rs | |||
| @@ -155,81 +155,82 @@ impl Default for Config { | |||
| 155 | 155 | ||
| 156 | /// Initialize embassy. | 156 | /// Initialize embassy. |
| 157 | pub fn init(config: Config) -> Peripherals { | 157 | pub fn init(config: Config) -> Peripherals { |
| 158 | let p = Peripherals::take(); | 158 | critical_section::with(|cs| { |
| 159 | 159 | let p = Peripherals::take_with_cs(cs); | |
| 160 | #[cfg(dbgmcu)] | 160 | |
| 161 | if config.enable_debug_during_sleep { | 161 | #[cfg(dbgmcu)] |
| 162 | crate::pac::DBGMCU.cr().modify(|cr| { | 162 | if config.enable_debug_during_sleep { |
| 163 | #[cfg(any(dbgmcu_f0, dbgmcu_c0, dbgmcu_g0, dbgmcu_u5, dbgmcu_wba))] | 163 | crate::pac::DBGMCU.cr().modify(|cr| { |
| 164 | { | 164 | #[cfg(any(dbgmcu_f0, dbgmcu_c0, dbgmcu_g0, dbgmcu_u5, dbgmcu_wba))] |
| 165 | cr.set_dbg_stop(true); | 165 | { |
| 166 | cr.set_dbg_standby(true); | 166 | cr.set_dbg_stop(true); |
| 167 | } | 167 | cr.set_dbg_standby(true); |
| 168 | #[cfg(any( | 168 | } |
| 169 | dbgmcu_f1, dbgmcu_f2, dbgmcu_f3, dbgmcu_f4, dbgmcu_f7, dbgmcu_g4, dbgmcu_f7, dbgmcu_l0, dbgmcu_l1, | 169 | #[cfg(any( |
| 170 | dbgmcu_l4, dbgmcu_wb, dbgmcu_wl | 170 | dbgmcu_f1, dbgmcu_f2, dbgmcu_f3, dbgmcu_f4, dbgmcu_f7, dbgmcu_g4, dbgmcu_f7, dbgmcu_l0, dbgmcu_l1, |
| 171 | ))] | 171 | dbgmcu_l4, dbgmcu_wb, dbgmcu_wl |
| 172 | { | 172 | ))] |
| 173 | cr.set_dbg_sleep(true); | 173 | { |
| 174 | cr.set_dbg_stop(true); | 174 | cr.set_dbg_sleep(true); |
| 175 | cr.set_dbg_standby(true); | 175 | cr.set_dbg_stop(true); |
| 176 | } | 176 | cr.set_dbg_standby(true); |
| 177 | #[cfg(dbgmcu_h7)] | 177 | } |
| 178 | { | 178 | #[cfg(dbgmcu_h7)] |
| 179 | cr.set_d1dbgcken(true); | 179 | { |
| 180 | cr.set_d3dbgcken(true); | 180 | cr.set_d1dbgcken(true); |
| 181 | cr.set_dbgsleep_d1(true); | 181 | cr.set_d3dbgcken(true); |
| 182 | cr.set_dbgstby_d1(true); | 182 | cr.set_dbgsleep_d1(true); |
| 183 | cr.set_dbgstop_d1(true); | 183 | cr.set_dbgstby_d1(true); |
| 184 | } | 184 | cr.set_dbgstop_d1(true); |
| 185 | }); | 185 | } |
| 186 | } | 186 | }); |
| 187 | 187 | } | |
| 188 | #[cfg(not(any(stm32f1, stm32wb, stm32wl)))] | ||
| 189 | peripherals::SYSCFG::enable_and_reset(); | ||
| 190 | #[cfg(not(any(stm32h5, stm32h7, stm32wb, stm32wl)))] | ||
| 191 | peripherals::PWR::enable_and_reset(); | ||
| 192 | #[cfg(not(any(stm32f2, stm32f4, stm32f7, stm32l0, stm32h5, stm32h7)))] | ||
| 193 | peripherals::FLASH::enable_and_reset(); | ||
| 194 | |||
| 195 | unsafe { | ||
| 196 | #[cfg(feature = "_split-pins-enabled")] | ||
| 197 | crate::pac::SYSCFG.pmcr().modify(|pmcr| { | ||
| 198 | #[cfg(feature = "split-pa0")] | ||
| 199 | pmcr.set_pa0so(true); | ||
| 200 | #[cfg(feature = "split-pa1")] | ||
| 201 | pmcr.set_pa1so(true); | ||
| 202 | #[cfg(feature = "split-pc2")] | ||
| 203 | pmcr.set_pc2so(true); | ||
| 204 | #[cfg(feature = "split-pc3")] | ||
| 205 | pmcr.set_pc3so(true); | ||
| 206 | }); | ||
| 207 | |||
| 208 | gpio::init(); | ||
| 209 | dma::init( | ||
| 210 | #[cfg(bdma)] | ||
| 211 | config.bdma_interrupt_priority, | ||
| 212 | #[cfg(dma)] | ||
| 213 | config.dma_interrupt_priority, | ||
| 214 | #[cfg(gpdma)] | ||
| 215 | config.gpdma_interrupt_priority, | ||
| 216 | ); | ||
| 217 | #[cfg(feature = "exti")] | ||
| 218 | exti::init(); | ||
| 219 | |||
| 220 | rcc::init(config.rcc); | ||
| 221 | 188 | ||
| 222 | // must be after rcc init | 189 | #[cfg(not(any(stm32f1, stm32wb, stm32wl)))] |
| 223 | #[cfg(feature = "_time-driver")] | 190 | peripherals::SYSCFG::enable_and_reset_with_cs(cs); |
| 224 | time_driver::init(); | 191 | #[cfg(not(any(stm32h5, stm32h7, stm32wb, stm32wl)))] |
| 192 | peripherals::PWR::enable_and_reset_with_cs(cs); | ||
| 193 | #[cfg(not(any(stm32f2, stm32f4, stm32f7, stm32l0, stm32h5, stm32h7)))] | ||
| 194 | peripherals::FLASH::enable_and_reset_with_cs(cs); | ||
| 195 | |||
| 196 | unsafe { | ||
| 197 | #[cfg(feature = "_split-pins-enabled")] | ||
| 198 | crate::pac::SYSCFG.pmcr().modify(|pmcr| { | ||
| 199 | #[cfg(feature = "split-pa0")] | ||
| 200 | pmcr.set_pa0so(true); | ||
| 201 | #[cfg(feature = "split-pa1")] | ||
| 202 | pmcr.set_pa1so(true); | ||
| 203 | #[cfg(feature = "split-pc2")] | ||
| 204 | pmcr.set_pc2so(true); | ||
| 205 | #[cfg(feature = "split-pc3")] | ||
| 206 | pmcr.set_pc3so(true); | ||
| 207 | }); | ||
| 225 | 208 | ||
| 226 | #[cfg(feature = "low-power")] | 209 | gpio::init(cs); |
| 227 | while !crate::rcc::low_power_ready() { | 210 | dma::init( |
| 228 | critical_section::with(|cs| { | 211 | cs, |
| 212 | #[cfg(bdma)] | ||
| 213 | config.bdma_interrupt_priority, | ||
| 214 | #[cfg(dma)] | ||
| 215 | config.dma_interrupt_priority, | ||
| 216 | #[cfg(gpdma)] | ||
| 217 | config.gpdma_interrupt_priority, | ||
| 218 | ); | ||
| 219 | #[cfg(feature = "exti")] | ||
| 220 | exti::init(cs); | ||
| 221 | |||
| 222 | rcc::init(config.rcc); | ||
| 223 | |||
| 224 | // must be after rcc init | ||
| 225 | #[cfg(feature = "_time-driver")] | ||
| 226 | time_driver::init(cs); | ||
| 227 | |||
| 228 | #[cfg(feature = "low-power")] | ||
| 229 | while !crate::rcc::low_power_ready() { | ||
| 229 | crate::rcc::clock_refcount_sub(cs); | 230 | crate::rcc::clock_refcount_sub(cs); |
| 230 | }); | 231 | } |
| 231 | } | 232 | } |
| 232 | } | ||
| 233 | 233 | ||
| 234 | p | 234 | p |
| 235 | }) | ||
| 235 | } | 236 | } |
