@@ -95,38 +95,33 @@ fn serial3_panicinfo_dump(_cs: &CriticalSection, info: &PanicInfo) {
95
95
let brr = pclk1. 0 / baud_rate. 0 ;
96
96
usart. brr . write ( |w| unsafe { w. bits ( brr) } ) ;
97
97
98
- // enable USART, tx, rx
98
+ // enable USART, tx
99
99
usart. cr1 . write ( |w| w. ue ( ) . set_bit ( ) . te ( ) . set_bit ( ) ) ;
100
100
101
101
serial_println ! ( "\n !!! WARNING !!!\n {}" , info) ;
102
102
}
103
103
104
- fn putchar ( byte : u8 ) -> Result < ( ) , ( ) > {
105
- let isr = unsafe { ( * stm32f7x7:: USART3 :: ptr ( ) ) . isr . read ( ) } ;
104
+ /// Blocking putchar function to be used by the panic handler only
105
+ fn putchar ( byte : u8 ) {
106
+ let mut isr = unsafe { ( * stm32f7x7:: USART3 :: ptr ( ) ) . isr . read ( ) } ;
106
107
107
- if isr. txe ( ) . bit_is_set ( ) && isr. tc ( ) . bit_is_set ( ) {
108
- unsafe { ptr:: write_volatile ( & ( * stm32f7x7:: USART3 :: ptr ( ) ) . tdr as * const _ as * mut _ , byte) }
109
- Ok ( ( ) )
110
- } else {
111
- Err ( ( ) )
112
- }
113
- }
114
-
115
- fn flush ( ) -> Result < ( ) , ( ) > {
116
- let isr = unsafe { ( * stm32f7x7:: USART3 :: ptr ( ) ) . isr . read ( ) } ;
108
+ if isr. txe ( ) . bit_is_set ( ) {
109
+ unsafe {
110
+ ptr:: write_volatile ( & ( * stm32f7x7:: USART3 :: ptr ( ) ) . tdr as * const _ as * mut _ , byte) ;
111
+ }
117
112
118
- if isr. tc ( ) . bit_is_set ( ) {
119
- Ok ( ( ) )
120
- } else {
121
- Err ( ( ) )
113
+ // wait for completion
114
+ while {
115
+ isr = unsafe { ( * stm32f7x7:: USART3 :: ptr ( ) ) . isr . read ( ) } ;
116
+ isr. tc ( ) . bit_is_clear ( )
117
+ } { }
122
118
}
123
119
}
124
120
125
121
impl :: core:: fmt:: Write for SerialOutputHandle {
126
122
fn write_str ( & mut self , s : & str ) -> :: core:: fmt:: Result {
127
123
for & b in s. as_bytes ( ) {
128
- while putchar ( b) . is_err ( ) { }
129
- while flush ( ) . is_err ( ) { }
124
+ putchar ( b) ;
130
125
}
131
126
Ok ( ( ) )
132
127
}
0 commit comments