Hi,
I can't seem to get the UART to work. I have a pin on the TX on my scope. It is always high at 4V.
This is my UART init
void USART_Init(USART_Type *base, const usart_config_t *config, uint32_t srcClock_Hz)
{
/* Check arguments */
assert(!((NULL == base) || (NULL == config) || (0 == srcClock_Hz)));
uint32_t instance = USART_GetInstance(base);
CLOCK_EnableClock(s_usartClock[instance]);
RESET_PeripheralReset(s_usartRest[instance]);
/* Setup configuration and enable USART to configure other register. */
base->CFG = USART_CFG_PARITYSEL(config->parityMode) | USART_CFG_STOPLEN(config->stopBitCount) |
USART_CFG_SYNCEN(config->syncMode >> 1) | USART_CFG_DATALEN(config->bitCountPerChar) |
USART_CFG_LOOP(config->loopback) | USART_CFG_SYNCMST(config->syncMode) | USART_CFG_ENABLE_MASK;
// /* Setup the USART transmit and receive. */
// USART_EnableTx(base, config->enableTx);
// USART_EnableRx(base, config->enableRx);
if (config->enableTx)
{
/* empty and enable txFIFO */
base->FIFOCFG |= USART_FIFOCFG_EMPTYTX_MASK | USART_FIFOCFG_ENABLETX_MASK;
/* setup trigger level */
base->FIFOTRIG &= ~(USART_FIFOTRIG_TXLVL_MASK);
base->FIFOTRIG |= USART_FIFOTRIG_TXLVL(config->txWatermark);
/* enable trigger interrupt */
base->FIFOTRIG |= USART_FIFOTRIG_TXLVLENA_MASK;
}
/* empty and enable rxFIFO */
if (config->enableRx)
{
base->FIFOCFG |= USART_FIFOCFG_EMPTYRX_MASK | USART_FIFOCFG_ENABLERX_MASK;
/* setup trigger level */
base->FIFOTRIG &= ~(USART_FIFOTRIG_RXLVL_MASK);
base->FIFOTRIG |= USART_FIFOTRIG_RXLVL(config->rxWatermark);
/* enable trigger interrupt */
base->FIFOTRIG |= USART_FIFOTRIG_RXLVLENA_MASK;
}
// //select the desirecd flexcom by writing to the pselid
// SYSCON->PRESETCTRLX[0] = SYSCON_AHBCLKCTRL1_FC0(1); //enable clock for FC)
//
// //configure the fifos
// //uart receive data AHBCLKCCRTRL1 - set it to the flexxcomm
// SYSCON->AHBCLKCTRLX[1] = SYSCON_AHBCLKCTRL1_FC0(1); //enable clock for FC)
base->BRG = 9600U / config->baudRate_Bps;
//base->OSR = USART_OSR_VALUE;
/* Enables the clock for the I/O controller.: Enable Clock. */
CLOCK_EnableClock(kCLOCK_Iocon);
//pin config
uint32_t uart_pin_config = ( 0x1 | //pin function 1
/* No addition pin function */
(0x0 << IOCON_PIO_MODE_SHIFT) |/* Standard mode, output slew rate control is enabled */
(0x0 << IOCON_PIO_SLEW_SHIFT) |
/* Enables digital function */
(0x1 << IOCON_PIO_DIGIMODE_SHIFT));
IOCON->PIO[0][29] = uart_pin_config;
/* PORT0 PIN30 (coords: 94) is configured as FC0_TXD_SCL_MISO_WS */
IOCON->PIO[0][30] = uart_pin_config;
base->FIFOCFG |= USART_FIFOCFG_ENABLETX_MASK;
base->FIFOCFG |= USART_FIFOCFG_ENABLERX_MASK;
//pending interupt
/* Enable RX interrupt. */
EnableIRQ(FLEXCOMM0_IRQn);
//NVIC_EnableIRQ();
}
This is how I am setting it up in main
//flexcomm clock attach 12 MHz clock to FLEXCOMM0 (debug console)
CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);
RESET_ClearPeripheralReset(kFC0_RST_SHIFT_RSTn);
//peripheral select and lock flexcomm interface ID register
FLEXCOMM0->PSELID = FLEXCOMM_PSELID_PERSEL(0x01) | FLEXCOMM_PSELID_LOCK_MASK;
USART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
USART_Init(USART, &config, USART_CLK_FREQ);
/* Send string out. */
USART_WriteBlocking(USART, testString, (sizeof(testString) - 1));
while (1)
{
USART_ReadBlocking(USART, &ch, 1);
USART_WriteBlocking(USART, &ch, 1);
}