Skip to content

Commit 57d878a

Browse files
Changing the logic of ethernet driver to avoid busy waiting
1 parent 9667d7e commit 57d878a

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

libraries/Ethernet/src/EthernetDriver.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class EthernetDriver {
6464
#define ETHER_FRAME_TRANSFER_COMPLETED (1UL << 21)
6565
#define ETHER_MAGIC_PACKET_DETECTED_MASK (1UL << 1)
6666

67-
static volatile bool frame_transmitted_flag = false;
67+
static volatile bool frame_being_transmitted = false;
6868
static EthernetDriver eth_driver;
6969

7070
static uint8_t eth_tx_buffer[ETH_BUFF_DIM];
@@ -230,7 +230,7 @@ void EthernetDriver::irq_callback(ether_callback_args_t * p_args) {
230230
if (ETHER_FRAME_TRANSFER_COMPLETED == (reg_eesr & ETHER_FRAME_TRANSFER_COMPLETED)) {
231231

232232

233-
frame_transmitted_flag = true;
233+
frame_being_transmitted = false;
234234
/* FRAME TRANSMISSION COMPLETED */
235235
if(frame_transmitted != nullptr) {
236236
frame_transmitted();
@@ -341,18 +341,23 @@ void eth_release_rx_buffer() {
341341

342342

343343
bool eth_output(uint8_t *buf, uint16_t dim) {
344-
frame_transmitted_flag = false;
345-
fsp_err_t err = R_ETHER_Write ( eth_driver.get_ctrl(), buf, dim);
346-
if(err == FSP_SUCCESS) {
347-
348-
while(!frame_transmitted_flag) {
344+
bool retval = true;
349345

350-
}
351-
return true;
346+
fsp_err_t err = R_ETHER_Write(eth_driver.get_ctrl(), buf, dim);
347+
if(err == FSP_SUCCESS) {
348+
frame_being_transmitted = true;
349+
retval = true;
352350
}
353351
else {
354-
return false;
352+
retval = false;
355353
}
354+
355+
return retval;
356+
}
357+
358+
// this function return true if the tx buffer is not being used for the transmission of another frame
359+
bool eth_output_can_transimit() {
360+
return !frame_being_transmitted;
356361
}
357362

358363
uint8_t *eth_input(volatile uint32_t *dim) {

libraries/Ethernet/src/EthernetDriver.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ bool eth_init();
2323
void eth_execute_link_process();
2424
uint8_t *eth_input(volatile uint32_t *dim);
2525
bool eth_output(uint8_t *buf, uint16_t dim);
26+
bool eth_output_can_transimit();
2627
void eth_release_rx_buffer();
2728
uint8_t *eth_get_tx_buffer(uint16_t *size);
2829
void eth_set_rx_frame_cbk(EtherCallback_f fn);
@@ -33,5 +34,4 @@ void eth_set_lan_wake_up_cbk(EtherCallback_f fn);
3334
void eth_set_magic_packet_cbk(EtherCallback_f fn);
3435

3536

36-
37-
#endif
37+
#endif

0 commit comments

Comments
 (0)