Dear TI support,
I'm using following SDKs to transfer and receive variable size data at 115.2kBps baudrate over UART with expectation to hit 1-2Mbps in future.
mcu_plus_sdk_am64x_07_03_00_19
mcu_plus_sdk_am64x_08_00_00_21
mcu_plus_sdk_am243x_08_01_00_36
The length of receiving data is not know. The implementation depends on UART_TRANSFER_MODE_CALLBACK and UART_READ_RETURN_MODE_PARTIAL.
UART_read() function is set to expect message with maximum size. Callback is called when all data are received or "Rx time-out".
For SDK 07_03_00_19, 08_00_00_21 the callback is called when "Rx time-out" occurred since "message with maximum size" happens rarely.
But when amount of receiving data are slightly larger than multiply of UART_RXTRIGLVL_56, (ie 59-60, 119-132, 239-240 bytes) then the "Rx time-out." will not happen.
Can you please explain what is going on? Is there a way to make "Rx time-out." interrupt more reliable?
Our firmware require quick reaction time. Information that the other side stopped sending data was helpful to achieve this.
Thank you.
p_serial_hw_hdl->p_params->readMode = UART_TRANSFER_MODE_CALLBACK;
p_serial_hw_hdl->p_params->readReturnMode = UART_READ_RETURN_MODE_PARTIAL;
p_serial_hw_hdl->p_params->readCallbackFxn = mbp_ti_uart_irq_rx_callback;
p_serial_hw_hdl->p_params->writeMode = UART_TRANSFER_MODE_CALLBACK;
p_serial_hw_hdl->p_params->writeCallbackFxn = mbp_ti_uart_irq_tx_callback;
p_serial_hw_hdl->p_params->hwFlowControl = FALSE;
p_serial_hw_hdl->p_params->hwFlowControlThr = UART_RXTRIGLVL_56; // greater than or equal to the RX FIFO trigger level
p_serial_hw_hdl->p_params->intrEnable = TRUE;
p_serial_hw_hdl->p_params->skipIntrReg = FALSE;
//p_serial_hw_hdl->p_params->intrNum = TODO;
//p_serial_hw_hdl->p_params->intrPriority = TODO;
p_serial_hw_hdl->p_params->dmaEnable = FALSE;
p_serial_hw_hdl->p_params->operMode = UART_OPER_MODE_13X;
p_serial_hw_hdl->p_params->rxTrigLvl = UART_RXTRIGLVL_56;
p_serial_hw_hdl->p_params->txTrigLvl = UART_TXTRIGLVL_56;
UART_open(p_serial_hw_hdl->port_id, p_serial_hw_hdl->p_params);
UART_write(*p_serial_hw_hdl->usart, p_transaction);
UART_read(*p_serial_hw_hdl->usart, p_transaction);
Best regards,
m