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.

RM57 Uart getting broken characters



Hi, I am working on RM57 dev board and trying to make UART -> Serial output working.

I am using TeraTerm to receive ASCII characters but I am getting garbage characters. Terminal settings: Baudrate 9600, no parity, 8 bits data and 2 stop bits.

ÆöòÌfxxò2ÏøÞ?ÞæÞÞæÀ<Ìó3ÏæÀ8À<Ìó3ÏæÀ8ÆöòÌfxxò2ÏøÞ?ÞæÞÞæÀ<Ìó3ÏæÀ8àøæÀxÆöòÌfxxö2ÏøÞ?Þ

I initialized SCI 1 - 4 and added PutChars() function to send.

void sciInit(void)
{
/* USER CODE BEGIN (2) */
/* USER CODE END */

/** @b initialize @b SCI1 */

/** - bring SCI1 out of reset */
sciREG1->GCR0 = 0U;
sciREG1->GCR0 = 1U;

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

/** - global control 1 */
sciREG1->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 */
sciREG1->BRS = 715U; /* baudrate */

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

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

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

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

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

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

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

/** - set interrupt level */
sciREG1->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 */
sciREG1->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[0U].mode = (uint32)0U << 8U;
g_sciTransfer_t[0U].tx_length = 0U;
g_sciTransfer_t[0U].rx_length = 0U;

/** - Finaly start SCI1 */
sciREG1->GCR1 |= 0x80U;

/** @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 = 715U; /* 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)0U << 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;

/** @b initialize @b SCI3 */

/** - bring SCI3 out of reset */
sciREG3->GCR0 = 0U;
sciREG3->GCR0 = 1U;

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

/** - global control 1 */
sciREG3->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 */
sciREG3->BRS = 357U; /* baudrate */

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

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

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

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

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

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

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

/** - set interrupt level */
sciREG3->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 */
sciREG3->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[2U].mode = (uint32)0U << 8U;
g_sciTransfer_t[2U].tx_length = 0U;
g_sciTransfer_t[2U].rx_length = 0U;

/** - Finaly start SCI3 */
sciREG3->GCR1 |= 0x80U;

/** @b initialize @b SCI4 */

/** - bring SCI4 out of reset */
sciREG4->GCR0 = 0U;
sciREG4->GCR0 = 1U;

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

/** - global control 1 */
sciREG4->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 */
sciREG4->BRS = 357U; /* baudrate */

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

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

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

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

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

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

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

/** - set interrupt level */
sciREG4->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 */
sciREG4->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[3U].mode = (uint32)0U << 8U;
g_sciTransfer_t[3U].tx_length = 0U;
g_sciTransfer_t[3U].rx_length = 0U;

/** - Finaly start SCI4 */
sciREG4->GCR1 |= 0x80U;

/* USER CODE BEGIN (3) */
/* USER CODE END */
}

void PutChars(sciBASE_t *sci, char *text)
{
while(*text!=0)
{
while (!(sci->FLR & 0x800));
sci->TD = *text++;
}
}