@@ -3,7 +3,7 @@ use core::sync::atomic::{fence, Ordering};
3
3
4
4
use embassy_hal_internal:: into_ref;
5
5
6
- use crate :: dma:: { ringbuffer , word, Channel , NoDma , TransferOptions , WritableRingBuffer } ;
6
+ use crate :: dma:: { word, Channel , NoDma , TransferOptions , WritableRingBuffer } ;
7
7
use crate :: gpio:: sealed:: { AFType , Pin as _} ;
8
8
use crate :: gpio:: AnyPin ;
9
9
use crate :: pac:: spi:: vals;
@@ -196,7 +196,7 @@ impl<'d, T: Instance, C: Channel, W: word::Word> I2S<'d, T, C, W> {
196
196
let spi = Spi :: new_internal ( peri, NoDma , NoDma , spi_cfg) ;
197
197
198
198
#[ 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();
200
200
201
201
#[ cfg( stm32f410) ]
202
202
let pclk = T :: frequency ( ) ;
@@ -395,23 +395,22 @@ impl<'d, T: Instance, C: Channel, W: word::Word> I2S<'d, T, C, W> {
395
395
// }
396
396
397
397
/// 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 )
401
400
}
402
401
403
402
/// Start the I2S driver.
404
403
pub fn start ( & mut self ) {
404
+ T :: REGS . cr1 ( ) . modify ( |w| {
405
+ w. set_spe ( true ) ;
406
+ } ) ;
407
+
405
408
self . ring_buffer . start ( ) ;
406
409
407
410
#[ cfg( not( any( spi_v3, spi_v4, spi_v5) ) ) ]
408
411
T :: REGS . cr2 ( ) . modify ( |reg| {
409
412
reg. set_txdmaen ( true ) ;
410
413
} ) ;
411
-
412
- T :: REGS . cr1 ( ) . modify ( |w| {
413
- w. set_spe ( true ) ;
414
- } ) ;
415
414
}
416
415
417
416
/// Stop the I2S driver.
0 commit comments