aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Vahter <[email protected]>2024-07-02 14:23:44 +0300
committerAndres Vahter <[email protected]>2024-07-02 17:07:18 +0300
commitc120efad5bbd7f95615e913100874d27c34cb389 (patch)
tree534fc350f00b09532532febe300098cc26c57f29
parent5e2fd8623a01e8c026ba2057dd017b4d4bca3acb (diff)
stm32 adc read_async: add asserts for buf len
-rw-r--r--embassy-stm32/src/adc/v3.rs10
-rw-r--r--embassy-stm32/src/adc/v4.rs9
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 };