/*************************************************************************
 * 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;
}
Exemple #3
0
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));
    }
}