forked from espressif/esp-modbus
freemodbus: fix uart_wait_tx_done() reenable tx_done interrupt
fixes the issue with uart_wait_tx_done() when the task is suspended and transmission is done right before reenable tx_done interrupt * Original commit: espressif/esp-idf@c801b3a182
This commit is contained in:
@ -37,7 +37,7 @@
|
||||
#define MB_SERIAL_BUF_SIZE (CONFIG_FMB_SERIAL_BUF_SIZE)
|
||||
|
||||
// common definitions for serial port implementations
|
||||
#define MB_SERIAL_TX_TOUT_MS (100)
|
||||
#define MB_SERIAL_TX_TOUT_MS (2200) // maximum time for transmission of longest allowed frame buffer
|
||||
#define MB_SERIAL_TX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_TX_TOUT_MS)) // timeout for transmission
|
||||
#define MB_SERIAL_RX_TOUT_MS (1)
|
||||
#define MB_SERIAL_RX_TOUT_TICKS (pdMS_TO_TICKS(MB_SERIAL_RX_TOUT_MS)) // timeout for receive
|
||||
|
@ -115,7 +115,7 @@ BOOL xMBMasterPortSerialTxPoll(void)
|
||||
ESP_LOGD(TAG, "MB_TX_buffer sent: (%d) bytes.", (uint16_t)(usCount - 1));
|
||||
// Waits while UART sending the packet
|
||||
esp_err_t xTxStatus = uart_wait_tx_done(ucUartNumber, MB_SERIAL_TX_TOUT_TICKS);
|
||||
vMBMasterPortSerialEnable( TRUE, FALSE );
|
||||
vMBMasterPortSerialEnable(TRUE, FALSE);
|
||||
MB_PORT_CHECK((xTxStatus == ESP_OK), FALSE, "mb serial sent buffer failure.");
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ static void modbus_master_task(void *pvParameters)
|
||||
// Send response buffer if ready to be sent
|
||||
BOOL xSentState = xMBMasterPortSerialTxPoll();
|
||||
if (xSentState) {
|
||||
// Let state machine know that response was transmitted out
|
||||
// Let state machine know that request frame was transmitted out
|
||||
(void)xMBMasterPortEventPost(EV_MASTER_FRAME_SENT);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user