@@ -134,30 +134,15 @@ macro_rules! hal {
134134 MOSI : MosiPin <$SPIX>,
135135 {
136136 // enable or reset $SPIX
137- apb2. enr( ) . modify( |_, w| w. $spiXen( ) . set_bit ( ) ) ;
138- apb2. rstr( ) . modify( |_, w| w. $spiXrst( ) . set_bit ( ) ) ;
137+ apb2. enr( ) . modify( |_, w| w. $spiXen( ) . enabled ( ) ) ;
138+ apb2. rstr( ) . modify( |_, w| w. $spiXrst( ) . reset ( ) ) ;
139139 apb2. rstr( ) . modify( |_, w| w. $spiXrst( ) . clear_bit( ) ) ;
140140
141141 // FRXTH: RXNE event is generated if the FIFO level is greater than or equal to
142142 // 8-bit
143143 // DS: 8-bit data size
144144 // SSOE: Slave Select output disabled
145- spi. cr2
146- . write( |w| unsafe {
147- w. frxth( ) . set_bit( ) . ds( ) . bits( 0b111 ) . ssoe( ) . clear_bit( )
148- } ) ;
149-
150- let br = match clocks. $pclkX( ) . 0 / freq. into( ) . 0 {
151- 0 => unreachable!( ) ,
152- 1 ..=2 => 0b000 ,
153- 3 ..=5 => 0b001 ,
154- 6 ..=11 => 0b010 ,
155- 12 ..=23 => 0b011 ,
156- 24 ..=39 => 0b100 ,
157- 40 ..=95 => 0b101 ,
158- 96 ..=191 => 0b110 ,
159- _ => 0b111 ,
160- } ;
145+ spi. cr2. write( |w| w. frxth( ) . quarter( ) . ds( ) . eight_bit( ) . ssoe( ) . disabled( ) ) ;
161146
162147 // CPHA: phase
163148 // CPOL: polarity
@@ -170,26 +155,42 @@ macro_rules! hal {
170155 // CRCEN: hardware CRC calculation disabled
171156 // BIDIMODE: 2 line unidirectional (full duplex)
172157 spi. cr1. write( |w| {
173- w. cpha( )
174- . bit( mode. phase == Phase :: CaptureOnSecondTransition )
175- . cpol( )
176- . bit( mode. polarity == Polarity :: IdleHigh )
177- . mstr( )
178- . set_bit( )
179- . br( )
180- . bits( br)
181- . spe( )
182- . set_bit( )
158+ w. mstr( ) . master( ) ;
159+
160+ match mode. phase {
161+ Phase :: CaptureOnFirstTransition => w. cpha( ) . first_edge( ) ,
162+ Phase :: CaptureOnSecondTransition => w. cpha( ) . second_edge( ) ,
163+ } ;
164+
165+ match mode. polarity {
166+ Polarity :: IdleLow => w. cpol( ) . idle_low( ) ,
167+ Polarity :: IdleHigh => w. cpol( ) . idle_high( ) ,
168+ } ;
169+
170+ match clocks. $pclkX( ) . 0 / freq. into( ) . 0 {
171+ 0 => unreachable!( ) ,
172+ 1 ..=2 => w. br( ) . div2( ) ,
173+ 3 ..=5 => w. br( ) . div4( ) ,
174+ 6 ..=11 => w. br( ) . div8( ) ,
175+ 12 ..=23 => w. br( ) . div16( ) ,
176+ 24 ..=39 => w. br( ) . div32( ) ,
177+ 40 ..=95 => w. br( ) . div64( ) ,
178+ 96 ..=191 => w. br( ) . div128( ) ,
179+ _ => w. br( ) . div256( ) ,
180+ } ;
181+
182+ w. spe( )
183+ . enabled( )
184+ . lsbfirst( )
183185 . lsbfirst( )
184- . clear_bit( )
185186 . ssi( )
186- . set_bit ( )
187+ . slave_not_selected ( )
187188 . ssm( )
188- . set_bit ( )
189+ . enabled ( )
189190 . crcen( )
190- . clear_bit ( )
191+ . disabled ( )
191192 . bidimode( )
192- . clear_bit ( )
193+ . unidirectional ( )
193194 } ) ;
194195
195196 Spi { spi, pins }
@@ -207,13 +208,13 @@ macro_rules! hal {
207208 fn read( & mut self ) -> nb:: Result <u8 , Error > {
208209 let sr = self . spi. sr. read( ) ;
209210
210- Err ( if sr. ovr( ) . bit_is_set ( ) {
211+ Err ( if sr. ovr( ) . is_overrun ( ) {
211212 nb:: Error :: Other ( Error :: Overrun )
212- } else if sr. modf( ) . bit_is_set ( ) {
213+ } else if sr. modf( ) . is_fault ( ) {
213214 nb:: Error :: Other ( Error :: ModeFault )
214- } else if sr. crcerr( ) . bit_is_set ( ) {
215+ } else if sr. crcerr( ) . is_no_match ( ) {
215216 nb:: Error :: Other ( Error :: Crc )
216- } else if sr. rxne( ) . bit_is_set ( ) {
217+ } else if sr. rxne( ) . is_not_empty ( ) {
217218 // NOTE(read_volatile) read only 1 byte (the svd2rust API only allows
218219 // reading a half-word)
219220 return Ok ( unsafe {
@@ -227,13 +228,13 @@ macro_rules! hal {
227228 fn send( & mut self , byte: u8 ) -> nb:: Result <( ) , Error > {
228229 let sr = self . spi. sr. read( ) ;
229230
230- Err ( if sr. ovr( ) . bit_is_set ( ) {
231+ Err ( if sr. ovr( ) . is_overrun ( ) {
231232 nb:: Error :: Other ( Error :: Overrun )
232- } else if sr. modf( ) . bit_is_set ( ) {
233+ } else if sr. modf( ) . is_fault ( ) {
233234 nb:: Error :: Other ( Error :: ModeFault )
234- } else if sr. crcerr( ) . bit_is_set ( ) {
235+ } else if sr. crcerr( ) . is_no_match ( ) {
235236 nb:: Error :: Other ( Error :: Crc )
236- } else if sr. txe( ) . bit_is_set ( ) {
237+ } else if sr. txe( ) . is_empty ( ) {
237238 // NOTE(write_volatile) see note above
238239 unsafe { ptr:: write_volatile( & self . spi. dr as * const _ as * mut u8 , byte) }
239240 return Ok ( ( ) ) ;
0 commit comments