@@ -3,7 +3,7 @@ use core::sync::atomic::{fence, Ordering};
33
44use 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 } ;
77use crate :: gpio:: sealed:: { AFType , Pin as _} ;
88use crate :: gpio:: AnyPin ;
99use 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