blob: 911b4e683310821eb9ff81cac1e44a00f6a832ad [file] [log] [blame]
/*
* Copyright (c) 2015, Freescale Semiconductor, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __UART_IMX_H__
#define __UART_IMX_H__
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#include "device_imx.h"
/*!
* @addtogroup uart_imx_driver
* @{
*/
/*******************************************************************************
* Definitions
******************************************************************************/
/*! @brief Uart module initialization structure. */
typedef struct _uart_init_config
{
uint32_t clockRate; /*!< Current UART module clock freq. */
uint32_t baudRate; /*!< Desired UART baud rate. */
uint32_t wordLength; /*!< Data bits in one frame. */
uint32_t stopBitNum; /*!< Number of stop bits in one frame. */
uint32_t parity; /*!< Parity error check mode of this module. */
uint32_t direction; /*!< Data transfer direction of this module. */
} uart_init_config_t;
/*! @brief UART number of data bits in a character. */
enum _uart_word_length
{
uartWordLength7Bits = 0x0, /*!< One character has 7 bits. */
uartWordLength8Bits = UART_UCR2_WS_MASK, /*!< One character has 8 bits. */
};
/*! @brief UART number of stop bits. */
enum _uart_stop_bit_num
{
uartStopBitNumOne = 0x0, /*!< One bit Stop. */
uartStopBitNumTwo = UART_UCR2_STPB_MASK, /*!< Two bits Stop. */
};
/*! @brief UART parity mode. */
enum _uart_partity_mode
{
uartParityDisable = 0x0, /*!< Parity error check disabled. */
uartParityEven = UART_UCR2_PREN_MASK, /*!< Even error check is selected. */
uartParityOdd = UART_UCR2_PREN_MASK | UART_UCR2_PROE_MASK, /*!< Odd error check is selected. */
};
/*! @brief Data transfer direction. */
enum _uart_direction_mode
{
uartDirectionDisable = 0x0, /*!< Both Tx and Rx are disabled. */
uartDirectionTx = UART_UCR2_TXEN_MASK, /*!< Tx is enabled. */
uartDirectionRx = UART_UCR2_RXEN_MASK, /*!< Rx is enabled. */
uartDirectionTxRx = UART_UCR2_TXEN_MASK | UART_UCR2_RXEN_MASK, /*!< Both Tx and Rx are enabled. */
};
/*! @brief This enumeration contains the settings for all of the UART interrupt configurations. */
enum _uart_interrupt
{
uartIntAutoBaud = 0x0080000F, /*!< Automatic baud rate detection Interrupt Enable. */
uartIntTxReady = 0x0080000D, /*!< transmitter ready Interrupt Enable. */
uartIntIdle = 0x0080000C, /*!< IDLE Interrupt Enable. */
uartIntRxReady = 0x00800009, /*!< Receiver Ready Interrupt Enable. */
uartIntTxEmpty = 0x00800006, /*!< Transmitter Empty Interrupt Enable. */
uartIntRtsDelta = 0x00800005, /*!< RTS Delta Interrupt Enable. */
uartIntEscape = 0x0084000F, /*!< Escape Sequence Interrupt Enable. */
uartIntRts = 0x00840004, /*!< Request to Send Interrupt Enable. */
uartIntAgingTimer = 0x00840003, /*!< Aging Timer Interrupt Enable. */
uartIntDtr = 0x0088000D, /*!< Data Terminal Ready Interrupt Enable. */
uartIntParityError = 0x0088000C, /*!< Parity Error Interrupt Enable. */
uartIntFrameError = 0x0088000B, /*!< Frame Error Interrupt Enable. */
uartIntDcd = 0x00880009, /*!< Data Carrier Detect Interrupt Enable. */
uartIntRi = 0x00880008, /*!< Ring Indicator Interrupt Enable. */
uartIntRxDs = 0x00880006, /*!< Receive Status Interrupt Enable. */
uartInttAirWake = 0x00880005, /*!< Asynchronous IR WAKE Interrupt Enable. */
uartIntAwake = 0x00880004, /*!< Asynchronous WAKE Interrupt Enable. */
uartIntDtrDelta = 0x00880003, /*!< Data Terminal Ready Delta Interrupt Enable. */
uartIntAutoBaudCnt = 0x00880000, /*!< Autobaud Counter Interrupt Enable. */
uartIntIr = 0x008C0008, /*!< Serial Infrared Interrupt Enable. */
uartIntWake = 0x008C0007, /*!< WAKE Interrupt Enable. */
uartIntTxComplete = 0x008C0003, /*!< TransmitComplete Interrupt Enable. */
uartIntBreakDetect = 0x008C0002, /*!< BREAK Condition Detected Interrupt Enable. */
uartIntRxOverrun = 0x008C0001, /*!< Receiver Overrun Interrupt Enable. */
uartIntRxDataReady = 0x008C0000, /*!< Receive Data Ready Interrupt Enable. */
uartIntRs485SlaveAddrMatch = 0x00B80003, /*!< RS-485 Slave Address Detected Interrupt Enable. */
};
/*! @brief Flag for UART interrupt/DMA status check or polling status. */
enum _uart_status_flag
{
uartStatusRxCharReady = 0x0000000F, /*!< Rx Character Ready Flag. */
uartStatusRxError = 0x0000000E, /*!< Rx Error Detect Flag. */
uartStatusRxOverrunError = 0x0000000D, /*!< Rx Overrun Flag. */
uartStatusRxFrameError = 0x0000000C, /*!< Rx Frame Error Flag. */
uartStatusRxBreakDetect = 0x0000000B, /*!< Rx Break Detect Flag. */
uartStatusRxParityError = 0x0000000A, /*!< Rx Parity Error Flag. */
uartStatusParityError = 0x0094000F, /*!< Parity Error Interrupt Flag. */
uartStatusRtsStatus = 0x0094000E, /*!< RTS_B Pin Status Flag. */
uartStatusTxReady = 0x0094000D, /*!< Transmitter Ready Interrupt/DMA Flag. */
uartStatusRtsDelta = 0x0094000C, /*!< RTS Delta Flag. */
uartStatusEscape = 0x0094000B, /*!< Escape Sequence Interrupt Flag. */
uartStatusFrameError = 0x0094000A, /*!< Frame Error Interrupt Flag. */
uartStatusRxReady = 0x00940009, /*!< Receiver Ready Interrupt/DMA Flag. */
uartStatusAgingTimer = 0x00940008, /*!< Ageing Timer Interrupt Flag. */
uartStatusDtrDelta = 0x00940007, /*!< DTR Delta Flag. */
uartStatusRxDs = 0x00940006, /*!< Receiver IDLE Interrupt Flag. */
uartStatustAirWake = 0x00940005, /*!< Asynchronous IR WAKE Interrupt Flag. */
uartStatusAwake = 0x00940004, /*!< Asynchronous WAKE Interrupt Flag. */
uartStatusRs485SlaveAddrMatch = 0x00940003, /*!< RS-485 Slave Address Detected Interrupt Flag. */
uartStatusAutoBaud = 0x0098000F, /*!< Automatic Baud Rate Detect Complete Flag. */
uartStatusTxEmpty = 0x0098000E, /*!< Transmit Buffer FIFO Empty. */
uartStatusDtr = 0x0098000D, /*!< DTR edge triggered interrupt flag. */
uartStatusIdle = 0x0098000C, /*!< Idle Condition Flag. */
uartStatusAutoBaudCntStop = 0x0098000B, /*!< Autobaud Counter Stopped Flag. */
uartStatusRiDelta = 0x0098000A, /*!< Ring Indicator Delta Flag. */
uartStatusRi = 0x00980009, /*!< Ring Indicator Input Flag. */
uartStatusIr = 0x00980008, /*!< Serial Infrared Interrupt Flag. */
uartStatusWake = 0x00980007, /*!< Wake Flag. */
uartStatusDcdDelta = 0x00980006, /*!< Data Carrier Detect Delta Flag. */
uartStatusDcd = 0x00980005, /*!< Data Carrier Detect Input Flag. */
uartStatusRts = 0x00980004, /*!< RTS Edge Triggered Interrupt Flag. */
uartStatusTxComplete = 0x00980003, /*!< Transmitter Complete Flag. */
uartStatusBreakDetect = 0x00980002, /*!< BREAK Condition Detected Flag. */
uartStatusRxOverrun = 0x00980001, /*!< Overrun Error Flag. */
uartStatusRxDataReady = 0x00980000, /*!< Receive Data Ready Flag. */
};
/*! @brief The events generate the DMA Request. */
enum _uart_dma
{
uartDmaRxReady = 0x00800008, /*!< Receive Ready DMA Enable. */
uartDmaTxReady = 0x00800003, /*!< Transmitter Ready DMA Enable. */
uartDmaAgingTimer = 0x00800002, /*!< Aging DMA Timer Enable. */
uartDmaIdle = 0x008C0006, /*!< DMA IDLE Condition Detected Interrupt Enable. */
};
/*! @brief RTS pin interrupt trigger edge. */
enum _uart_rts_int_trigger_edge
{
uartRtsTriggerEdgeRising = UART_UCR2_RTEC(0), /*!< RTS pin interrupt triggered on rising edge. */
uartRtsTriggerEdgeFalling = UART_UCR2_RTEC(1), /*!< RTS pin interrupt triggered on falling edge. */
uartRtsTriggerEdgeBoth = UART_UCR2_RTEC(2), /*!< RTS pin interrupt triggered on both edge. */
};
/*! @brief UART module modem role selections. */
enum _uart_modem_mode
{
uartModemModeDce = 0, /*!< UART module works as DCE. */
uartModemModeDte = UART_UFCR_DCEDTE_MASK, /*!< UART module works as DTE. */
};
/*! @brief DTR pin interrupt trigger edge. */
enum _uart_dtr_int_trigger_edge
{
uartDtrTriggerEdgeRising = UART_UCR3_DPEC(0), /*!< DTR pin interrupt triggered on rising edge. */
uartDtrTriggerEdgeFalling = UART_UCR3_DPEC(1), /*!< DTR pin interrupt triggered on falling edge. */
uartDtrTriggerEdgeBoth = UART_UCR3_DPEC(2), /*!< DTR pin interrupt triggered on both edge. */
};
/*! @brief IrDA vote clock selections. */
enum _uart_irda_vote_clock
{
uartIrdaVoteClockSampling = 0x0, /*!< The vote logic uses the sampling clock (16x baud rate) for normal operation. */
uartIrdaVoteClockReference = UART_UCR4_IRSC_MASK, /*!< The vote logic uses the UART reference clock. */
};
/*! @brief UART module Rx Idle condition selections. */
enum _uart_rx_idle_condition
{
uartRxIdleMoreThan4Frames = UART_UCR1_ICD(0), /*!< Idle for more than 4 frames. */
uartRxIdleMoreThan8Frames = UART_UCR1_ICD(1), /*!< Idle for more than 8 frames. */
uartRxIdleMoreThan16Frames = UART_UCR1_ICD(2), /*!< Idle for more than 16 frames. */
uartRxIdleMoreThan32Frames = UART_UCR1_ICD(3), /*!< Idle for more than 32 frames. */
};
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @name UART Initialization and Configuration functions
* @{
*/
/*!
* @brief Initialize UART module with given initialization structure.
*
* @param base UART base pointer.
* @param initConfig UART initialization structure (see @ref uart_init_config_t structure above).
*/
void UART_Init(UART_Type* base, const uart_init_config_t* initConfig);
/*!
* @brief This function reset UART module register content to its default value.
*
* @param base UART base pointer.
*/
void UART_Deinit(UART_Type* base);
/*!
* @brief This function is used to Enable the UART Module.
*
* @param base UART base pointer.
*/
static inline void UART_Enable(UART_Type* base)
{
UART_UCR1_REG(base) |= UART_UCR1_UARTEN_MASK;
}
/*!
* @brief This function is used to Disable the UART Module.
*
* @param base UART base pointer.
*/
static inline void UART_Disable(UART_Type* base)
{
UART_UCR1_REG(base) &= ~UART_UCR1_UARTEN_MASK;
}
/*!
* @brief This function is used to set the baud rate of UART Module.
*
* @param base UART base pointer.
* @param clockRate UART module clock frequency.
* @param baudRate Desired UART module baud rate.
*/
void UART_SetBaudRate(UART_Type* base, uint32_t clockRate, uint32_t baudRate);
/*!
* @brief This function is used to set the transform direction of UART Module.
*
* @param base UART base pointer.
* @param direction UART transfer direction (see @ref _uart_direction_mode enumeration).
*/
static inline void UART_SetDirMode(UART_Type* base, uint32_t direction)
{
assert((direction & uartDirectionTx) || (direction & uartDirectionRx));
UART_UCR2_REG(base) = (UART_UCR2_REG(base) & ~(UART_UCR2_RXEN_MASK | UART_UCR2_TXEN_MASK)) | direction;
}
/*!
* @brief This function is used to set the number of frames RXD is allowed to
* be idle before an idle condition is reported. The available condition
* can be select from @ref _uart_idle_condition enumeration.
*
* @param base UART base pointer.
* @param idleCondition The condition that an idle condition is reported
* (see @ref _uart_idle_condition enumeration).
*/
static inline void UART_SetRxIdleCondition(UART_Type* base, uint32_t idleCondition)
{
assert(idleCondition <= uartRxIdleMoreThan32Frames);
UART_UCR1_REG(base) = (UART_UCR1_REG(base) & ~UART_UCR1_ICD_MASK) | idleCondition;
}
/*!
* @brief This function is used to set the polarity of UART signal. The polarity
* of Tx and Rx can be set separately.
*
* @param base UART base pointer.
* @param direction UART transfer direction (see @ref _uart_direction_mode enumeration).
* @param invert Set true to invert the polarity of UART signal.
*/
void UART_SetInvertCmd(UART_Type* base, uint32_t direction, bool invert);
/*@}*/
/*!
* @name Low Power Mode functions.
* @{
*/
/*!
* @brief This function is used to set UART enable condition in the DOZE state.
*
* @param base UART base pointer.
* @param enable Enable/Disable UART module in doze mode.
* - true: Enable UART module in doze mode.
* - false: Disable UART module in doze mode.
*/
void UART_SetDozeMode(UART_Type* base, bool enable);
/*!
* @brief This function is used to set UART enable condition of the UART low power feature.
*
* @param base UART base pointer.
* @param enable Enable/Disable UART module low power feature.
* - true: Enable UART module low power feature.
* - false: Disable UART module low power feature.
*/
void UART_SetLowPowerMode(UART_Type* base, bool enable);
/*@}*/
/*!
* @name Data transfer functions.
* @{
*/
/*!
* @brief This function is used to send data in RS-232 and IrDA Mode.
* A independent 9 Bits RS-485 send data function is provided.
*
* @param base UART base pointer.
* @param data Data to be set through UART module.
*/
static inline void UART_Putchar(UART_Type* base, uint8_t data)
{
UART_UTXD_REG(base) = (data & UART_UTXD_TX_DATA_MASK);
}
/*!
* @brief This function is used to receive data in RS-232 and IrDA Mode.
* A independent 9 Bits RS-485 receive data function is provided.
*
* @param base UART base pointer.
* @return The data received from UART module.
*/
static inline uint8_t UART_Getchar(UART_Type* base)
{
return (uint8_t)(UART_URXD_REG(base) & UART_URXD_RX_DATA_MASK);
}
/*@}*/
/*!
* @name Interrupt and Flag control functions.
* @{
*/
/*!
* @brief This function is used to set the enable condition of
* specific UART interrupt source. The available interrupt
* source can be select from @ref _uart_interrupt enumeration.
*
* @param base UART base pointer.
* @param intSource Available interrupt source for this module.
* @param enable Enable/Disable corresponding interrupt.
* - true: Enable corresponding interrupt.
* - false: Disable corresponding interrupt.
*/
void UART_SetIntCmd(UART_Type* base, uint32_t intSource, bool enable);
/*!
* @brief This function is used to get the current status of specific
* UART status flag(including interrupt flag). The available
* status flag can be select from @ref _uart_status_flag enumeration.
*
* @param base UART base pointer.
* @param flag Status flag to check.
* @return current state of corresponding status flag.
*/
static inline bool UART_GetStatusFlag(UART_Type* base, uint32_t flag){
volatile uint32_t* uart_reg = 0;
uart_reg = (uint32_t *)((uint32_t)base + (flag >> 16));
return (bool)((*uart_reg >> (flag & 0x0000FFFF)) & 0x1);
}
/*!
* @brief This function is used to get the current status
* of specific UART status flag. The available status
* flag can be select from @ref _uart_status_flag enumeration.
*
* @param base UART base pointer.
* @param flag Status flag to clear.
*/
void UART_ClearStatusFlag(UART_Type* base, uint32_t flag);
/*@}*/
/*!
* @name DMA control functions.
* @{
*/
/*!
* @brief This function is used to set the enable condition of
* specific UART DMA source. The available DMA source
* can be select from @ref _uart_dma enumeration.
*
* @param base UART base pointer.
* @param dmaSource The Event that can generate DMA request.
* @param enable Enable/Disable corresponding DMA source.
* - true: Enable corresponding DMA source.
* - false: Disable corresponding DMA source.
*/
void UART_SetDmaCmd(UART_Type* base, uint32_t dmaSource, bool enable);
/*@}*/
/*!
* @name FIFO control functions.
* @{
*/
/*!
* @brief This function is used to set the watermark of UART Tx FIFO.
* A maskable interrupt is generated whenever the data level in
* the TxFIFO falls below the Tx FIFO watermark.
*
* @param base UART base pointer.
* @param watermark The Tx FIFO watermark.
*/
static inline void UART_SetTxFifoWatermark(UART_Type* base, uint8_t watermark)
{
assert((watermark >= 2) && (watermark <= 32));
UART_UFCR_REG(base) = (UART_UFCR_REG(base) & ~UART_UFCR_TXTL_MASK) | UART_UFCR_TXTL(watermark);
}
/*!
* @brief This function is used to set the watermark of UART Rx FIFO.
* A maskable interrupt is generated whenever the data level in
* the RxFIFO reaches the Rx FIFO watermark.
*
* @param base UART base pointer.
* @param watermark The Rx FIFO watermark.
*/
static inline void UART_SetRxFifoWatermark(UART_Type* base, uint8_t watermark)
{
assert(watermark <= 32);
UART_UFCR_REG(base) = (UART_UFCR_REG(base) & ~UART_UFCR_RXTL_MASK) | UART_UFCR_RXTL(watermark);
}
/*@}*/
/*!
* @name Hardware Flow control and Modem Signal functions.
* @{
*/
/*!
* @brief This function is used to set the enable condition of RTS
* Hardware flow control.
*
* @param base UART base pointer.
* @param enable Enable/Disbale RTS hardware flow control.
* - true: Enable RTS hardware flow control.
* - false: Disbale RTS hardware flow control.
*/
void UART_SetRtsFlowCtrlCmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to set the RTS interrupt trigger edge.
* The available trigger edge can be select from
* @ref _uart_rts_trigger_edge enumeration.
*
* @param base UART base pointer.
* @param triggerEdge Available RTS pin interrupt trigger edge.
*/
static inline void UART_SetRtsIntTriggerEdge(UART_Type* base, uint32_t triggerEdge)
{
assert((triggerEdge == uartRtsTriggerEdgeRising) || \
(triggerEdge == uartRtsTriggerEdgeFalling) || \
(triggerEdge == uartRtsTriggerEdgeBoth));
UART_UCR2_REG(base) = (UART_UCR2_REG(base) & ~UART_UCR2_RTEC_MASK) | triggerEdge;
}
/*!
* @brief This function is used to set the enable condition of CTS
* auto control. if CTS control is enabled, the CTS_B pin
* is controlled by the receiver, otherwise the CTS_B pin is
* controlled by UART_CTSPinCtrl function.
*
* @param base UART base pointer.
* @param enable Enable/Disable CTS auto control.
* - true: Enable CTS auto control.
* - false: Disable CTS auto control.
*/
void UART_SetCtsFlowCtrlCmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to control the CTS_B pin state when
* auto CTS control is disabled.
* The CTS_B pin is low(active)
* The CTS_B pin is high(inactive)
*
* @param base UART base pointer.
* @param active The CTS_B pin state to set.
* - true: the CTS_B pin active;
* - false: the CTS_B pin inactive.
*/
void UART_SetCtsPinLevel(UART_Type* base, bool active);
/*!
* @brief This function is used to set the auto CTS_B pin control
* trigger level. The CTS_B pin is de-asserted when
* Rx FIFO reach CTS trigger level.
*
* @param base UART base pointer.
* @param triggerLevel Auto CTS_B pin control trigger level.
*/
static inline void UART_SetCtsTriggerLevel(UART_Type* base, uint8_t triggerLevel)
{
assert(triggerLevel <= 32);
UART_UCR4_REG(base) = (UART_UCR4_REG(base) & ~UART_UCR4_CTSTL_MASK) | UART_UCR4_CTSTL(triggerLevel);
}
/*!
* @brief This function is used to set the role (DTE/DCE) of UART module
* in RS-232 communication.
*
* @param base UART base pointer.
* @param mode The role(DTE/DCE) of UART module (see @ref _uart_modem_mode enumeration).
*/
void UART_SetModemMode(UART_Type* base, uint32_t mode);
/*!
* @brief This function is used to set the edge of DTR_B (DCE) or
* DSR_B (DTE) on which an interrupt is generated.
*
* @param base UART base pointer.
* @param triggerEdge The trigger edge on which an interrupt is generated
* (see @ref _uart_dtr_trigger_edge enumeration above).
*/
static inline void UART_SetDtrIntTriggerEdge(UART_Type* base, uint32_t triggerEdge)
{
assert((triggerEdge == uartDtrTriggerEdgeRising) || \
(triggerEdge == uartDtrTriggerEdgeFalling) || \
(triggerEdge == uartDtrTriggerEdgeBoth));
UART_UCR3_REG(base) = (UART_UCR3_REG(base) & ~UART_UCR3_DPEC_MASK) | triggerEdge;
}
/*!
* @brief This function is used to set the pin state of DSR pin(for DCE mode)
* or DTR pin(for DTE mode) for the modem interface.
*
* @param base UART base pointer.
* @param active The state of DSR pin.
* - true: DSR/DTR pin is logic one.
* - false: DSR/DTR pin is logic zero.
*/
void UART_SetDtrPinLevel(UART_Type* base, bool active);
/*!
* @brief This function is used to set the pin state of
* DCD pin. THIS FUNCTION IS FOR DCE MODE ONLY.
*
* @param base UART base pointer.
* @param active The state of DCD pin.
* - true: DCD_B pin is logic one (DCE mode)
* - false: DCD_B pin is logic zero (DCE mode)
*/
void UART_SetDcdPinLevel(UART_Type* base, bool active);
/*!
* @brief This function is used to set the pin state of
* RI pin. THIS FUNCTION IS FOR DCE MODE ONLY.
*
* @param base UART base pointer.
* @param active The state of RI pin.
* - true: RI_B pin is logic one (DCE mode)
* - false: RI_B pin is logic zero (DCE mode)
*/
void UART_SetRiPinLevel(UART_Type* base, bool active);
/*@}*/
/*!
* @name Multiprocessor and RS-485 functions.
* @{
*/
/*!
* @brief This function is used to send 9 Bits length data in
* RS-485 Multidrop mode.
*
* @param base UART base pointer.
* @param data Data(9 bits) to be set through UART module.
*/
void UART_Putchar9(UART_Type* base, uint16_t data);
/*!
* @brief This functions is used to receive 9 Bits length data in
* RS-485 Multidrop mode.
*
* @param base UART base pointer.
* @return The data(9 bits) received from UART module.
*/
uint16_t UART_Getchar9(UART_Type* base);
/*!
* @brief This function is used to set the enable condition of
* 9-Bits data or Multidrop mode.
*
* @param base UART base pointer.
* @param enable Enable/Disable Multidrop mode.
* - true: Enable Multidrop mode.
* - false: Disable Multidrop mode.
*/
void UART_SetMultidropMode(UART_Type* base, bool enable);
/*!
* @brief This function is used to set the enable condition of
* Automatic Address Detect Mode.
*
* @param base UART base pointer.
* @param enable Enable/Disable Automatic Address Detect mode.
* - true: Enable Automatic Address Detect mode.
* - false: Disable Automatic Address Detect mode.
*/
void UART_SetSlaveAddressDetectCmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to set the slave address char
* that the receiver tries to detect.
*
* @param base UART base pointer.
* @param slaveAddress The slave to detect.
*/
static inline void UART_SetSlaveAddress(UART_Type* base, uint8_t slaveAddress)
{
UART_UMCR_REG(base) = (UART_UMCR_REG(base) & ~UART_UMCR_SLADDR_MASK) | \
UART_UMCR_SLADDR(slaveAddress);
}
/*@}*/
/*!
* @name IrDA control functions.
* @{
*/
/*!
* @brief This function is used to set the enable condition of
* IrDA Mode.
*
* @param base UART base pointer.
* @param enable Enable/Disable IrDA mode.
* - true: Enable IrDA mode.
* - false: Disable IrDA mode.
*/
void UART_SetIrDACmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to set the clock for the IR pulsed
* vote logic. The available clock can be select from
* @ref _uart_irda_vote_clock enumeration.
*
* @param base UART base pointer.
* @param voteClock The available IrDA vote clock selection.
*/
void UART_SetIrDAVoteClock(UART_Type* base, uint32_t voteClock);
/*@}*/
/*!
* @name Misc. functions.
* @{
*/
/*!
* @brief This function is used to set the enable condition of
* Automatic Baud Rate Detection feature.
*
* @param base UART base pointer.
* @param enable Enable/Disable Automatic Baud Rate Detection feature.
* - true: Enable Automatic Baud Rate Detection feature.
* - false: Disable Automatic Baud Rate Detection feature.
*/
void UART_SetAutoBaudRateCmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to read the current value of Baud Rate
* Count Register value. this counter is used by Auto Baud Rate
* Detect feature.
*
* @param base UART base pointer.
* @return Current Baud Rate Count Register value.
*/
static inline uint16_t UART_ReadBaudRateCount(UART_Type* base)
{
return (uint16_t)(UART_UBRC_REG(base) & UART_UBRC_BCNT_MASK);
}
/*!
* @brief This function is used to send BREAK character.It is
* important that SNDBRK is asserted high for a sufficient
* period of time to generate a valid BREAK.
*
* @param base UART base pointer.
* @param active Asserted high to generate BREAK.
* - true: Generate BREAK character.
* - false: Stop generate BREAK character.
*/
void UART_SendBreakChar(UART_Type* base, bool active);
/*!
* @brief This function is used to Enable/Disable the Escape
* Sequence Decection feature.
*
* @param base UART base pointer.
* @param enable Enable/Disable Escape Sequence Decection.
* - true: Enable Escape Sequence Decection.
* - false: Disable Escape Sequence Decection.
*/
void UART_SetEscapeDecectCmd(UART_Type* base, bool enable);
/*!
* @brief This function is used to set the enable condition of
* Escape Sequence Detection feature.
*
* @param base UART base pointer.
* @param escapeChar The Escape Character to detect.
*/
static inline void UART_SetEscapeChar(UART_Type* base, uint8_t escapeChar)
{
UART_UESC_REG(base) = (UART_UESC_REG(base) & ~UART_UESC_ESC_CHAR_MASK) | \
UART_UESC_ESC_CHAR(escapeChar);
}
/*!
* @brief This function is used to set the maximum time interval (in ms)
* allowed between escape characters.
*
* @param base UART base pointer.
* @param timerInterval Maximum time interval allowed between escape characters.
*/
static inline void UART_SetEscapeTimerInterval(UART_Type* base, uint16_t timerInterval)
{
assert(timerInterval <= 0xFFF);
UART_UTIM_REG(base) = (UART_UTIM_REG(base) & ~UART_UTIM_TIM_MASK) | \
UART_UTIM_TIM(timerInterval);
}
/*@}*/
#ifdef __cplusplus
}
#endif
/*! @}*/
#endif /* __UART_IMX_H__ */
/*******************************************************************************
* EOF
******************************************************************************/