From c637c06357fa1803138cf8679a2f1ecea6b3cd57 Mon Sep 17 00:00:00 2001 From: David <6957239+delta-G@users.noreply.github.com> Date: Thu, 2 May 2024 20:38:41 -0500 Subject: [PATCH 1/3] pulled origin --- extras/fsp | 2 +- extras/uno-r4-wifi-usb-bridge | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/fsp b/extras/fsp index 5d13f916c..8ec537bc8 160000 --- a/extras/fsp +++ b/extras/fsp @@ -1 +1 @@ -Subproject commit 5d13f916c72f9d1471864361dfaf8f492cab5979 +Subproject commit 8ec537bc86b1b71203d72d0cbb28e6e75b353ebd diff --git a/extras/uno-r4-wifi-usb-bridge b/extras/uno-r4-wifi-usb-bridge index a634856e5..3f4e668d1 160000 --- a/extras/uno-r4-wifi-usb-bridge +++ b/extras/uno-r4-wifi-usb-bridge @@ -1 +1 @@ -Subproject commit a634856e5467022bc7587e7c8a856811255ea890 +Subproject commit 3f4e668d1318feeaa7088c788e7fd88a26a5a671 From 004368ac3c0e4156471fa6823ce0350bc364dfd6 Mon Sep 17 00:00:00 2001 From: David <6957239+delta-G@users.noreply.github.com> Date: Sun, 5 May 2024 21:30:45 -0500 Subject: [PATCH 2/3] Use txBuffer --- cores/arduino/Serial.cpp | 70 ++++++++++++++++++++++------------------ cores/arduino/Serial.h | 5 +-- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/cores/arduino/Serial.cpp b/cores/arduino/Serial.cpp index d905edd90..9bf509436 100644 --- a/cores/arduino/Serial.cpp +++ b/cores/arduino/Serial.cpp @@ -61,9 +61,13 @@ void UART::WrapperCallback(uart_callback_args_t *p_args) { case UART_EVENT_TX_COMPLETE: case UART_EVENT_TX_DATA_EMPTY: { - //uint8_t to_enqueue = uart_ptr->txBuffer.available() < uart_ptr->uart_ctrl.fifo_depth ? uart_ptr->txBuffer.available() : uart_ptr->uart_ctrl.fifo_depth; - //while (to_enqueue) { - uart_ptr->tx_done = true; + if(uart_ptr->txBuffer.available()){ + static char txc; + txc = uart_ptr->txBuffer.read_char(); + R_SCI_UART_Write(&(uart_ptr->uart_ctrl), (uint8_t*)&txc , 1); + } else { + uart_ptr->tx_done = true; + } break; } case UART_EVENT_RX_CHAR: @@ -108,27 +112,31 @@ bool UART::setUpUartIrqs(uart_cfg_t &cfg) { /* -------------------------------------------------------------------------- */ size_t UART::write(uint8_t c) { /* -------------------------------------------------------------------------- */ - if(init_ok) { - tx_done = false; - R_SCI_UART_Write(&uart_ctrl, &c, 1); - while (!tx_done) {} - return 1; - } - else { - return 0; - } + if(init_ok) { + while(txBuffer.isFull()){;} + txBuffer.store_char(c); + if(tx_done){ + tx_done = false; + txc = txBuffer.read_char(); // clear out the char we just added and send it to start transmission. + R_SCI_UART_Write(&uart_ctrl, (uint8_t*)&txc , 1); + } + return 1; + } + else { + return 0; + } } size_t UART::write(uint8_t* c, size_t len) { - if(init_ok) { - tx_done = false; - R_SCI_UART_Write(&uart_ctrl, c, len); - while (!tx_done) {} - return len; - } - else { - return 0; - } + if(init_ok) { + for(int i = 0; iTDR = *(c+i); - while (uart_ctrl.p_reg->SSR_b.TEND == 0) {} - i++; - } - return len; -} \ No newline at end of file +//size_t UART::write_raw(uint8_t* c, size_t len) { +///* -------------------------------------------------------------------------- */ +// size_t i = 0; +// while (i < len) { +// uart_ctrl.p_reg->TDR = *(c+i); +// while (uart_ctrl.p_reg->SSR_b.TEND == 0) {} +// i++; +// } +// return len; +//} \ No newline at end of file diff --git a/cores/arduino/Serial.h b/cores/arduino/Serial.h index cc818d466..c61ff7e39 100644 --- a/cores/arduino/Serial.h +++ b/cores/arduino/Serial.h @@ -63,7 +63,7 @@ class UART : public arduino::HardwareSerial { void flush(void); size_t write(uint8_t c); size_t write(uint8_t* c, size_t len); - size_t write_raw(uint8_t* c, size_t len); +// size_t write_raw(uint8_t* c, size_t len); using Print::write; operator bool(); // { return true; } @@ -78,7 +78,8 @@ class UART : public arduino::HardwareSerial { arduino::SafeRingBufferN rxBuffer; arduino::SafeRingBufferN txBuffer; - volatile bool tx_done; + volatile bool tx_done = true; + char txc; sci_uart_instance_ctrl_t uart_ctrl; uart_cfg_t uart_cfg; From 6c5eac41fc478c864384a1710ded888030e48b1b Mon Sep 17 00:00:00 2001 From: David <6957239+delta-G@users.noreply.github.com> Date: Sun, 5 May 2024 22:26:06 -0500 Subject: [PATCH 3/3] added back write_raw --- cores/arduino/Serial.cpp | 14 ++++---------- cores/arduino/Serial.h | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/cores/arduino/Serial.cpp b/cores/arduino/Serial.cpp index 9bf509436..7d7a0ad87 100644 --- a/cores/arduino/Serial.cpp +++ b/cores/arduino/Serial.cpp @@ -334,13 +334,7 @@ void UART::flush() { } /* -------------------------------------------------------------------------- */ -//size_t UART::write_raw(uint8_t* c, size_t len) { -///* -------------------------------------------------------------------------- */ -// size_t i = 0; -// while (i < len) { -// uart_ctrl.p_reg->TDR = *(c+i); -// while (uart_ctrl.p_reg->SSR_b.TEND == 0) {} -// i++; -// } -// return len; -//} \ No newline at end of file +size_t UART::write_raw(uint8_t* c, size_t len) { +/* -------------------------------------------------------------------------- */ + return write(c, len); +} \ No newline at end of file diff --git a/cores/arduino/Serial.h b/cores/arduino/Serial.h index c61ff7e39..e53a55c71 100644 --- a/cores/arduino/Serial.h +++ b/cores/arduino/Serial.h @@ -63,7 +63,7 @@ class UART : public arduino::HardwareSerial { void flush(void); size_t write(uint8_t c); size_t write(uint8_t* c, size_t len); -// size_t write_raw(uint8_t* c, size_t len); + size_t write_raw(uint8_t* c, size_t len); using Print::write; operator bool(); // { return true; }