Skip to content

Commit cc6affd

Browse files
committed
more debugging
1 parent 1eadac4 commit cc6affd

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

embassy-stm32/src/dma/ringbuffer.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,16 @@ impl<'a, W: Word> WritableDmaRingBuffer<'a, W> {
313313
// Confirm that the DMA is not inside data we could have written
314314
let (pos, complete_count) = critical_section::with(|_| (self.pos(dma), dma.get_complete_count()));
315315
if (pos >= self.end && pos < start) || (complete_count > 0 && pos >= start) || complete_count > 1 {
316+
// defmt::error!(
317+
// "OR1 P{}, S{} E{} C{} L{} cc{}",
318+
// pos,
319+
// start,
320+
// self.end,
321+
// self.cap(),
322+
// len,
323+
// complete_count
324+
// );
325+
self.end = (self.end + len) % self.cap();
316326
Err(OverrunError)
317327
} else {
318328
self.end = (self.end + len) % self.cap();
@@ -333,6 +343,8 @@ impl<'a, W: Word> WritableDmaRingBuffer<'a, W> {
333343
// Confirm that the DMA is not inside data we could have written
334344
let pos = self.pos(dma);
335345
if pos > self.end || pos < start || dma.get_complete_count() > 1 {
346+
// defmt::error!("OR2 P{}, S{} E{} C{} L{}", pos, start, self.end, self.cap(), len);
347+
self.end = (self.end + len) % self.cap();
336348
Err(OverrunError)
337349
} else {
338350
self.end = (self.end + len) % self.cap();
@@ -351,6 +363,7 @@ impl<'a, W: Word> WritableDmaRingBuffer<'a, W> {
351363
// Confirm that the DMA is not inside data we could have written
352364
let pos = self.pos(dma);
353365
if pos > self.end || pos < start || dma.reset_complete_count() > 1 {
366+
// defmt::error!("OR3 P{}, S{} E{} C{}", pos, start, self.end, self.cap());
354367
Err(OverrunError)
355368
} else {
356369
self.end = head;

embassy-stm32/src/i2s.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::sync::atomic::{fence, Ordering};
33

44
use embassy_hal_internal::into_ref;
55

6-
use crate::dma::{ringbuffer, word, Channel, NoDma, TransferOptions, WritableRingBuffer};
6+
use crate::dma::{word, Channel, NoDma, TransferOptions, WritableRingBuffer};
77
use crate::gpio::sealed::{AFType, Pin as _};
88
use crate::gpio::AnyPin;
99
use crate::pac::spi::vals;
@@ -196,7 +196,7 @@ impl<'d, T: Instance, C: Channel, W: word::Word> I2S<'d, T, C, W> {
196196
let spi = Spi::new_internal(peri, NoDma, NoDma, spi_cfg);
197197

198198
#[cfg(all(rcc_f4, not(stm32f410)))]
199-
let pclk = Hertz(38_400_000); // unsafe { get_freqs() }.plli2s1_r.unwrap();
199+
let pclk = Hertz(2 * 38_400_000); // unsafe { get_freqs() }.plli2s1_r.unwrap();
200200

201201
#[cfg(stm32f410)]
202202
let pclk = T::frequency();
@@ -395,23 +395,22 @@ impl<'d, T: Instance, C: Channel, W: word::Word> I2S<'d, T, C, W> {
395395
// }
396396

397397
/// Write audio data.
398-
pub async fn write(&mut self, data: &[W]) -> Result<(), Error> {
399-
self.ring_buffer.write_exact(data).await.map_err(|_| Error::Overrun)?;
400-
Ok(())
398+
pub async fn write(&mut self, data: &[W]) -> Result<usize, Error> {
399+
self.ring_buffer.write_exact(data).await.map_err(|_| Error::Overrun)
401400
}
402401

403402
/// Start the I2S driver.
404403
pub fn start(&mut self) {
404+
T::REGS.cr1().modify(|w| {
405+
w.set_spe(true);
406+
});
407+
405408
self.ring_buffer.start();
406409

407410
#[cfg(not(any(spi_v3, spi_v4, spi_v5)))]
408411
T::REGS.cr2().modify(|reg| {
409412
reg.set_txdmaen(true);
410413
});
411-
412-
T::REGS.cr1().modify(|w| {
413-
w.set_spe(true);
414-
});
415414
}
416415

417416
/// Stop the I2S driver.

0 commit comments

Comments
 (0)