diff options
| author | Andres Vahter <[email protected]> | 2024-07-02 14:23:44 +0300 |
|---|---|---|
| committer | Andres Vahter <[email protected]> | 2024-07-02 17:07:18 +0300 |
| commit | c120efad5bbd7f95615e913100874d27c34cb389 (patch) | |
| tree | 534fc350f00b09532532febe300098cc26c57f29 | |
| parent | 5e2fd8623a01e8c026ba2057dd017b4d4bca3acb (diff) | |
stm32 adc read_async: add asserts for buf len
| -rw-r--r-- | embassy-stm32/src/adc/v3.rs | 10 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v4.rs | 9 |
2 files changed, 13 insertions, 6 deletions
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs index 559751555..afdfc4e4c 100644 --- a/embassy-stm32/src/adc/v3.rs +++ b/embassy-stm32/src/adc/v3.rs | |||
| @@ -262,10 +262,13 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 262 | &mut self, | 262 | &mut self, |
| 263 | rx_dma: &mut impl RxDma<T>, | 263 | rx_dma: &mut impl RxDma<T>, |
| 264 | sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, | 264 | sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, |
| 265 | data: &mut [u16], | 265 | readings: &mut [u16], |
| 266 | ) { | 266 | ) { |
| 267 | assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); | 267 | assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); |
| 268 | 268 | assert!( | |
| 269 | sequence.len() == readings.len(), | ||
| 270 | "Sequence length must be equal to readings length" | ||
| 271 | ); | ||
| 269 | assert!( | 272 | assert!( |
| 270 | sequence.len() <= 16, | 273 | sequence.len() <= 16, |
| 271 | "Asynchronous read sequence cannot be more than 16 in length" | 274 | "Asynchronous read sequence cannot be more than 16 in length" |
| @@ -357,7 +360,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 357 | rx_dma, | 360 | rx_dma, |
| 358 | request, | 361 | request, |
| 359 | T::regs().dr().as_ptr() as *mut u16, | 362 | T::regs().dr().as_ptr() as *mut u16, |
| 360 | data, | 363 | readings, |
| 361 | Default::default(), | 364 | Default::default(), |
| 362 | ) | 365 | ) |
| 363 | }; | 366 | }; |
| @@ -431,6 +434,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 431 | fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { | 434 | fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { |
| 432 | cfg_if! { | 435 | cfg_if! { |
| 433 | if #[cfg(any(adc_g0, adc_u0))] { | 436 | if #[cfg(any(adc_g0, adc_u0))] { |
| 437 | // On G0 and U6 all channels use the same sampling time. | ||
| 434 | T::regs().smpr().modify(|reg| reg.set_smp1(sample_time.into())); | 438 | T::regs().smpr().modify(|reg| reg.set_smp1(sample_time.into())); |
| 435 | } else if #[cfg(adc_h5)] { | 439 | } else if #[cfg(adc_h5)] { |
| 436 | match _ch { | 440 | match _ch { |
diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs index f4b62d80e..4261b9b14 100644 --- a/embassy-stm32/src/adc/v4.rs +++ b/embassy-stm32/src/adc/v4.rs | |||
| @@ -290,10 +290,13 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 290 | &mut self, | 290 | &mut self, |
| 291 | rx_dma: &mut impl RxDma<T>, | 291 | rx_dma: &mut impl RxDma<T>, |
| 292 | sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, | 292 | sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, |
| 293 | data: &mut [u16], | 293 | readings: &mut [u16], |
| 294 | ) { | 294 | ) { |
| 295 | assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); | 295 | assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); |
| 296 | 296 | assert!( | |
| 297 | sequence.len() == readings.len(), | ||
| 298 | "Sequence length must be equal to readings length" | ||
| 299 | ); | ||
| 297 | assert!( | 300 | assert!( |
| 298 | sequence.len() <= 16, | 301 | sequence.len() <= 16, |
| 299 | "Asynchronous read sequence cannot be more than 16 in length" | 302 | "Asynchronous read sequence cannot be more than 16 in length" |
| @@ -352,7 +355,7 @@ impl<'d, T: Instance> Adc<'d, T> { | |||
| 352 | rx_dma, | 355 | rx_dma, |
| 353 | request, | 356 | request, |
| 354 | T::regs().dr().as_ptr() as *mut u16, | 357 | T::regs().dr().as_ptr() as *mut u16, |
| 355 | data, | 358 | readings, |
| 356 | Default::default(), | 359 | Default::default(), |
| 357 | ) | 360 | ) |
| 358 | }; | 361 | }; |
