123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /*
- * Copyright (c) 2010-2012, 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.
- */
- /*!
- * @file imx_uart.h
- * @brief various defines used by imx_uart.c
- */
- #ifndef __IMX_UART_H__
- #define __IMX_UART_H__
- #include "sdk.h"
- //! @addtogroup diag_uart
- //! @{
- //////////////////////////////////////////////////////////////////////////
- //Constants
- /////////////////////////////////////////////////////////////////////////
- /* UART specific defines */
- //! @brief Modes of the PARITY for UART transfer.
- enum _uart_parity
- {
- PARITY_NONE = 0, //!< PARITY mode is PARITY_NONE.
- PARITY_EVEN = 2, //!< PARITY mode is PARITY_EVEN.
- PARITY_ODD = 3 //!< PARITY mode is PARITY_ODD.
- };
- //! @brief Number of stopbits after a character.
- enum _uart_stopbits
- {
- STOPBITS_ONE = 0, //!< One stopbits after a character.
- STOPBITS_TWO = 1 //!< Two stopbits after a character.
- };
- //! @brief Flow control mode for UART transfer.
- enum _uart_flowctrl
- {
- FLOWCTRL_OFF = 0, //!< Flow control off for UART transfer.
- FLOWCTRL_ON = 1 //!< Flow control on for UART transfer.
- };
- //! @brief Specify the FIFO for UART transfer.
- enum _uart_fifo
- {
- TX_FIFO = 0, //!< Config the TX fifo for UART transfer.
- RX_FIFO = 1 //!< Config the RX fifo for UART transfer.
- };
- //! @brief Specify the number of bits in a data
- enum _uart_bits
- {
- SEVENBITS = 0, //!< Config seven bits in a data.
- EIGHTBITS = 1 //!< Config eight bits in a data.
- };
- //! @brief Specify the service mode
- #define DMA_MODE 2 //!< Config the service mode for dma request.
- #define IRQ_MODE 1 //!< Config the service mode for interrupt.
- #define UART_MODULE_CLK(x) ((x) == HW_UART1 ? UART1_MODULE_CLK : (x) == HW_UART2 ? UART2_MODULE_CLK : (x) == HW_UART3 ? UART3_MODULE_CLK : (x) == HW_UART4 ? UART4_MODULE_CLK : -1)
- #define UART_IRQS(x) ((x) == HW_UART1 ? IMX_INT_UART1 : (x) == HW_UART2 ? IMX_INT_UART2 : (x) == HW_UART3 ? IMX_INT_UART3 : (x) == HW_UART4 ? IMX_INT_UART4 : (x) == HW_UART5 ? IMX_INT_UART5 : 0xFFFFFFFF)
- //////////////////////////////////////////////////////////////////////////
- //API
- /////////////////////////////////////////////////////////////////////////
- /*!
- * @brief Initialize the UART port
- *
- * @param instance the UART instance number.
- * @param baudrate serial baud rate such 9600, 57600, 115200, etc.
- * @param parity enable parity checking: PARITY_NONE, PARITY_EVEN,
- * PARITY_ODD.
- * @param stopbits number of stop bits: STOPBITS_ONE, STOPBITS_TWO.
- * @param datasize number of bits in a data: SEVENBITS, EIGHTBITS,
- * NINEBITS (like RS-485 but not supported).
- * @param flowcontrol enable (RTS/CTS) hardware flow control:
- * FLOWCTRL_ON, FLOWCTRL_OFF.
- */
- void uart_init(uint32_t instance, uint32_t baudrate, uint8_t parity,uint8_t stopbits, uint8_t datasize, uint8_t flowcontrol);
- /*!
- * @brief Output a character to UART port
- *
- * @param instance the UART instance number.
- * @param ch pointer to the character for output
- * @return the character that has been sent
- */
- uint8_t uart_putchar(uint32_t instance, uint8_t * ch);
- /*!
- * @brief Receive a character on the UART port
- *
- * @param instance the UART instance number.
- * @return a character received from the UART port; if the RX FIFO
- * is empty or errors are detected, it returns NONE_CHAR
- */
- uint8_t uart_getchar(uint32_t instance);
- /*!
- * @brief Configure the RX or TX FIFO level and trigger mode
- *
- * @param instance the UART instance number.
- * @param fifo FIFO to configure: RX_FIFO or TX_FIFO.
- * @param trigger_level set the trigger level of the FIFO to generate
- * an IRQ or a DMA request: number of characters.
- * @param service_mode FIFO served with DMA or IRQ or polling (default).
- */
- void uart_set_FIFO_mode(uint32_t instance, uint8_t fifo, uint8_t trigger_level,
- uint8_t service_mode);
- /*!
- * @brief Enables UART loopback test mode
- *
- * @param instance the UART instance number.
- * @param state enable/disable the loopback mode
- */
- void uart_set_loopback_mode(uint32_t instance, uint8_t state);
- /*!
- * @brief Setup UART interrupt. It enables or disables the related HW module
- * interrupt, and attached the related sub-routine into the vector table.
- *
- * @param instance the UART instance number.
- * @param irq_subroutine the UART interrupt interrupt routine.
- * @param state ENABLE or DISABLE the interrupt.
- */
- void uart_setup_interrupt(uint32_t instance, void (*irq_subroutine)(void), uint8_t state);
- /*!
- * @brief Obtain UART reference frequency
- *
- * @param instance the UART instance number.
- * @return reference frequency in Hz
- */
- uint32_t uart_get_reffreq(uint32_t instance);
- //! @name Board support functions
- //!
- //! These functions are called by the driver in order to factor out board
- //! specific functionality. They must be defined by the board support
- //! library or the application.
- //@{
- //! @brief Configure IOMUX for the UART driver.
- void uart_iomux_config(int instance);
- //@}
- //! @}
- #endif //__IMX_UART_H__
|