This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LP-AM243: MCU SDK - UART is sometimes not generating Rx time-out

Part Number: LP-AM243


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