16
16
17
17
use core:: fmt;
18
18
use core:: marker:: PhantomData ;
19
+ use core:: ops:: Deref ;
19
20
20
21
use crate :: rcc;
21
22
use nb:: block;
@@ -192,34 +193,29 @@ impl<USART: Instance, WORD> Serial<USART, WORD> {
192
193
return Err ( config:: InvalidConfig ) ;
193
194
} ;
194
195
195
- unsafe { ( * USART :: ptr ( ) ) . brr . write ( |w| w. bits ( div) ) } ;
196
+ usart . brr . write ( |w| unsafe { w. bits ( div) } ) ;
196
197
197
198
// Reset other registers to disable advanced USART features
198
- unsafe { ( * USART :: ptr ( ) ) . cr2 . reset ( ) } ;
199
- unsafe { ( * USART :: ptr ( ) ) . cr3 . reset ( ) } ;
199
+ usart . cr2 . reset ( ) ;
200
+ usart . cr3 . reset ( ) ;
200
201
201
202
// Enable transmission and receiving
202
203
// and configure frame
203
- unsafe {
204
- ( * USART :: ptr ( ) ) . cr1 . write ( |w| {
205
- w. ue ( ) . set_bit ( ) ;
206
- w. over8 ( ) . bit ( over8) ;
207
- w. te ( ) . set_bit ( ) ;
208
- w. re ( ) . set_bit ( ) ;
209
- w. m ( ) . bit ( config. wordlength == WordLength :: DataBits9 ) ;
210
- w. pce ( ) . bit ( config. parity != Parity :: ParityNone ) ;
211
- w. ps ( ) . bit ( config. parity == Parity :: ParityOdd )
212
- } )
213
- } ;
204
+
205
+ usart. cr1 . write ( |w| {
206
+ w. ue ( ) . set_bit ( ) ;
207
+ w. over8 ( ) . bit ( over8) ;
208
+ w. te ( ) . set_bit ( ) ;
209
+ w. re ( ) . set_bit ( ) ;
210
+ w. m ( ) . bit ( config. wordlength == WordLength :: DataBits9 ) ;
211
+ w. pce ( ) . bit ( config. parity != Parity :: ParityNone ) ;
212
+ w. ps ( ) . bit ( config. parity == Parity :: ParityOdd )
213
+ } ) ;
214
214
215
215
match config. dma {
216
- DmaConfig :: Tx => unsafe { ( * USART :: ptr ( ) ) . cr3 . write ( |w| w. dmat ( ) . enabled ( ) ) } ,
217
- DmaConfig :: Rx => unsafe { ( * USART :: ptr ( ) ) . cr3 . write ( |w| w. dmar ( ) . enabled ( ) ) } ,
218
- DmaConfig :: TxRx => unsafe {
219
- ( * USART :: ptr ( ) )
220
- . cr3
221
- . write ( |w| w. dmar ( ) . enabled ( ) . dmat ( ) . enabled ( ) )
222
- } ,
216
+ DmaConfig :: Tx => usart. cr3 . write ( |w| w. dmat ( ) . enabled ( ) ) ,
217
+ DmaConfig :: Rx => usart. cr3 . write ( |w| w. dmar ( ) . enabled ( ) ) ,
218
+ DmaConfig :: TxRx => usart. cr3 . write ( |w| w. dmar ( ) . enabled ( ) . dmat ( ) . enabled ( ) ) ,
223
219
DmaConfig :: None => { }
224
220
}
225
221
@@ -246,7 +242,14 @@ impl<USART: Instance, WORD> Serial<USART, WORD> {
246
242
use crate :: pac:: usart1 as uart_base;
247
243
248
244
// Implemented by all USART instances
249
- pub trait Instance : crate :: Sealed + rcc:: Enable + rcc:: Reset + rcc:: BusClock + CommonPins {
245
+ pub trait Instance :
246
+ crate :: Sealed
247
+ + Deref < Target = uart_base:: RegisterBlock >
248
+ + rcc:: Enable
249
+ + rcc:: Reset
250
+ + rcc:: BusClock
251
+ + CommonPins
252
+ {
250
253
#[ doc( hidden) ]
251
254
fn ptr ( ) -> * const uart_base:: RegisterBlock ;
252
255
#[ doc( hidden) ]
0 commit comments