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:
Alex Lisitsyn
2021-07-21 10:07:44 +08:00
committed by aleks
parent 5a27d03531
commit c0163bb01e
3 changed files with 3 additions and 3 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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);
}
}