mirror of https://github.com/ARMmbed/mbed-os.git
fix for USART transmissions under 3 bytes long
parent
2af3e5dfd7
commit
42c5af3702
|
@ -1492,7 +1492,7 @@ int serial_tx_irq_handler_asynch(serial_t *obj)
|
||||||
LEUART_IntDisable(obj->serial.periph.leuart, LEUART_IEN_TXBL);
|
LEUART_IntDisable(obj->serial.periph.leuart, LEUART_IEN_TXBL);
|
||||||
LEUART_IntEnable(obj->serial.periph.leuart, LEUART_IEN_TXC);
|
LEUART_IntEnable(obj->serial.periph.leuart, LEUART_IEN_TXC);
|
||||||
}
|
}
|
||||||
}else{
|
}else if (obj->serial.periph.leuart->IF & LEUART_IF_TXC){
|
||||||
/* Last byte has been successfully transmitted. Stop the procedure */
|
/* Last byte has been successfully transmitted. Stop the procedure */
|
||||||
serial_tx_abort_asynch(obj);
|
serial_tx_abort_asynch(obj);
|
||||||
return SERIAL_EVENT_TX_COMPLETE & obj->serial.events;
|
return SERIAL_EVENT_TX_COMPLETE & obj->serial.events;
|
||||||
|
@ -1509,7 +1509,7 @@ int serial_tx_irq_handler_asynch(serial_t *obj)
|
||||||
USART_IntDisable(obj->serial.periph.uart, USART_IEN_TXBL);
|
USART_IntDisable(obj->serial.periph.uart, USART_IEN_TXBL);
|
||||||
USART_IntEnable(obj->serial.periph.uart, USART_IEN_TXC);
|
USART_IntEnable(obj->serial.periph.uart, USART_IEN_TXC);
|
||||||
}
|
}
|
||||||
}else{
|
} else if (obj->serial.periph.uart->IF & USART_IF_TXC) {
|
||||||
/* Last byte has been successfully transmitted. Stop the procedure */
|
/* Last byte has been successfully transmitted. Stop the procedure */
|
||||||
serial_tx_abort_asynch(obj);
|
serial_tx_abort_asynch(obj);
|
||||||
return SERIAL_EVENT_TX_COMPLETE & obj->serial.events;
|
return SERIAL_EVENT_TX_COMPLETE & obj->serial.events;
|
||||||
|
@ -1684,13 +1684,13 @@ int serial_irq_handler_asynch(serial_t *obj)
|
||||||
//Different method of checking tx vs rx for LEUART
|
//Different method of checking tx vs rx for LEUART
|
||||||
if(LEUART_IntGetEnabled(obj->serial.periph.leuart) & (LEUART_IF_RXDATAV | LEUART_IF_FERR | LEUART_IF_PERR | LEUART_IF_RXOF)) {
|
if(LEUART_IntGetEnabled(obj->serial.periph.leuart) & (LEUART_IF_RXDATAV | LEUART_IF_FERR | LEUART_IF_PERR | LEUART_IF_RXOF)) {
|
||||||
return serial_rx_irq_handler_asynch(obj);
|
return serial_rx_irq_handler_asynch(obj);
|
||||||
} else if(LEUART_StatusGet(obj->serial.periph.leuart) & LEUART_STATUS_TXBL) {
|
} else if(LEUART_StatusGet(obj->serial.periph.leuart) & (LEUART_STATUS_TXBL | LEUART_STATUS_TXC)) {
|
||||||
return serial_tx_irq_handler_asynch(obj);
|
return serial_tx_irq_handler_asynch(obj);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(USART_IntGetEnabled(obj->serial.periph.uart) & (USART_IF_RXDATAV | USART_IF_RXOF | USART_IF_PERR | USART_IF_FERR)) {
|
if(USART_IntGetEnabled(obj->serial.periph.uart) & (USART_IF_RXDATAV | USART_IF_RXOF | USART_IF_PERR | USART_IF_FERR)) {
|
||||||
return serial_rx_irq_handler_asynch(obj);
|
return serial_rx_irq_handler_asynch(obj);
|
||||||
} else {
|
} else if(USART_StatusGet(obj->serial.periph.uart) & (USART_STATUS_TXBL | USART_STATUS_TXC)){
|
||||||
return serial_tx_irq_handler_asynch(obj);
|
return serial_tx_irq_handler_asynch(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue