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.

TMS570LC4357: SCI FLR register always stuck at value 0x00000904

Part Number: TMS570LC4357

We are using TMS570lc4357 and implementing SCI drivers, while doing the testing we have observed that SCI flags register always stuck at value "0x00000904" irrespective of SCI is initialized or not. When we decode this value the idle flag is set, so SCI not receiving any data. could you please guide us how to resolve this issue?

I have given the SCI initialization sequence below,

/** @b initialize @b SCI2 */

/** - bring SCI2 out of reset */
sciREG2->GCR0 = 0U;
sciREG2->GCR0 = 1U;

/** - Disable all interrupts */
sciREG2->CLEARINT = 0xFFFFFFFFU;
sciREG2->CLEARINTLVL = 0xFFFFFFFFU;

/** - global control 1 */
sciREG2->GCR1 = (uint32)((uint32)1U << 25U) /* enable transmit */
| (uint32)((uint32)1U << 24U) /* enable receive */
| (uint32)((uint32)1U << 5U) /* internal clock (device has no clock pin) */
| (uint32)((uint32)(2U-1U) << 4U) /* number of stop bits */
| (uint32)((uint32)0U << 3U) /* even parity, otherwise odd */
| (uint32)((uint32)0U << 2U) /* enable parity */
| (uint32)((uint32)1U << 1U); /* asynchronous timing mode */

/** - set baudrate */
sciREG2->BRS = 40U; /* baudrate */

/** - transmission length */
sciREG2->FORMAT = 8U - 1U; /* length */

/** - set SCI2 pins functional mode */
sciREG2->PIO0 = (uint32)((uint32)1U << 2U) /* tx pin */
| (uint32)((uint32)1U << 1U); /* rx pin */

/** - set SCI2 pins default output value */
sciREG2->PIO3 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */

/** - set SCI2 pins output direction */
sciREG2->PIO1 = (uint32)((uint32)1U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */

/** - set SCI2 pins open drain enable */
sciREG2->PIO6 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */

/** - set SCI2 pins pullup/pulldown enable */
sciREG2->PIO7 = (uint32)((uint32)0U << 2U) /* tx pin */
| (uint32)((uint32)0U << 1U); /* rx pin */

/** - set SCI2 pins pullup/pulldown select */
sciREG2->PIO8 = (uint32)((uint32)1U << 2U) /* tx pin */
| (uint32)((uint32)1U << 1U); /* rx pin */

/** - set interrupt level */
sciREG2->SETINTLVL = (uint32)((uint32)0U << 26U) /* Framing error */
| (uint32)((uint32)0U << 25U) /* Overrun error */
| (uint32)((uint32)0U << 24U) /* Parity error */
| (uint32)((uint32)0U << 9U) /* Receive */
| (uint32)((uint32)0U << 8U) /* Transmit */
| (uint32)((uint32)0U << 1U) /* Wakeup */
| (uint32)((uint32)0U << 0U); /* Break detect */

/** - set interrupt enable */
sciREG2->SETINT = (uint32)((uint32)0U << 26U) /* Framing error */
| (uint32)((uint32)0U << 25U) /* Overrun error */
| (uint32)((uint32)0U << 24U) /* Parity error */
| (uint32)((uint32)0U << 9U) /* Receive */
| (uint32)((uint32)0U << 1U) /* Wakeup */
| (uint32)((uint32)0U << 0U); /* Break detect */

/** - initialize global transfer variables */
g_sciTransfer_t[1U].mode = (uint32)0U << 8U;
g_sciTransfer_t[1U].tx_length = 0U;
g_sciTransfer_t[1U].rx_length = 0U;

/** - Finaly start SCI2 */
sciREG2->GCR1 |= 0x80U;