Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a83f4d5

Browse files
committed
Use txBuffer
1 parent 78b63e9 commit a83f4d5

File tree

2 files changed

+33
-30
lines changed

2 files changed

+33
-30
lines changed

‎cores/arduino/Serial.cpp

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,13 @@ void UART::WrapperCallback(uart_callback_args_t *p_args) {
6161
case UART_EVENT_TX_COMPLETE:
6262
case UART_EVENT_TX_DATA_EMPTY:
6363
{
64-
//uint8_t to_enqueue = uart_ptr->txBuffer.available() < uart_ptr->uart_ctrl.fifo_depth ? uart_ptr->txBuffer.available() : uart_ptr->uart_ctrl.fifo_depth;
65-
//while (to_enqueue) {
66-
uart_ptr->tx_done = true;
64+
if(uart_ptr->txBuffer.available()){
65+
static char txc;
66+
txc = uart_ptr->txBuffer.read_char();
67+
R_SCI_UART_Write(&(uart_ptr->uart_ctrl), (uint8_t*)&txc , 1);
68+
} else {
69+
uart_ptr->tx_done = true;
70+
}
6771
break;
6872
}
6973
case UART_EVENT_RX_CHAR:
@@ -108,27 +112,31 @@ bool UART::setUpUartIrqs(uart_cfg_t &cfg) {
108112
/* -------------------------------------------------------------------------- */
109113
size_t UART::write(uint8_t c) {
110114
/* -------------------------------------------------------------------------- */
111-
if(init_ok) {
112-
tx_done = false;
113-
R_SCI_UART_Write(&uart_ctrl, &c, 1);
114-
while (!tx_done) {}
115-
return 1;
116-
}
117-
else {
118-
return 0;
119-
}
115+
if(init_ok) {
116+
while(txBuffer.isFull()){;}
117+
txBuffer.store_char(c);
118+
if(tx_done){
119+
tx_done = false;
120+
txc = txBuffer.read_char(); // clear out the char we just added and send it to start transmission.
121+
R_SCI_UART_Write(&uart_ctrl, (uint8_t*)&txc , 1);
122+
}
123+
return 1;
124+
}
125+
else {
126+
return 0;
127+
}
120128
}
121129

122130
size_t UART::write(uint8_t* c, size_t len) {
123-
if(init_ok) {
124-
tx_done = false;
125-
R_SCI_UART_Write(&uart_ctrl, c, len);
126-
while (!tx_done) {}
127-
return len;
128-
}
129-
else {
130-
return 0;
131-
}
131+
if(init_ok) {
132+
for(int i = 0; i<len; i++){
133+
write(c[i]);
134+
}
135+
return len;
136+
}
137+
else {
138+
return 0;
139+
}
132140
}
133141

134142
/* -------------------------------------------------------------------------- */
@@ -328,11 +336,5 @@ void UART::flush() {
328336
/* -------------------------------------------------------------------------- */
329337
size_t UART::write_raw(uint8_t* c, size_t len) {
330338
/* -------------------------------------------------------------------------- */
331-
size_t i = 0;
332-
while (i < len) {
333-
uart_ctrl.p_reg->TDR = *(c+i);
334-
while (uart_ctrl.p_reg->SSR_b.TEND == 0) {}
335-
i++;
336-
}
337-
return len;
339+
return write(c, len);
338340
}

‎cores/arduino/Serial.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ class UART : public arduino::HardwareSerial {
7878
arduino::SafeRingBufferN<SERIAL_BUFFER_SIZE> rxBuffer;
7979
arduino::SafeRingBufferN<SERIAL_BUFFER_SIZE> txBuffer;
8080

81-
volatile bool tx_done;
81+
volatile bool tx_done = true;
82+
char txc;
8283

8384
sci_uart_instance_ctrl_t uart_ctrl;
8485
uart_cfg_t uart_cfg;
@@ -107,4 +108,4 @@ extern UART _UART4_;
107108
extern UART _UART5_;
108109

109110
#endif
110-
#endif
111+
#endif

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /