/************************************************************************* * Function Name: UART1_init * Parameters: none * Return: none * Description: UART port configuration *************************************************************************/ void UART1_init(void) { UART_HAL_DisableTransmitter(UART1_BASE_PTR); UART_HAL_DisableReceiver(UART1_BASE_PTR);/* disable uart operation */ UART_HAL_SetStopBitCount(UART1_BASE_PTR, kUartOneStopBit); UART_HAL_SetBaudRate(UART1_BASE_PTR, BUS_CLOCK, UART_BAUDRATE); //Configures the number of bits per character in the UART controller./ UART_HAL_SetBitCountPerChar(UART1_BASE_PTR, kUart8BitsPerChar);/*!< 8-bit data characters */ UART_HAL_SetParityMode(UART1_BASE_PTR, kUartParityDisabled);/*!< parity disabled */ UART_HAL_SetWaitModeOperation(UART1_BASE_PTR, kUartOperates);/*!< UART continues to operate normally */ UART_HAL_SetLoopCmd(UART1_BASE_PTR, false);/*£¡<Disable The UART loopback mode configuration */ UART_HAL_SetReceiverSource(UART1_BASE_PTR, kUartLoopBack);/*!< Internal loop back mode. */ UART_HAL_SetReceiverWakeupMethod(UART1_BASE_PTR, kUartIdleLineWake);/*!< The idle-line wakes UART receiver from standby */ UART_BWR_C1_ILT(UART1_BASE_PTR, 0);/*!<Idle character bit count starts after start bit.*/ UART_HAL_EnableTransmitter(UART1_BASE_PTR); UART_HAL_EnableReceiver(UART1_BASE_PTR);/* Enable uart operation */ #if defined(KV10Z7_SERIES) // Configure UART1 port pins: PTD0, PTD1 - ALT5 PORT_HAL_SetMuxMode(PORTD_BASE_PTR, 0, kPortMuxAlt5); PORT_HAL_SetMuxMode(PORTD_BASE_PTR, 1, kPortMuxAlt5); #elif (defined(KV10Z1287_SERIES) || defined(KV11Z7_SERIES)) // Configure UART1 port pins: PTE0, PTE1 - ALT3 PORT_HAL_SetMuxMode(PORTE_BASE_PTR, 0, kPortMuxAlt3); PORT_HAL_SetMuxMode(PORTE_BASE_PTR, 1, kPortMuxAlt3); #endif }
/*FUNCTION********************************************************************** * * Function Name : UART_DRV_DmaDeinit * Description : This function shuts down the UART by disabling UART DMA and * the transmitter/receiver. * *END**************************************************************************/ uart_status_t UART_DRV_DmaDeinit(uint32_t instance) { assert(instance < UART_INSTANCE_COUNT); assert(g_uartBase[instance]); /* Exit if current instance is already de-initialized or is gated.*/ if ((!g_uartStatePtr[instance]) || (!CLOCK_SYS_GetUartGateCmd(instance))) { return kStatus_UART_Fail; } UART_Type * base = g_uartBase[instance]; uart_dma_state_t * uartDmaState = (uart_dma_state_t *)g_uartStatePtr[instance]; /* Wait until the data is completely shifted out of shift register */ while(!(UART_BRD_S1_TC(base))) { } UART_HAL_SetTxDmaCmd(base, false); UART_HAL_SetRxDmaCmd(base, false); /* Release DMA channel. */ DMA_DRV_FreeChannel(&uartDmaState->dmaUartRx); DMA_DRV_FreeChannel(&uartDmaState->dmaUartTx); /* Disable TX and RX */ UART_HAL_DisableTransmitter(base); UART_HAL_DisableReceiver(base); /* Destroy TX and RX sema. */ OSA_SemaDestroy(&uartDmaState->txIrqSync); OSA_SemaDestroy(&uartDmaState->rxIrqSync); /* Cleared state pointer. */ g_uartStatePtr[instance] = NULL; /* Gate UART module clock */ CLOCK_SYS_DisableUartClock(instance); return kStatus_UART_Success; }
void serial_init(serial_t *obj, PinName tx, PinName rx) { uint32_t uart_tx = pinmap_peripheral(tx, PinMap_UART_TX); uint32_t uart_rx = pinmap_peripheral(rx, PinMap_UART_RX); obj->index = pinmap_merge(uart_tx, uart_rx); MBED_ASSERT((int)obj->index != NC); uint32_t uartSourceClock = CLOCK_SYS_GetUartFreq(obj->index); CLOCK_SYS_EnableUartClock(obj->index); uint32_t uart_addrs[] = UART_BASE_ADDRS; UART_HAL_Init(uart_addrs[obj->index]); UART_HAL_SetBaudRate(uart_addrs[obj->index], uartSourceClock, 9600); UART_HAL_SetParityMode(uart_addrs[obj->index], kUartParityDisabled); #if FSL_FEATURE_UART_HAS_STOP_BIT_CONFIG_SUPPORT UART_HAL_SetStopBitCount(uart_addrs[obj->index], kUartOneStopBit); #endif UART_HAL_SetBitCountPerChar(uart_addrs[obj->index], kUart8BitsPerChar); UART_HAL_DisableTransmitter(uart_addrs[obj->index]); UART_HAL_DisableReceiver(uart_addrs[obj->index]); pinmap_pinout(tx, PinMap_UART_TX); pinmap_pinout(rx, PinMap_UART_RX); if (tx != NC) { UART_HAL_FlushTxFifo(uart_addrs[obj->index]); UART_HAL_EnableTransmitter(uart_addrs[obj->index]); pin_mode(tx, PullUp); } if (rx != NC) { UART_HAL_EnableReceiver(uart_addrs[obj->index]); pin_mode(rx, PullUp); } if (obj->index == STDIO_UART) { stdio_uart_inited = 1; memcpy(&stdio_uart, obj, sizeof(serial_t)); } }