Skip to content

Commit 0a14d85

Browse files
committed
Loads characters 16 at a time in the interrupt callback
1 parent 2878c5a commit 0a14d85

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

cores/arduino/Serial.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,22 @@ void UART::WrapperCallback(uart_callback_args_t *p_args) {
5858
{
5959
break;
6060
}
61-
case UART_EVENT_TX_COMPLETE:
62-
case UART_EVENT_TX_DATA_EMPTY:
61+
case UART_EVENT_TX_COMPLETE: // TEI interrupt
6362
{
6463
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 {
6871
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+
{
7077
break;
7178
}
7279
case UART_EVENT_RX_CHAR:
@@ -113,12 +120,13 @@ size_t UART::write(uint8_t c) {
113120
/* -------------------------------------------------------------------------- */
114121
if(init_ok) {
115122
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+
}
122130
return 1;
123131
}
124132
else {

cores/arduino/Serial.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class UART : public arduino::HardwareSerial {
8080
arduino::SafeRingBufferN<SERIAL_BUFFER_SIZE> txBuffer;
8181

8282
volatile bool tx_done = true;
83-
char txc;
83+
volatile char txc[BSP_FEATURE_SCI_UART_FIFO_DEPTH];
8484

8585
sci_uart_instance_ctrl_t uart_ctrl;
8686
uart_cfg_t uart_cfg;

0 commit comments

Comments
 (0)