@@ -127,39 +127,21 @@ void ICACHE_RAM_ATTR uart_isr(void * arg)
127
127
{
128
128
uart_t * uart = (uart_t * )arg ;
129
129
if (uart == NULL || !uart -> rx_enabled ) {
130
- USIC (uart -> uart_nr ) = 0xffff ;
130
+ USIC (uart -> uart_nr ) = USIS ( uart -> uart_nr ) ;
131
131
ETS_UART_INTR_DISABLE ();
132
132
return ;
133
133
}
134
-
135
- uint32_t int_status = USIS (uart -> uart_nr );
136
-
137
- if (int_status & (1 << UIFR )) {
138
- USIC (uart -> uart_nr ) = (1 << UIFR );//clear any frame error
139
- }
140
-
141
- if (int_status & (1 << UIFF ) || int_status & (1 << UITO )){
142
- ETS_UART_INTR_DISABLE ();
143
- while (((USS (uart -> uart_nr ) >> USRXC ) & 0x7F ) != 0 ){
134
+ if (USIS (uart -> uart_nr ) & ((1 << UIFF ) | (1 << UITO ))){
135
+ while ((USS (uart -> uart_nr ) >> USRXC ) & 0x7F ){
144
136
uint8_t data = USF (uart -> uart_nr );
145
137
size_t nextPos = (uart -> rx_buffer -> wpos + 1 ) % uart -> rx_buffer -> size ;
146
138
if (nextPos != uart -> rx_buffer -> rpos ) {
147
139
uart -> rx_buffer -> buffer [uart -> rx_buffer -> wpos ] = data ;
148
140
uart -> rx_buffer -> wpos = nextPos ;
149
- } else {
150
- //rx buffer OverFlow
151
- //maybe stop the loop and try later?
152
141
}
153
142
}
154
- int_status = USIS (uart -> uart_nr );
155
- if (int_status & (1 << UIFF )) {
156
- USIC (uart -> uart_nr ) = (1 << UIFF );//clear any FIFO FULL error
157
- }
158
- if (int_status & (1 << UITO )) {
159
- USIC (uart -> uart_nr ) = (1 << UITO );//clear any TimeOut error
160
- }
161
- ETS_UART_INTR_ENABLE ();
162
143
}
144
+ USIC (uart -> uart_nr ) = USIS (uart -> uart_nr );
163
145
}
164
146
165
147
void uart_start_isr (uart_t * uart )
0 commit comments