789 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			789 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * @brief LPC13xx UART chip driver | ||
|  |  * | ||
|  |  * @note | ||
|  |  * Copyright(C) NXP Semiconductors, 2012 | ||
|  |  * All rights reserved. | ||
|  |  * | ||
|  |  * @par | ||
|  |  * Software that is described herein is for illustrative purposes only | ||
|  |  * which provides customers with programming information regarding the | ||
|  |  * LPC products.  This software is supplied "AS IS" without any warranties of | ||
|  |  * any kind, and NXP Semiconductors and its licensor disclaim any and | ||
|  |  * all warranties, express or implied, including all implied warranties of | ||
|  |  * merchantability, fitness for a particular purpose and non-infringement of | ||
|  |  * intellectual property rights.  NXP Semiconductors assumes no responsibility | ||
|  |  * or liability for the use of the software, conveys no license or rights under any | ||
|  |  * patent, copyright, mask work right, or any other intellectual property rights in | ||
|  |  * or to any products. NXP Semiconductors reserves the right to make changes | ||
|  |  * in the software without notification. NXP Semiconductors also makes no | ||
|  |  * representation or warranty that such application will be suitable for the | ||
|  |  * specified use without further testing or modification. | ||
|  |  * | ||
|  |  * @par | ||
|  |  * Permission to use, copy, modify, and distribute this software and its | ||
|  |  * documentation is hereby granted, under NXP Semiconductors' and its | ||
|  |  * licensor's relevant copyrights in the software, without fee, provided that it | ||
|  |  * is used in conjunction with NXP Semiconductors microcontrollers.  This | ||
|  |  * copyright, permission, and disclaimer notice must appear in all copies of | ||
|  |  * this code. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef __UART_13XX_H_
 | ||
|  | #define __UART_13XX_H_
 | ||
|  | 
 | ||
|  | #include "ring_buffer.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /** @defgroup UART_13XX CHIP: LPC13xx UART driver
 | ||
|  |  * @ingroup CHIP_13XX_Drivers | ||
|  |  * @{ | ||
|  |  */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief USART register block structure | ||
|  |  */ | ||
|  | typedef struct {					/*!< USARTn Structure       */ | ||
|  | 
 | ||
|  | 	union { | ||
|  | 		__IO uint32_t  DLL;			/*!< Divisor Latch LSB. Least significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB = 1). */ | ||
|  | 		__O  uint32_t  THR;			/*!< Transmit Holding Register. The next character to be transmitted is written here (DLAB = 0). */ | ||
|  | 		__I  uint32_t  RBR;			/*!< Receiver Buffer Register. Contains the next received character to be read (DLAB = 0). */ | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	union { | ||
|  | 		__IO uint32_t IER;			/*!< Interrupt Enable Register. Contains individual interrupt enable bits for the 7 potential UART interrupts (DLAB = 0). */ | ||
|  | 		__IO uint32_t DLM;			/*!< Divisor Latch MSB. Most significant byte of the baud rate divisor value. The full divisor is used to generate a baud rate from the fractional rate divider (DLAB = 1). */ | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	union { | ||
|  | 		__O  uint32_t FCR;			/*!< FIFO Control Register. Controls UART FIFO usage and modes. */ | ||
|  | 		__I  uint32_t IIR;			/*!< Interrupt ID Register. Identifies which interrupt(s) are pending. */ | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	__IO uint32_t LCR;				/*!< Line Control Register. Contains controls for frame formatting and break generation. */ | ||
|  | 	__IO uint32_t MCR;				/*!< Modem Control Register. Only present on USART ports with full modem support. */ | ||
|  | 	__I  uint32_t LSR;				/*!< Line Status Register. Contains flags for transmit and receive status, including line errors. */ | ||
|  | 	__I  uint32_t MSR;				/*!< Modem Status Register. Only present on USART ports with full modem support. */ | ||
|  | 	__IO uint32_t SCR;				/*!< Scratch Pad Register. Eight-bit temporary storage for software. */ | ||
|  | 	__IO uint32_t ACR;				/*!< Auto-baud Control Register. Contains controls for the auto-baud feature. */ | ||
|  | 	__IO uint32_t ICR;				/*!< IrDA control register (not all UARTS) */ | ||
|  | 	__IO uint32_t FDR;				/*!< Fractional Divider Register. Generates a clock input for the baud rate divider. */ | ||
|  | 	__IO uint32_t OSR;				/*!< Oversampling Register. Controls the degree of oversampling during each bit time. Only on some UARTS. */ | ||
|  | 	__IO uint32_t TER1;				/*!< Transmit Enable Register. Turns off USART transmitter for use with software flow control. */ | ||
|  | 	uint32_t  RESERVED0[3]; | ||
|  |     __IO uint32_t HDEN;				/*!< Half-duplex enable Register- only on some UARTs */ | ||
|  | 	__I  uint32_t RESERVED1[1]; | ||
|  | 	__IO uint32_t SCICTRL;			/*!< Smart card interface control register- only on some UARTs */ | ||
|  | 
 | ||
|  | 	__IO uint32_t RS485CTRL;		/*!< RS-485/EIA-485 Control. Contains controls to configure various aspects of RS-485/EIA-485 modes. */ | ||
|  | 	__IO uint32_t RS485ADRMATCH;	/*!< RS-485/EIA-485 address match. Contains the address match value for RS-485/EIA-485 mode. */ | ||
|  | 	__IO uint32_t RS485DLY;			/*!< RS-485/EIA-485 direction control delay. */ | ||
|  | 
 | ||
|  | 	union { | ||
|  | 		__IO uint32_t SYNCCTRL;		/*!< Synchronous mode control register. Only on USARTs. */ | ||
|  | 		__I  uint32_t FIFOLVL;		/*!< FIFO Level register. Provides the current fill levels of the transmit and receive FIFOs. */ | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	__IO uint32_t TER2;				/*!< Transmit Enable Register. Only on LPC177X_8X UART4 and LPC18XX/43XX USART0/2/3. */ | ||
|  | } LPC_USART_T; | ||
|  | 
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Receive Buffer register | ||
|  |  */ | ||
|  | #define UART_RBR_MASKBIT    (0xFF)		        /*!< UART Received Buffer mask bit (8 bits) */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Divisor Latch LSB register | ||
|  |  */ | ||
|  | #define UART_LOAD_DLL(div)  ((div) & 0xFF)		/*!< Macro for loading LSB of divisor */
 | ||
|  | #define UART_DLL_MASKBIT    (0xFF)	            /*!< Divisor latch LSB bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Divisor Latch MSB register | ||
|  |  */ | ||
|  | #define UART_LOAD_DLM(div)  (((div) >> 8) & 0xFF)	/*!< Macro for loading MSB of divisors */
 | ||
|  | #define UART_DLM_MASKBIT    (0xFF)		            /*!< Divisor latch MSB bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Interrupt Enable Register | ||
|  |  */ | ||
|  | #define UART_IER_RBRINT      (1 << 0)	/*!< RBR Interrupt enable */
 | ||
|  | #define UART_IER_THREINT     (1 << 1)	/*!< THR Interrupt enable */
 | ||
|  | #define UART_IER_RLSINT      (1 << 2)	/*!< RX line status interrupt enable */
 | ||
|  | #define UART_IER_MSINT       (1 << 3)	/*!< Modem status interrupt enable - valid for 11xx, 17xx/40xx UART1, 18xx/43xx UART1  only */
 | ||
|  | #define UART_IER_CTSINT      (1 << 7)	/*!< CTS signal transition interrupt enable - valid for 17xx/40xx UART1, 18xx/43xx UART1 only */
 | ||
|  | #define UART_IER_ABEOINT     (1 << 8)	/*!< Enables the end of auto-baud interrupt */
 | ||
|  | #define UART_IER_ABTOINT     (1 << 9)	/*!< Enables the auto-baud time-out interrupt */
 | ||
|  | #define UART_IER_BITMASK     (0x307)	/*!< UART interrupt enable register bit mask  - valid for 13xx, 17xx/40xx UART0/2/3, 18xx/43xx UART0/2/3 only*/
 | ||
|  | #define UART1_IER_BITMASK    (0x30F)	/*!< UART1 interrupt enable register bit mask - valid for 11xx only */
 | ||
|  | #define UART2_IER_BITMASK    (0x38F)	/*!< UART2 interrupt enable register bit mask - valid for 17xx/40xx UART1, 18xx/43xx UART1 only */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Interrupt Identification Register | ||
|  |  */ | ||
|  | #define UART_IIR_INTSTAT_PEND   (1 << 0)	/*!< Interrupt pending status - Active low */
 | ||
|  | #define UART_IIR_FIFO_EN        (3 << 6)	/*!< These bits are equivalent to FCR[0] */
 | ||
|  | #define UART_IIR_ABEO_INT       (1 << 8)	/*!< End of auto-baud interrupt */
 | ||
|  | #define UART_IIR_ABTO_INT       (1 << 9)	/*!< Auto-baud time-out interrupt */
 | ||
|  | #define UART_IIR_BITMASK        (0x3CF)		/*!< UART interrupt identification register bit mask */
 | ||
|  | 
 | ||
|  | /* Interrupt ID bit definitions */ | ||
|  | #define UART_IIR_INTID_MASK     (7 << 1)	/*!< Interrupt identification: Interrupt ID mask */
 | ||
|  | #define UART_IIR_INTID_RLS      (3 << 1)	/*!< Interrupt identification: Receive line interrupt */
 | ||
|  | #define UART_IIR_INTID_RDA      (2 << 1)	/*!< Interrupt identification: Receive data available interrupt */
 | ||
|  | #define UART_IIR_INTID_CTI      (6 << 1)	/*!< Interrupt identification: Character time-out indicator interrupt */
 | ||
|  | #define UART_IIR_INTID_THRE     (1 << 1)	/*!< Interrupt identification: THRE interrupt */
 | ||
|  | #define UART_IIR_INTID_MODEM    (0 << 1)	/*!< Interrupt identification: Modem interrupt */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART FIFO Control Register | ||
|  |  */ | ||
|  | #define UART_FCR_FIFO_EN        (1 << 0)	/*!< UART FIFO enable */
 | ||
|  | #define UART_FCR_RX_RS          (1 << 1)	/*!< UART RX FIFO reset */
 | ||
|  | #define UART_FCR_TX_RS          (1 << 2)	/*!< UART TX FIFO reset */
 | ||
|  | #define UART_FCR_DMAMODE_SEL    (1 << 3)	/*!< UART DMA mode selection - valid for 17xx/40xx, 18xx/43xx only */
 | ||
|  | #define UART_FCR_BITMASK        (0xCF)		/*!< UART FIFO control bit mask */
 | ||
|  | 
 | ||
|  | #define UART_TX_FIFO_SIZE       (16)
 | ||
|  | 
 | ||
|  | /* FIFO trigger level bit definitions */ | ||
|  | #define UART_FCR_TRG_LEV0       (0)			/*!< UART FIFO trigger level 0: 1 character */
 | ||
|  | #define UART_FCR_TRG_LEV1       (1 << 6)	/*!< UART FIFO trigger level 1: 4 character */
 | ||
|  | #define UART_FCR_TRG_LEV2       (2 << 6)	/*!< UART FIFO trigger level 2: 8 character */
 | ||
|  | #define UART_FCR_TRG_LEV3       (3 << 6)	/*!< UART FIFO trigger level 3: 14 character */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Line Control Register | ||
|  |  */ | ||
|  | /* UART word length select bit definitions */ | ||
|  | #define UART_LCR_WLEN_MASK      (3 << 0)		/*!< UART word length select bit mask */
 | ||
|  | #define UART_LCR_WLEN5          (0 << 0)		/*!< UART word length select: 5 bit data mode */
 | ||
|  | #define UART_LCR_WLEN6          (1 << 0)		/*!< UART word length select: 6 bit data mode */
 | ||
|  | #define UART_LCR_WLEN7          (2 << 0)		/*!< UART word length select: 7 bit data mode */
 | ||
|  | #define UART_LCR_WLEN8          (3 << 0)		/*!< UART word length select: 8 bit data mode */
 | ||
|  | 
 | ||
|  | /* UART Stop bit select bit definitions */ | ||
|  | #define UART_LCR_SBS_MASK       (1 << 2)		/*!< UART stop bit select: bit mask */
 | ||
|  | #define UART_LCR_SBS_1BIT       (0 << 2)		/*!< UART stop bit select: 1 stop bit */
 | ||
|  | #define UART_LCR_SBS_2BIT       (1 << 2)		/*!< UART stop bit select: 2 stop bits (in 5 bit data mode, 1.5 stop bits) */
 | ||
|  | 
 | ||
|  | /* UART Parity enable bit definitions */ | ||
|  | #define UART_LCR_PARITY_EN      (1 << 3)		/*!< UART Parity Enable */
 | ||
|  | #define UART_LCR_PARITY_DIS     (0 << 3)		/*!< UART Parity Disable */
 | ||
|  | #define UART_LCR_PARITY_ODD     (0 << 4)		/*!< UART Parity select: Odd parity */
 | ||
|  | #define UART_LCR_PARITY_EVEN    (1 << 4)		/*!< UART Parity select: Even parity */
 | ||
|  | #define UART_LCR_PARITY_F_1     (2 << 4)		/*!< UART Parity select: Forced 1 stick parity */
 | ||
|  | #define UART_LCR_PARITY_F_0     (3 << 4)		/*!< UART Parity select: Forced 0 stick parity */
 | ||
|  | #define UART_LCR_BREAK_EN       (1 << 6)		/*!< UART Break transmission enable */
 | ||
|  | #define UART_LCR_DLAB_EN        (1 << 7)		/*!< UART Divisor Latches Access bit enable */
 | ||
|  | #define UART_LCR_BITMASK        (0xFF)			/*!< UART line control bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Modem Control Register | ||
|  |  */ | ||
|  | #define UART_MCR_DTR_CTRL       (1 << 0)		/*!< Source for modem output pin DTR */
 | ||
|  | #define UART_MCR_RTS_CTRL       (1 << 1)		/*!< Source for modem output pin RTS */
 | ||
|  | #define UART_MCR_LOOPB_EN       (1 << 4)		/*!< Loop back mode select */
 | ||
|  | #define UART_MCR_AUTO_RTS_EN    (1 << 6)		/*!< Enable Auto RTS flow-control */
 | ||
|  | #define UART_MCR_AUTO_CTS_EN    (1 << 7)		/*!< Enable Auto CTS flow-control */
 | ||
|  | #define UART_MCR_BITMASK        (0xD3)			/*!< UART bit mask value */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Line Status Register | ||
|  |  */ | ||
|  | #define UART_LSR_RDR        (1 << 0)	/*!< Line status: Receive data ready */
 | ||
|  | #define UART_LSR_OE         (1 << 1)	/*!< Line status: Overrun error */
 | ||
|  | #define UART_LSR_PE         (1 << 2)	/*!< Line status: Parity error */
 | ||
|  | #define UART_LSR_FE         (1 << 3)	/*!< Line status: Framing error */
 | ||
|  | #define UART_LSR_BI         (1 << 4)	/*!< Line status: Break interrupt */
 | ||
|  | #define UART_LSR_THRE       (1 << 5)	/*!< Line status: Transmit holding register empty */
 | ||
|  | #define UART_LSR_TEMT       (1 << 6)	/*!< Line status: Transmitter empty */
 | ||
|  | #define UART_LSR_RXFE       (1 << 7)	/*!< Line status: Error in RX FIFO */
 | ||
|  | #define UART_LSR_TXFE       (1 << 8)	/*!< Line status: Error in RX FIFO */
 | ||
|  | #define UART_LSR_BITMASK    (0xFF)		/*!< UART Line status bit mask */
 | ||
|  | #define UART1_LSR_BITMASK   (0x1FF)		/*!< UART1 Line status bit mask - valid for 11xx, 18xx/43xx UART0/2/3 only */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Modem Status Register | ||
|  |  */ | ||
|  | #define UART_MSR_DELTA_CTS      (1 << 0)	/*!< Modem status: State change of input CTS */
 | ||
|  | #define UART_MSR_DELTA_DSR      (1 << 1)	/*!< Modem status: State change of input DSR */
 | ||
|  | #define UART_MSR_LO2HI_RI       (1 << 2)	/*!< Modem status: Low to high transition of input RI */
 | ||
|  | #define UART_MSR_DELTA_DCD      (1 << 3)	/*!< Modem status: State change of input DCD */
 | ||
|  | #define UART_MSR_CTS            (1 << 4)	/*!< Modem status: Clear To Send State */
 | ||
|  | #define UART_MSR_DSR            (1 << 5)	/*!< Modem status: Data Set Ready State */
 | ||
|  | #define UART_MSR_RI             (1 << 6)	/*!< Modem status: Ring Indicator State */
 | ||
|  | #define UART_MSR_DCD            (1 << 7)	/*!< Modem status: Data Carrier Detect State */
 | ||
|  | #define UART_MSR_BITMASK        (0xFF)		/*!< Modem status: MSR register bit-mask value */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Auto baudrate control register | ||
|  |  */ | ||
|  | #define UART_ACR_START              (1 << 0)	/*!< UART Auto-baud start */
 | ||
|  | #define UART_ACR_MODE               (1 << 1)	/*!< UART Auto baudrate Mode 1 */
 | ||
|  | #define UART_ACR_AUTO_RESTART       (1 << 2)	/*!< UART Auto baudrate restart */
 | ||
|  | #define UART_ACR_ABEOINT_CLR        (1 << 8)	/*!< UART End of auto-baud interrupt clear */
 | ||
|  | #define UART_ACR_ABTOINT_CLR        (1 << 9)	/*!< UART Auto-baud time-out interrupt clear */
 | ||
|  | #define UART_ACR_BITMASK            (0x307)		/*!< UART Auto Baudrate register bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART RS485 Control register | ||
|  |  */ | ||
|  | #define UART_RS485CTRL_NMM_EN       (1 << 0)	/*!< RS-485/EIA-485 Normal Multi-drop Mode (NMM) is disabled */
 | ||
|  | #define UART_RS485CTRL_RX_DIS       (1 << 1)	/*!< The receiver is disabled */
 | ||
|  | #define UART_RS485CTRL_AADEN        (1 << 2)	/*!< Auto Address Detect (AAD) is enabled */
 | ||
|  | #define UART_RS485CTRL_SEL_DTR      (1 << 3)	/*!< If direction control is enabled (bit DCTRL = 1), pin DTR is
 | ||
|  | 												        used for direction control */ | ||
|  | #define UART_RS485CTRL_DCTRL_EN     (1 << 4)	/*!< Enable Auto Direction Control */
 | ||
|  | #define UART_RS485CTRL_OINV_1       (1 << 5)	/*!< This bit reverses the polarity of the direction
 | ||
|  | 												       control signal on the RTS (or DTR) pin. The direction control pin | ||
|  | 												       will be driven to logic "1" when the transmitter has data to be sent */ | ||
|  | #define UART_RS485CTRL_BITMASK      (0x3F)		/*!< RS485 control bit-mask value */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART IrDA Control Register - valid for 11xx, 17xx/40xx UART0/2/3, 18xx/43xx UART3 only | ||
|  |  */ | ||
|  | #define UART_ICR_IRDAEN         (1 << 0)			/*!< IrDA mode enable */
 | ||
|  | #define UART_ICR_IRDAINV        (1 << 1)			/*!< IrDA serial input inverted */
 | ||
|  | #define UART_ICR_FIXPULSE_EN    (1 << 2)			/*!< IrDA fixed pulse width mode */
 | ||
|  | #define UART_ICR_PULSEDIV(n)    ((n & 0x07) << 3)	/*!< PulseDiv - Configures the pulse when FixPulseEn = 1 */
 | ||
|  | #define UART_ICR_BITMASK        (0x3F)				/*!< UART IRDA bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART half duplex register - ???? | ||
|  |  */ | ||
|  | #define UART_HDEN_HDEN          ((1 << 0))			/*!< enable half-duplex mode*/
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Smart card interface Control Register - valid for 11xx, 18xx/43xx UART0/2/3 only | ||
|  |  */ | ||
|  | #define UART_SCICTRL_SCIEN        (1 << 0)			/*!< enable asynchronous half-duplex smart card interface*/
 | ||
|  | #define UART_SCICTRL_NACKDIS      (1 << 1)			/*!< NACK response is inhibited*/
 | ||
|  | #define UART_SCICTRL_PROTSEL_T1   (1 << 2)			/*!< ISO7816-3 protocol T1 is selected*/
 | ||
|  | #define UART_SCICTRL_TXRETRY(n)   ((n & 0x07) << 5)	/*!< number of retransmission*/
 | ||
|  | #define UART_SCICTRL_GUARDTIME(n) ((n & 0xFF) << 8)	/*!< Extra guard time*/
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Fractional Divider Register | ||
|  |  */ | ||
|  | #define UART_FDR_DIVADDVAL(n)   (n & 0x0F)			/*!< Baud-rate generation pre-scaler divisor */
 | ||
|  | #define UART_FDR_MULVAL(n)      ((n << 4) & 0xF0)	/*!< Baud-rate pre-scaler multiplier value */
 | ||
|  | #define UART_FDR_BITMASK        (0xFF)				/*!< UART Fractional Divider register bit mask */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Tx Enable Register | ||
|  |  */ | ||
|  | #define UART_TER1_TXEN      (1 << 7)		/*!< Transmit enable bit  - valid for 11xx, 13xx, 17xx/40xx only */
 | ||
|  | #define UART_TER2_TXEN      (1 << 0)		/*!< Transmit enable bit  - valid for 18xx/43xx only */
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Macro defines for UART Synchronous Control Register - 11xx, 18xx/43xx UART0/2/3 only  | ||
|  |  */ | ||
|  | #define UART_SYNCCTRL_SYNC             (1 << 0)			/*!< enable synchronous mode*/
 | ||
|  | #define UART_SYNCCTRL_CSRC_MASTER      (1 << 1)  		/*!< synchronous master mode*/
 | ||
|  | #define UART_SYNCCTRL_FES              (1 << 2)			/*!< sample on falling edge*/
 | ||
|  | #define UART_SYNCCTRL_TSBYPASS         (1 << 3)			/*!< to be defined*/
 | ||
|  | #define UART_SYNCCTRL_CSCEN            (1 << 4)			/*!< Continuous running clock enable (master mode only)*/
 | ||
|  | #define UART_SYNCCTRL_STARTSTOPDISABLE (1 << 5)	        /*!< Do not send start/stop bit*/
 | ||
|  | #define UART_SYNCCTRL_CCCLR            (1 << 6)			/*!< stop continuous clock*/
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Enable transmission on UART TxD pin | ||
|  |  * @param	pUART	: Pointer to selected pUART peripheral | ||
|  |  * @return Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_TXEnable(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	pUART->TER1 = UART_TER1_TXEN; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Disable transmission on UART TxD pin | ||
|  |  * @param	pUART	: Pointer to selected pUART peripheral | ||
|  |  * @return Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_TXDisable(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	pUART->TER1 = 0; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Transmit a single data byte through the UART peripheral | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	data	: Byte to transmit | ||
|  |  * @return	Nothing | ||
|  |  * @note	This function attempts to place a byte into the UART transmit | ||
|  |  *			FIFO or transmit hold register regard regardless of UART state | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SendByte(LPC_USART_T *pUART, uint8_t data) | ||
|  | { | ||
|  | 	pUART->THR = (uint32_t) data; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read a single byte data from the UART peripheral | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	A single byte of data read | ||
|  |  * @note	This function reads a byte from the UART receive FIFO or | ||
|  |  *			receive hold register regard regardless of UART state. The | ||
|  |  *			FIFO status should be read first prior to using this function | ||
|  |  */ | ||
|  | STATIC INLINE uint8_t Chip_UART_ReadByte(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return (uint8_t) (pUART->RBR & UART_RBR_MASKBIT); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Enable UART interrupts | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	intMask	: OR'ed Interrupts to enable in the Interrupt Enable Register (IER) | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an OR'ed value of UART_IER_* definitions with this function | ||
|  |  *			to enable specific UART interrupts. The Divisor Latch Access Bit | ||
|  |  *			(DLAB) in LCR must be cleared in order to access the IER register. | ||
|  |  *			This function doesn't alter the DLAB state | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_IntEnable(LPC_USART_T *pUART, uint32_t intMask) | ||
|  | { | ||
|  | 	pUART->IER |= intMask; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Disable UART interrupts | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	intMask	: OR'ed Interrupts to disable in the Interrupt Enable Register (IER) | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an OR'ed value of UART_IER_* definitions with this function | ||
|  |  *			to disable specific UART interrupts. The Divisor Latch Access Bit | ||
|  |  *			(DLAB) in LCR must be cleared in order to access the IER register. | ||
|  |  *			This function doesn't alter the DLAB state | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_IntDisable(LPC_USART_T *pUART, uint32_t intMask) | ||
|  | { | ||
|  | 	pUART->IER &= ~intMask; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Returns UART interrupts that are enabled | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Returns the enabled UART interrupts | ||
|  |  * @note	Use an OR'ed value of UART_IER_* definitions with this function | ||
|  |  *			to determine which interrupts are enabled. You can check | ||
|  |  *			for multiple enabled bits if needed. | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_UART_GetIntsEnabled(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return pUART->IER; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read the Interrupt Identification Register (IIR) | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Current pending interrupt status per the IIR register | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_UART_ReadIntIDReg(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return pUART->IIR; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Setup the UART FIFOs | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	fcr		: FIFO control register setup OR'ed flags | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use OR'ed value of UART_FCR_* definitions with this function | ||
|  |  *			to select specific options. For example, to enable the FIFOs | ||
|  |  *			with a RX trip level of 8 characters, use something like | ||
|  |  *			(UART_FCR_FIFO_EN | UART_FCR_TRG_LEV2) | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetupFIFOS(LPC_USART_T *pUART, uint32_t fcr) | ||
|  | { | ||
|  | 	pUART->FCR = fcr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Configure data width, parity and stop bits | ||
|  |  * @param	pUART	: Pointer to selected pUART peripheral | ||
|  |  * @param	config	: UART configuration, OR'ed values of UART_LCR_* defines | ||
|  |  * @return	Nothing | ||
|  |  * @note	Select OR'ed config options for the UART from the UART_LCR_* | ||
|  |  *			definitions. For example, a configuration of 8 data bits, 1 | ||
|  |  *			stop bit, and even (enabled) parity would be | ||
|  |  *			(UART_LCR_WLEN8 | UART_LCR_SBS_1BIT | UART_LCR_PARITY_EN | UART_LCR_PARITY_EVEN) | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_ConfigData(LPC_USART_T *pUART, uint32_t config) | ||
|  | { | ||
|  | 	pUART->LCR = config; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Enable access to Divisor Latches | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_EnableDivisorAccess(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	pUART->LCR |= UART_LCR_DLAB_EN; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Disable access to Divisor Latches | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_DisableDivisorAccess(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	pUART->LCR &= ~UART_LCR_DLAB_EN; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set LSB and MSB divisor latch registers | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	dll		: Divisor Latch LSB value | ||
|  |  * @param	dlm		: Divisor Latch MSB value | ||
|  |  * @return	Nothing | ||
|  |  * @note	The Divisor Latch Access Bit (DLAB) in LCR must be set in | ||
|  |  *			order to access the USART Divisor Latches. This function | ||
|  |  *			doesn't alter the DLAB state. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetDivisorLatches(LPC_USART_T *pUART, uint8_t dll, uint8_t dlm) | ||
|  | { | ||
|  | 	pUART->DLL = (uint32_t) dll; | ||
|  | 	pUART->DLM = (uint32_t) dlm; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Return modem control register/status | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Modem control register (status) | ||
|  |  * @note	Mask bits of the returned status value with UART_MCR_* | ||
|  |  *			definitions for specific statuses. | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_UART_ReadModemControl(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return pUART->MCR; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set modem control register/status | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	mcr		: Modem control register flags to set | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_MCR_* definitions with this | ||
|  |  *			call to set specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetModemControl(LPC_USART_T *pUART, uint32_t mcr) | ||
|  | { | ||
|  | 	pUART->MCR |= mcr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Clear modem control register/status | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	mcr		: Modem control register flags to clear | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_MCR_* definitions with this | ||
|  |  *			call to clear specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_ClearModemControl(LPC_USART_T *pUART, uint32_t mcr) | ||
|  | { | ||
|  | 	pUART->MCR &= ~mcr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Return Line Status register/status (LSR) | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Line Status register (status) | ||
|  |  * @note	Mask bits of the returned status value with UART_LSR_* | ||
|  |  *			definitions for specific statuses. | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_UART_ReadLineStatus(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return pUART->LSR; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Return Modem Status register/status (MSR) | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Modem Status register (status) | ||
|  |  * @note	Mask bits of the returned status value with UART_MSR_* | ||
|  |  *			definitions for specific statuses. | ||
|  |  */ | ||
|  | STATIC INLINE uint32_t Chip_UART_ReadModemStatus(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return pUART->MSR; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Write a byte to the scratchpad register | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	data	: Byte value to write | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetScratch(LPC_USART_T *pUART, uint8_t data) | ||
|  | { | ||
|  | 	pUART->SCR = (uint32_t) data; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Returns current byte value in the scratchpad register | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Byte value read from scratchpad register | ||
|  |  */ | ||
|  | STATIC INLINE uint8_t Chip_UART_ReadScratch(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return (uint8_t) (pUART->SCR & 0xFF); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set autobaud register options | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	acr		: Or'ed values to set for ACR register | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_ACR_* definitions with this | ||
|  |  *			call to set specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetAutoBaudReg(LPC_USART_T *pUART, uint32_t acr) | ||
|  | { | ||
|  | 	pUART->ACR |= acr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Clear autobaud register options | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	acr		: Or'ed values to clear for ACR register | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_ACR_* definitions with this | ||
|  |  *			call to clear specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_ClearAutoBaudReg(LPC_USART_T *pUART, uint32_t acr) | ||
|  | { | ||
|  | 	pUART->ACR &= ~acr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set RS485 control register options | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	ctrl	: Or'ed values to set for RS485 control register | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_RS485CTRL_* definitions with this | ||
|  |  *			call to set specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetRS485Flags(LPC_USART_T *pUART, uint32_t ctrl) | ||
|  | { | ||
|  | 	pUART->RS485CTRL |= ctrl; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Clear RS485 control register options | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	ctrl	: Or'ed values to clear for RS485 control register | ||
|  |  * @return	Nothing | ||
|  |  * @note	Use an Or'ed value of UART_RS485CTRL_* definitions with this | ||
|  |  *			call to clear specific options. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_ClearRS485Flags(LPC_USART_T *pUART, uint32_t ctrl) | ||
|  | { | ||
|  | 	pUART->RS485CTRL &= ~ctrl; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set RS485 address match value | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	addr	: Address match value for RS-485/EIA-485 mode | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetRS485Addr(LPC_USART_T *pUART, uint8_t addr) | ||
|  | { | ||
|  | 	pUART->RS485ADRMATCH = (uint32_t) addr; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read RS485 address match value | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	Address match value for RS-485/EIA-485 mode | ||
|  |  */ | ||
|  | STATIC INLINE uint8_t Chip_UART_GetRS485Addr(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return (uint8_t) (pUART->RS485ADRMATCH & 0xFF); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Set RS485 direction control (RTS or DTR) delay value | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	dly		: direction control (RTS or DTR) delay value | ||
|  |  * @return	Nothing | ||
|  |  * @note	This delay time is in periods of the baud clock. Any delay | ||
|  |  *			time from 0 to 255 bit times may be programmed. | ||
|  |  */ | ||
|  | STATIC INLINE void Chip_UART_SetRS485Delay(LPC_USART_T *pUART, uint8_t dly) | ||
|  | { | ||
|  | 	pUART->RS485DLY = (uint32_t) dly; | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read RS485 direction control (RTS or DTR) delay value | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @return	direction control (RTS or DTR) delay value | ||
|  |  * @note	This delay time is in periods of the baud clock. Any delay | ||
|  |  *			time from 0 to 255 bit times may be programmed. | ||
|  |  */ | ||
|  | STATIC INLINE uint8_t Chip_UART_GetRS485Delay(LPC_USART_T *pUART) | ||
|  | { | ||
|  | 	return (uint8_t) (pUART->RS485DLY & 0xFF); | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Initializes the pUART peripheral | ||
|  |  * @param	pUART		: Pointer to selected pUART peripheral | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_UART_Init(LPC_USART_T *pUART); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	De-initializes the pUART peripheral. | ||
|  |  * @param	pUART		: Pointer to selected pUART peripheral | ||
|  |  * @return	Nothing | ||
|  |  */ | ||
|  | void Chip_UART_DeInit(LPC_USART_T *pUART); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Transmit a byte array through the UART peripheral (non-blocking) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	data		: Pointer to bytes to transmit | ||
|  |  * @param	numBytes	: Number of bytes to transmit | ||
|  |  * @return	The actual number of bytes placed into the FIFO | ||
|  |  * @note	This function places data into the transmit FIFO until either | ||
|  |  *			all the data is in the FIFO or the FIFO is full. This function | ||
|  |  *			will not block in the FIFO is full. The actual number of bytes | ||
|  |  *			placed into the FIFO is returned. This function ignores errors. | ||
|  |  */ | ||
|  | int Chip_UART_Send(LPC_USART_T *pUART, const void *data, int numBytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read data through the UART peripheral (non-blocking) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	data		: Pointer to bytes array to fill | ||
|  |  * @param	numBytes	: Size of the passed data array | ||
|  |  * @return	The actual number of bytes read | ||
|  |  * @note	This function reads data from the receive FIFO until either | ||
|  |  *			all the data has been read or the passed buffer is completely full. | ||
|  |  *			This function will not block. This function ignores errors. | ||
|  |  */ | ||
|  | int Chip_UART_Read(LPC_USART_T *pUART, void *data, int numBytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Sets best dividers to get a target bit rate (without fractional divider) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	baudrate	: Target baud rate (baud rate = bit rate) | ||
|  |  * @return	The actual baud rate, or 0 if no rate can be found | ||
|  |  */ | ||
|  | uint32_t Chip_UART_SetBaud(LPC_USART_T *pUART, uint32_t baudrate); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Sets best dividers to get a target bit rate (with fractional divider) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	baudrate	: Target baud rate (baud rate = bit rate) | ||
|  |  * @return	The actual baud rate, or 0 if no rate can be found | ||
|  |  */ | ||
|  | uint32_t Chip_UART_SetBaudFDR(LPC_USART_T *pUART, uint32_t baudrate); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Transmit a byte array through the UART peripheral (blocking) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	data		: Pointer to data to transmit | ||
|  |  * @param	numBytes	: Number of bytes to transmit | ||
|  |  * @return	The number of bytes transmitted | ||
|  |  * @note	This function will send or place all bytes into the transmit | ||
|  |  *			FIFO. This function will block until the last bytes are in the FIFO. | ||
|  |  */ | ||
|  | int Chip_UART_SendBlocking(LPC_USART_T *pUART, const void *data, int numBytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Read data through the UART peripheral (blocking) | ||
|  |  * @param	pUART		: Pointer to selected UART peripheral | ||
|  |  * @param	data		: Pointer to data array to fill | ||
|  |  * @param	numBytes	: Size of the passed data array | ||
|  |  * @return	The size of the dat array | ||
|  |  * @note	This function reads data from the receive FIFO until the passed | ||
|  |  *			buffer is completely full. The function will block until full. | ||
|  |  *			This function ignores errors. | ||
|  |  */ | ||
|  | int Chip_UART_ReadBlocking(LPC_USART_T *pUART, void *data, int numBytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	UART receive-only interrupt handler for ring buffers | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	pRB		: Pointer to ring buffer structure to use | ||
|  |  * @return	Nothing | ||
|  |  * @note	If ring buffer support is desired for the receive side | ||
|  |  *			of data transfer, the UART interrupt should call this | ||
|  |  *			function for a receive based interrupt status. | ||
|  |  */ | ||
|  | void Chip_UART_RXIntHandlerRB(LPC_USART_T *pUART, RINGBUFF_T *pRB); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	UART transmit-only interrupt handler for ring buffers | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	pRB		: Pointer to ring buffer structure to use | ||
|  |  * @return	Nothing | ||
|  |  * @note	If ring buffer support is desired for the transmit side | ||
|  |  *			of data transfer, the UART interrupt should call this | ||
|  |  *			function for a transmit based interrupt status. | ||
|  |  */ | ||
|  | void Chip_UART_TXIntHandlerRB(LPC_USART_T *pUART, RINGBUFF_T *pRB); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Populate a transmit ring buffer and start UART transmit | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	pRB		: Pointer to ring buffer structure to use | ||
|  |  * @param	data	: Pointer to buffer to move to ring buffer | ||
|  |  * @param	bytes	: Number of bytes to move | ||
|  |  * @return	The number of bytes placed into the ring buffer | ||
|  |  * @note	Will move the data into the TX ring buffer and start the | ||
|  |  *			transfer. If the number of bytes returned is less than the | ||
|  |  *			number of bytes to send, the ring buffer is considered full. | ||
|  |  */ | ||
|  | uint32_t Chip_UART_SendRB(LPC_USART_T *pUART, RINGBUFF_T *pRB, const void *data, int bytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	Copy data from a receive ring buffer | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	pRB		: Pointer to ring buffer structure to use | ||
|  |  * @param	data	: Pointer to buffer to fill from ring buffer | ||
|  |  * @param	bytes	: Size of the passed buffer in bytes | ||
|  |  * @return	The number of bytes placed into the ring buffer | ||
|  |  * @note	Will move the data from the RX ring buffer up to the | ||
|  |  *			the maximum passed buffer size. Returns 0 if there is | ||
|  |  *			no data in the ring buffer. | ||
|  |  */ | ||
|  | int Chip_UART_ReadRB(LPC_USART_T *pUART, RINGBUFF_T *pRB, void *data, int bytes); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief	UART receive/transmit interrupt handler for ring buffers | ||
|  |  * @param	pUART	: Pointer to selected UART peripheral | ||
|  |  * @param	pRXRB	: Pointer to transmit ring buffer | ||
|  |  * @param	pTXRB	: Pointer to receive ring buffer | ||
|  |  * @return	Nothing | ||
|  |  * @note	This provides a basic implementation of the UART IRQ | ||
|  |  *			handler for support of a ring buffer implementation for | ||
|  |  *			transmit and receive. | ||
|  |  */ | ||
|  | void Chip_UART_IRQRBHandler(LPC_USART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @} | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* __UART_13XX_H_ */
 |