@@ -58,15 +58,22 @@ void UART::WrapperCallback(uart_callback_args_t *p_args) {
58
58
{
59
59
break ;
60
60
}
61
- case UART_EVENT_TX_COMPLETE:
62
- case UART_EVENT_TX_DATA_EMPTY:
61
+ case UART_EVENT_TX_COMPLETE: // TEI interrupt
63
62
{
64
63
if (uart_ptr->txBuffer .available ()){
65
- uart_ptr->txc = uart_ptr->txBuffer .read_char ();
66
- R_SCI_UART_Write (&(uart_ptr->uart_ctrl ), (uint8_t *)&(uart_ptr->txc ) , 1 );
67
- } else {
64
+ int idx = 0 ;
65
+ while (uart_ptr->txBuffer .available () && (idx < 16 )){
66
+ uart_ptr->txc [idx++] = uart_ptr->txBuffer .read_char ();
67
+ }
68
+ R_SCI_UART_Write (&(uart_ptr->uart_ctrl ), (uint8_t *)(uart_ptr->txc ) , idx);
69
+ }
70
+ else {
68
71
uart_ptr->tx_done = true ;
69
- }
72
+ }
73
+ break ;
74
+ }
75
+ case UART_EVENT_TX_DATA_EMPTY: // TXI interrupt had no more data to write
76
+ {
70
77
break ;
71
78
}
72
79
case UART_EVENT_RX_CHAR:
@@ -113,12 +120,13 @@ size_t UART::write(uint8_t c) {
113
120
/* -------------------------------------------------------------------------- */
114
121
if (init_ok) {
115
122
while (txBuffer.isFull ()){;}
116
- txBuffer.store_char (c);
117
- if (tx_done){
118
- tx_done = false ;
119
- txc = txBuffer.read_char (); // clear out the char we just added and send it to start transmission.
120
- R_SCI_UART_Write (&uart_ctrl, (uint8_t *)&txc , 1 );
121
- }
123
+ if (tx_done) {
124
+ tx_done = false ;
125
+ txc[0 ] = c;
126
+ R_SCI_UART_Write (&uart_ctrl, (uint8_t *)txc , 1 );
127
+ } else {
128
+ txBuffer.store_char (c);
129
+ }
122
130
return 1 ;
123
131
}
124
132
else {
0 commit comments