| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- /**
- * \file uart.h
- *
- * \brief This file contains the function prototypes for the device
- * abstraction layer for UART. It also contains some
- * related macro definitions and some files to be included.
- */
- /*
- * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
- */
- /*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 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.
- *
- * Neither the name of Texas Instruments Incorporated 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
- * OWNER 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_H__
- #define __UART_H__
- #include <stdio.h>
- #include <stdlib.h>
- #include "hw_uart.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define UART_TX_FIFO_LENGTH 16
- #define UART_RX_FIFO_LENGTH 16
- #define UART_MAX_TRIAL_COUNT 0x0FFF
- #define BAUD_115200 115200
- //***********************************************************************
- // Values that can be used by the application for configuration via APIs
- //***********************************************************************/
- /***********************************************************************/
- /*
- ** The macros below are used to set the reciever trigger levels.
- ** One of the macros below is passed as 'rxLevel' to'UARTFIFOLevelSet',
- ** as 'flags' to 'UARTDMAEnable' and to 'UARTDMADisable'.
- */
- /* This is used to select the receiver trigger level as 1 byte.*/
- #define UART_RX_TRIG_LEVEL_1 (UART_FCR_RXFIFTL_CHAR1 \
- << UART_FCR_RXFIFTL_SHIFT)
- /* This is used to select the receiver trigger level as 4 bytes.*/
- #define UART_RX_TRIG_LEVEL_4 (UART_FCR_RXFIFTL_CHAR4 \
- << UART_FCR_RXFIFTL_SHIFT)
- /* This is used to select the receiver trigger level as 8 bytes.*/
- #define UART_RX_TRIG_LEVEL_8 (UART_FCR_RXFIFTL_CHAR8 \
- << UART_FCR_RXFIFTL_SHIFT)
- /* This is used to select the receiver trigger level as 14 bytes.*/
- #define UART_RX_TRIG_LEVEL_14 (UART_FCR_RXFIFTL_CHAR14 \
- << UART_FCR_RXFIFTL_SHIFT)
- /* This is used as a mask for the Receiver Trigger Level Selection bits.*/
- #define UART_RX_TRIG_LEVEL UART_FCR_RXFIFTL
- /***************************************************************************/
- /***************************************************************************/
- /*
- ** These macros are used to control bits in FIFO Control register(FCR).
- ** These are used in the functions: 'UARTFIFOEnable', 'UARTFIFOLevelSet'
- ** 'UARTDMAEnable', 'UARTDMADisable'.
- ** An appropriate combination of the below has to be sent as 'rxLevel' to
- ** 'UARTFIFOLevelSet', as 'flags' to 'UARTDMAEnable' and 'UARTDMADisable'.
- */
- /* This is used to enable/disable the DMA mode of operation.*/
- #define UART_DMAMODE UART_FCR_DMAMODE1
- /* This is used to clear the Transmitter FIFO and to reset the transmitter
- * FIFO counter.*/
- #define UART_TX_CLEAR UART_FCR_TXCLR
- /* This is used to clear the Receiver FIFO and to reset the receiver FIFO
- * counter.*/
- #define UART_RX_CLEAR UART_FCR_RXCLR
- /* This is used to enable/disable the FIFO mode of operation.*/
- #define UART_FIFO_MODE UART_FCR_FIFOEN
- /***************************************************************************/
- /************************************************************************/
- /*
- ** These macros are used to set the Parity settings.
- ** They are used in the functions 'UARTConfigSetExpClk', 'UARTConfigGetExpClk',
- ** 'UARTParityModeSet', 'UARTParityModeGet'.
- */
- /* This is used to set odd parity.*/
- #define UART_PARITY_ODD UART_LCR_PEN
- /* This is used to configure even parity.*/
- #define UART_PARITY_EVEN (UART_LCR_PEN | UART_LCR_EPS)
- /* This is used to configure odd parity with Stick Parity Enable.*/
- #define UART_PARITY_STICK_ODD (UART_PARITY_ODD | UART_LCR_SP)
- /* This is used to configure even parity with Stick Parity Enable.*/
- #define UART_PARITY_STICK_EVEN (UART_PARITY_EVEN | UART_LCR_SP)
- /* This is used to configure no parity.*/
- #define UART_PARITY_NONE UART_LCR_EPS_ODD
- /************************************************************************/
- /***************************************************************************/
- /*
- ** These macros are used to control bits in the Line Control Register(LCR).
- ** These are used in the functions: 'UARTConfigSetExpClk','UARTConfigGetExpClk'
- ** 'UARTParityModeSet', 'UARTParityModeGet'.
- ** An appropriate combination of the below has to be sent as 'config' parameter
- ** to 'UARTConfigSetExpClk',as 'parityMode' to 'UARTParityModeSet'.
- */
- /* This is used to select Divisor Latch Access Bit(DLAB).*/
- #define UART_DLAB UART_LCR_DLAB
- /* This is used to enable/disable Break Condition.*/
- #define UART_BREAK_CTRL UART_LCR_BC
- /* This is used to enable/disable Stick Parity Feature.*/
- #define UART_STICK_PARITY UART_LCR_SP
- /* This is used to select Even Parity /Odd parity.*/
- #define UART_SET_PARITY_TYPE UART_LCR_EPS
- /* This is used to enable/disable Parity feature.*/
- #define UART_PARITY UART_LCR_PEN
- /* This is used to select single/multiple stop bits.*/
- #define UART_STOP_BIT UART_LCR_STB
- /* This can be used as a mask for word length selection bits.*/
- #define UART_WORDL UART_LCR_WLS
- /* This is used to select character length as 5 bits per frame.*/
- #define UART_WORDL_5BITS UART_LCR_WLS_5BITS
- /* This is used to select character length as 6 bits per frame.*/
- #define UART_WORDL_6BITS UART_LCR_WLS_6BITS
- /* This is used to select character lenghth as 7 bits per frame.*/
- #define UART_WORDL_7BITS UART_LCR_WLS_7BITS
- /* This is used to select character length as 8 bits per frame.*/
- #define UART_WORDL_8BITS UART_LCR_WLS_8BITS
- /****************************************************************************/
- /*****************************************************************************/
- /*
- ** These macros are used to analyze bits in Line Status Register(LSR).
- ** These are used in the functions: 'UARTSpaceAvail','UARTCharsAvail',
- ** 'UARTCharGet','UARTCharGetNonBlocking'.'UARTCharPut','UARTCharPutNonBlocking'
- ** 'UARTRxErrorGet', 'UARTRxErrorGet'.
- */
- /* This is used to identify if Receiver FIFO error has occured. */
- #define UART_RXFIFO_ERROR UART_LSR_RXFIFOE
- /* This is used to identify if both the Transmitter Holding Register(THR) and
- * Transmitter Shift Register(TSR) are empty.*/
- #define UART_THR_TSR_EMPTY UART_LSR_TEMT
- /* This is used to identify if the THR alone is empty.*/
- #define UART_THR_EMPTY UART_LSR_THRE
- /* This is used to identify if the Break Indicator bit is set.*/
- #define UART_BREAK_IND UART_LSR_BI
- /* This is used to identify if Framing Error has occured.*/
- #define UART_FRAME_ERROR UART_LSR_FE
- /* This is used to identify if Parity Error has occured.*/
- #define UART_PARITY_ERROR UART_LSR_PE
- /* This is used to identify if Overrun Error has occured.*/
- #define UART_OVERRUN_ERROR UART_LSR_OE
- /* This is used to identify if atleast one full byte is present in the Receiver
- * FIFO(RBR register for non-FIFO mode) and ready to be read.*/
- #define UART_DATA_READY UART_LSR_DR
- /*******************************************************************************/
- /*******************************************************************************/
- /*
- ** These macros are used to enable/disable interrupts in the Interrupt Enable
- ** Register(IER).
- ** These are used in functions: 'UARTIntEnable', 'UARTIntDisable'.
- ** An approrpriate combination of the below has to be passed as 'intFlags'
- ** to 'UARTIntEnable'and also to 'UARTIntDisable'.
- */
- /* This is used to enable/disable Modem Status Interrupt.*/
- #define UART_INT_MODEM_STAT UART_IER_EDSSI
- /* This is used to enable/disable Line Status Interrupt.*/
- #define UART_INT_LINE_STAT UART_IER_ELSI
- /* This is used to enable/disable Transmitter Empty Interrupt.*/
- #define UART_INT_TX_EMPTY UART_IER_ETBEI
- /* This is used to enable/disable Receiver Data Available and Character Timeout
- Interrupt*/
- #define UART_INT_RXDATA_CTI UART_IER_ERBI
- /************************************************************************/
- /***************************************************************************/
- /*
- ** These macros are used to identify what events have generated interrupts.
- ** These are used in the function: 'UARTIntStatus'.
- ** One of the macro below is returned by 'UARTIntStatus'. Refer to
- ** definition of 'UARTIntStatus' function for more information.
- */
- /* This is used to identify whether FIFO mode is enabled or not.*/
- #define UART_FIFOEN_STAT UART_IIR_FIFOEN
- /* This can be used as a mask for the Interrupt Identification(INTID) bits in
- * the Interrupt Identification Register(IIR).*/
- #define UART_INTID UART_IIR_INTID
- /* This is used to identify whether Transmitter Empty event has generated an
- ** interrupt.
- */
- #define UART_INTID_TX_EMPTY UART_IIR_INTID_THRE
- /* This is used to identify whether Receiver Data Available event has generated
- * an interrupt.*/
- #define UART_INTID_RX_DATA UART_IIR_INTID_RDA
- /* This is used to identify whether Receiver Line Status event has generated
- * an interrupt.*/
- #define UART_INTID_RX_LINE_STAT UART_IIR_INTID_RLS
- /* This is used to identify whether Character Timeout event has generated an
- * interrupt.*/
- #define UART_INTID_CTI UART_IIR_INTID_CTI
- /* This is used to identify whether the servicing of any interrupt is pending
- * or not. */
- #define UART_INTID_IPEND UART_IIR_IPEND
- /***************************************************************************/
- /****************************************************************************/
- /*
- ** These macros are used to control bits in the Modem Control Register(MCR).
- ** These are used by the functions: 'UARTModemControlSet','UARTModemControlClear'
- ** 'UARTModemControlGet'.
- ** An appropriate combination of the below is passed as 'ctrlFlags' to
- ** 'UARTModemControlSet' and also to 'UARTModemControlClear'.
- */
- /* This is used to select Autoflow control feature.*/
- #define UART_AUTOFLOW UART_MCR_AFE
- /* This is used to select Loopback mode feature.*/
- #define UART_LOOPBACK UART_MCR_LOOP
- /* This is used to select OUT2 control bit.*/
- #define UART_OUT2_CTRL UART_MCR_OUT2
- /* This is used to select OUT1 control bit.*/
- #define UART_OUT1_CTRL UART_MCR_OUT1
- /* This is used to select Request To Send(RTS) bit.*/
- #define UART_RTS UART_MCR_RTS
- /****************************************************************************/
- /****************************************************************************/
- /* These macros are used to analyze the bits in Modem Status Register(MSR).
- ** An appropriate combination of the macros below is used in the function:
- ** 'UARTModemStatusGet'.
- */
- #define UART_CD UART_MSR_CD
- #define UART_RI UART_MSR_RI
- #define UART_DSR UART_MSR_DSR
- #define UART_CTS UART_MSR_CTS
- #define UART_DCD UART_MSR_DCD
- #define UART_TERI UART_MSR_TERI
- #define UART_DDSR UART_MSR_DDSR
- #define UART_DCTS UART_MSR_DCTS
- /****************************************************************************/
- /*
- ** These macros are used to control bits in Power and Emulation Management
- ** Register(PWREMU_MGMT).
- ** These are used in the functions: 'UARTEnable', 'UARTDisable'.
- */
- /* This is used to reset and enable/disable the Transmitter.*/
- #define UART_TX_RST_ENABLE UART_PWREMU_MGMT_UTRST
- /* This is used to reset and enable/disable the Receiver.*/
- #define UART_RX_RST_ENABLE UART_PWREMU_MGMT_URRST
- /* This is used to enable/disable Free Running Mode of operation. */
- #define UART_FREE_MODE UART_PWREMU_MGMT_FREE
- /****************************************************************************/
- /****************************************************************************/
- /*
- ** These macros are used to control bits in Mode Definition Register(MDR).
- ** These are used in the functions: 'UARTConfigSetExpClk',
- ** 'UARTConfigGetExpClk'
- */
- /* This is used to identify the Over-sampling rate being set.*/
- #define UART_OVER_SAMP_RATE UART_MDR_OSM_SEL
- /* This is used to select Over-sampling rate as 16. */
- #define UART_OVER_SAMP_RATE_16 UART_MDR_OSM_SEL_SHIFT
- /* This is used to select Over-sampling rate as 13.*/
- #define UART_OVER_SAMP_RATE_13 UART_MDR_OSM_SEL
- /*******************************************************************************/
- //**********************************************************************
- // API FUNCTION PROTOTYPES
- //**********************************************************************/
- void UARTConfigSetExpClk (unsigned int baseAdd, unsigned int uartClk,
- unsigned int baudrate, unsigned int config,
- unsigned int overSampRate);
- void UARTConfigGetExpClk (unsigned int baseAdd, unsigned int uartClk,
- unsigned int *pBaud, unsigned int *pConfig);
- void UARTFIFOLevelSet (unsigned int baseAdd, unsigned int rxLevel);
- void UARTParityModeSet(unsigned int baseAdd, unsigned int parityMode);
- unsigned int UARTParityModeGet(unsigned int baseAdd);
- void UARTEnable (unsigned int baseAdd);
- void UARTDisable (unsigned int baseAdd);
- void UARTFIFOEnable(unsigned int baseAdd);
- void UARTFIFODisable(unsigned int baseAdd);
- unsigned int UARTCharsAvail(unsigned int baseAdd);
- unsigned int UARTSpaceAvail(unsigned int baseAdd);
- unsigned int UARTCharPutNonBlocking(unsigned int baseAdd,
- unsigned char byteWrite);
- int UARTCharGetNonBlocking(unsigned int baseAdd);
- void UARTIntEnable( unsigned int baseAdd, unsigned int intFlags);
- void UARTIntDisable(unsigned int baseAdd, unsigned int intFlags);
- unsigned int UARTIntStatus(unsigned int baseAdd);
- int UARTCharGet(unsigned int baseAdd);
- void UARTCharPut(unsigned int baseAdd, unsigned char byteTx);
- void UARTBreakCtl(unsigned int baseAdd, unsigned int breakState);
- void UARTModemControlSet(unsigned int baseAdd, unsigned int ctrlFlags);
- void UARTModemControlClear(unsigned int baseAdd, unsigned int ctrlFlags);
- unsigned int UARTModemControlGet(unsigned int baseAdd);
- unsigned int UARTModemStatusGet(unsigned int baseAdd);
- unsigned int UARTRxErrorGet(unsigned int baseAdd);
- void UARTDMAEnable (unsigned int baseAdd, unsigned int flags);
- void UARTDMADisable (unsigned int baseAdd, unsigned int flags);
- #ifdef __cplusplus
- }
- #endif
- #endif
|