@@ -359,20 +359,14 @@ pub struct Spi<SPI, PINS> {
359
359
360
360
// Implemented by all SPI instances
361
361
pub trait Instance :
362
- crate :: Sealed + Deref < Target = spi1:: RegisterBlock > + rcc:: Enable + rcc:: Reset
362
+ crate :: Sealed + Deref < Target = spi1:: RegisterBlock > + rcc:: Enable + rcc:: Reset + rcc :: GetBusFreq
363
363
{
364
- #[ doc( hidden) ]
365
- fn pclk_freq ( clocks : & Clocks ) -> Hertz ;
366
364
}
367
365
368
366
// Implemented by all SPI instances
369
367
macro_rules! spi {
370
- ( $SPI: ident: ( $spi: ident, $pclk: ident) ) => {
371
- impl Instance for $SPI {
372
- fn pclk_freq( clocks: & Clocks ) -> Hertz {
373
- clocks. $pclk( )
374
- }
375
- }
368
+ ( $SPI: ident: ( $spi: ident) ) => {
369
+ impl Instance for $SPI { }
376
370
377
371
impl <SCK , MISO , MOSI > Spi <$SPI, ( SCK , MISO , MOSI ) >
378
372
where
@@ -394,20 +388,20 @@ macro_rules! spi {
394
388
} ;
395
389
}
396
390
397
- spi ! { SPI1 : ( spi1, pclk2 ) }
398
- spi ! { SPI2 : ( spi2, pclk1 ) }
391
+ spi ! { SPI1 : ( spi1) }
392
+ spi ! { SPI2 : ( spi2) }
399
393
400
394
#[ cfg( feature = "spi3" ) ]
401
- spi ! { SPI3 : ( spi3, pclk1 ) }
395
+ spi ! { SPI3 : ( spi3) }
402
396
403
397
#[ cfg( feature = "spi4" ) ]
404
- spi ! { SPI4 : ( spi4, pclk2 ) }
398
+ spi ! { SPI4 : ( spi4) }
405
399
406
400
#[ cfg( feature = "spi5" ) ]
407
- spi ! { SPI5 : ( spi5, pclk2 ) }
401
+ spi ! { SPI5 : ( spi5) }
408
402
409
403
#[ cfg( feature = "spi6" ) ]
410
- spi ! { SPI6 : ( spi6, pclk2 ) }
404
+ spi ! { SPI6 : ( spi6) }
411
405
412
406
impl < SPI , SCK , MISO , MOSI > Spi < SPI , ( SCK , MISO , MOSI ) >
413
407
where
@@ -424,7 +418,7 @@ where
424
418
SPI :: reset ( rcc) ;
425
419
}
426
420
427
- Spi { spi, pins } . init ( mode, freq, SPI :: pclk_freq ( & clocks) )
421
+ Spi { spi, pins } . init ( mode, freq, SPI :: get_frequency ( & clocks) )
428
422
}
429
423
}
430
424
@@ -448,34 +442,34 @@ where
448
442
_ => 0b111 ,
449
443
} ;
450
444
451
- // mstr: master configuration
452
- // lsbfirst: MSB first
453
- // ssm: enable software slave management (NSS pin free for other uses)
454
- // ssi: set nss high = master mode
455
- // dff: 8 bit frames
456
- // bidimode: 2-line unidirectional
457
- // spe: enable the SPI bus
458
445
self . spi . cr1 . write ( |w| {
459
446
w. cpha ( )
460
447
. bit ( mode. phase == Phase :: CaptureOnSecondTransition )
461
448
. cpol ( )
462
449
. bit ( mode. polarity == Polarity :: IdleHigh )
450
+ // mstr: master configuration
463
451
. mstr ( )
464
452
. set_bit ( )
465
453
. br ( )
466
454
. bits ( br)
455
+ // lsbfirst: MSB first
467
456
. lsbfirst ( )
468
457
. clear_bit ( )
458
+ // ssm: enable software slave management (NSS pin free for other uses)
469
459
. ssm ( )
470
460
. set_bit ( )
461
+ // ssi: set nss high = master mode
471
462
. ssi ( )
472
463
. set_bit ( )
473
464
. rxonly ( )
474
465
. clear_bit ( )
466
+ // dff: 8 bit frames
475
467
. dff ( )
476
468
. clear_bit ( )
469
+ // bidimode: 2-line unidirectional
477
470
. bidimode ( )
478
471
. clear_bit ( )
472
+ // spe: enable the SPI bus
479
473
. spe ( )
480
474
. set_bit ( )
481
475
} ) ;
@@ -551,11 +545,11 @@ where
551
545
let sr = self . spi . sr . read ( ) ;
552
546
553
547
Err ( if sr. ovr ( ) . bit_is_set ( ) {
554
- nb :: Error :: Other ( Error :: Overrun )
548
+ Error :: Overrun . into ( )
555
549
} else if sr. modf ( ) . bit_is_set ( ) {
556
- nb :: Error :: Other ( Error :: ModeFault )
550
+ Error :: ModeFault . into ( )
557
551
} else if sr. crcerr ( ) . bit_is_set ( ) {
558
- nb :: Error :: Other ( Error :: Crc )
552
+ Error :: Crc . into ( )
559
553
} else if sr. rxne ( ) . bit_is_set ( ) {
560
554
// NOTE(read_volatile) read only 1 byte (the svd2rust API only allows
561
555
// reading a half-word)
@@ -571,18 +565,18 @@ where
571
565
Err ( if sr. ovr ( ) . bit_is_set ( ) {
572
566
// Read from the DR to clear the OVR bit
573
567
let _ = self . spi . dr . read ( ) ;
574
- nb :: Error :: Other ( Error :: Overrun )
568
+ Error :: Overrun . into ( )
575
569
} else if sr. modf ( ) . bit_is_set ( ) {
576
570
// Write to CR1 to clear MODF
577
571
self . spi . cr1 . modify ( |_r, w| w) ;
578
- nb :: Error :: Other ( Error :: ModeFault )
572
+ Error :: ModeFault . into ( )
579
573
} else if sr. crcerr ( ) . bit_is_set ( ) {
580
574
// Clear the CRCERR bit
581
575
self . spi . sr . modify ( |_r, w| {
582
576
w. crcerr ( ) . clear_bit ( ) ;
583
577
w
584
578
} ) ;
585
- nb :: Error :: Other ( Error :: Crc )
579
+ Error :: Crc . into ( )
586
580
} else if sr. txe ( ) . bit_is_set ( ) {
587
581
// NOTE(write_volatile) see note above
588
582
unsafe { ptr:: write_volatile ( & self . spi . dr as * const _ as * mut u8 , byte) }
0 commit comments