@@ -67,7 +67,7 @@ pub type NoMosi = NoPin;
6767#[ enumflags2:: bitflags]
6868#[ cfg_attr( feature = "defmt" , derive( defmt:: Format ) ) ]
6969#[ derive( Debug , Eq , PartialEq , Copy , Clone ) ]
70- #[ repr( u32 ) ]
70+ #[ repr( u16 ) ]
7171pub enum Event {
7272 /// An error occurred.
7373 ///
@@ -90,7 +90,7 @@ pub enum Event {
9090#[ enumflags2:: bitflags]
9191#[ cfg_attr( feature = "defmt" , derive( defmt:: Format ) ) ]
9292#[ derive( Debug , Eq , PartialEq , Copy , Clone ) ]
93- #[ repr( u32 ) ]
93+ #[ repr( u16 ) ]
9494pub enum Flag {
9595 /// Receive buffer not empty
9696 RxNotEmpty = 1 << 0 ,
@@ -127,14 +127,30 @@ pub const TransferModeBidi: bool = true;
127127
128128pub trait FrameSize : Copy + Default {
129129 const DFF : bool ;
130+ #[ doc( hidden) ]
131+ fn read_data ( spi : & spi1:: RegisterBlock ) -> Self ;
132+ #[ doc( hidden) ]
133+ fn write_data ( self , spi : & spi1:: RegisterBlock ) ;
130134}
131135
132136impl FrameSize for u8 {
133137 const DFF : bool = false ;
138+ fn read_data ( spi : & spi1:: RegisterBlock ) -> Self {
139+ spi. dr8 ( ) . read ( ) . dr ( ) . bits ( )
140+ }
141+ fn write_data ( self , spi : & spi1:: RegisterBlock ) {
142+ spi. dr8 ( ) . write ( |w| w. dr ( ) . set ( self ) )
143+ }
134144}
135145
136146impl FrameSize for u16 {
137147 const DFF : bool = true ;
148+ fn read_data ( spi : & spi1:: RegisterBlock ) -> Self {
149+ spi. dr ( ) . read ( ) . dr ( ) . bits ( )
150+ }
151+ fn write_data ( self , spi : & spi1:: RegisterBlock ) {
152+ spi. dr ( ) . write ( |w| w. dr ( ) . set ( self ) )
153+ }
138154}
139155
140156/// The bit format to send the data in
@@ -747,16 +763,11 @@ impl<SPI: Instance> Inner<SPI> {
747763 }
748764
749765 fn read_data_reg < W : FrameSize > ( & mut self ) -> W {
750- // NOTE(read_volatile) read only 1 byte (the svd2rust API only allows
751- // reading a half-word)
752- unsafe { ( * ( self . spi . dr ( ) as * const pac:: spi1:: DR ) . cast :: < vcell:: VolatileCell < W > > ( ) ) . get ( ) }
766+ W :: read_data ( & self . spi )
753767 }
754768
755769 fn write_data_reg < W : FrameSize > ( & mut self , data : W ) {
756- // NOTE(write_volatile) see note above
757- unsafe {
758- ( * ( self . spi . dr ( ) as * const pac:: spi1:: DR ) . cast :: < vcell:: VolatileCell < W > > ( ) ) . set ( data)
759- }
770+ data. write_data ( & self . spi )
760771 }
761772
762773 #[ inline( always) ]
0 commit comments