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.

CCS/TMS570LS1227: UART transmit issue

Part Number: TMS570LS1227

Tool/software: Code Composer Studio

The product uses the chip of TMS570LS1227 to communicate with other MCU through serial port, 115200 baud rate. It can send data by polling mode and run for more than ten days without any problem. Later, there is no waveform on 570TX-line. RX can receive data normally, and the other serial port of the board can output log normally. There is no way to simulate the dormancy function. From the log, we can see that all tasks of the 570 Freertos system are running normally and there is no crash. That is to say, from the log, the sending data program is normally executed without jamming, but there is no data level change on the chip TX pin.

Do you have any good ways to sort out this problem?

Do you have any errors in sending serial ports of this chip that will lead to this problem?

Or which register error will cause this problem, there is no way to think about it now.

  • Hello Baolei,

    Is this issue happened on only 1 board or all your boards? Is the test running in room temperature? Before writing data to SCI TD register, TXRDY is checked to make sure the SCITX is ready to receive the next character. Are you sure the non-zero data is written to SCITD register periodically (when TXRDY =1)? When issue happened, is any flag in FLR register set?
  • Thank you for your reply.
    The test running in room temperature.
    At the time of the problem, XDS200 was not connected, and the status of the registers could not be seen at that time.
    The procedures for sending SCI data are as follows:
    Send data Interface:
    void sciSend(sciBASE_t *sci, uint32 length, uint8 * data)

    Part of code:
    /* send the data */
    while (length > 0U)
    {
    /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
    while ((sci->FLR & (uint32)SCI_TX_INT) == 0U)
    {
    } /* Wait */
    /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are only allowed in this driver" */
    txdata = *data;
    sci->TD = (uint32)(txdata);
    /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are only allowed in this driver" */
    /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
    data++;
    length--;
    }

    It doesn't happen very often on a board. It won't happen for more than ten days. I'm still reproducing problems and printing FLR registers.
    So far, the board has been running for five days and no problems have arisen.
    Is there anything else to doubt? Or other ways to find this problem?
  • Hello Baolei,

    Is the SCI TX in the same task as SCI RX? I am wondering if the TX code is stuck at the infinite loop:

    while ((sci->FLR & (uint32)SCI_TX_INT) == 0U)
    {
    } /* Wait */

    You can use a variable to record the status, and check this variable when the issue occurs.

    isInfiniteLoop = 0; // (global)
    while ((sci->FLR & (uint32)SCI_TX_INT) == 0U)
    {
    isInfiniteLoop = 1;
    } /* Wait */

    When issue occurs, connect the JTAG to check this variable.