#ifndef __UART_H__ #define __UART_H__ #define UART0_BASE (0x38028000UL) /* MCom02 - UART 0 */ #define UART1_BASE (0x38029000UL) /* MCom02 - UART 1 */ #define UART2_BASE (0x3802a000UL) /* MCom02 - UART 2 */ #define UART3_BASE (0x3802b000UL) /* MCom02 - UART 3 */ #define UART_RBR(x) ((unsigned long *)((x) + 0x0000UL)) /* Register */ #define UART_THR(x) ((unsigned long *)((x) + 0x0000UL)) /* Register */ #define UART_DLL(x) ((unsigned long *)((x) + 0x0000UL)) /* Register */ #define UART_DLH(x) ((unsigned long *)((x) + 0x0004UL)) /* Register */ #define UART_IER(x) ((unsigned long *)((x) + 0x0004UL)) /* Register */ #define UART_IIR(x) ((unsigned long *)((x) + 0x0008UL)) /* Register */ #define UART_FCR(x) ((unsigned long *)((x) + 0x0008UL)) /* Register */ #define UART_LCR(x) ((unsigned long *)((x) + 0x000CUL)) /* Register */ #define UART_MCR(x) ((unsigned long *)((x) + 0x0010UL)) /* Register */ #define UART_LSR(x) ((unsigned long *)((x) + 0x0014UL)) /* Register */ #define UART_MSR(x) ((unsigned long *)((x) + 0x0018UL)) /* Register */ #define UART_SCR(x) ((unsigned long *)((x) + 0x001CUL)) /* Register */ #define UART_SRBR(x) ((unsigned long *)((x) + 0x0030UL)) /* Register */ #define UART_STHR(x) ((unsigned long *)((x) + 0x0030UL)) /* Register */ #define UART_USR(x) ((unsigned long *)((x) + 0x007CUL)) /* Register */ #define UART_TFL(x) ((unsigned long *)((x) + 0x0080UL)) /* Register */ #define UART_RFL(x) ((unsigned long *)((x) + 0x0084UL)) /* Register */ #define UART_SRR(x) ((unsigned long *)((x) + 0x0088UL)) /* Register */ #define UART_SRTS(x) ((unsigned long *)((x) + 0x008CUL)) /* Register */ #define UART_SBCR(x) ((unsigned long *)((x) + 0x0080UL)) /* Register */ #define UART_SFE(x) ((unsigned long *)((x) + 0x0098UL)) /* Register */ #define UART_SRT(x) ((unsigned long *)((x) + 0x009CUL)) /* Register */ #define UART_STET(x) ((unsigned long *)((x) + 0x00A0UL)) /* Register */ #define UART_HTX(x) ((unsigned long *)((x) + 0x00A4UL)) /* Register */ /* IER register fields */ #define UART_IER_ERBFI_ENABLE (1 << 0) #define UART_IER_ETBEI_ENABLE (1 << 1) #define UART_IER_ELSI_ENABLE (1 << 2) #define UART_IER_EDSSI_ENABLE (1 << 3) #define UART_IER_PITME_ENABLE (1 << 7) /* IIR register fields */ #define UART_IIR_INTERRUPT_STATUS_MODEM (0 << 0) #define UART_IIR_INTERRUPT_STATUS_EMPTYQ (1 << 0) #define UART_IIR_INTERRUPT_STATUS_THR (2 << 0) #define UART_IIR_INTERRUPT_STATUS_TX (8 << 0) #define UART_IIR_TIMEOUT_STATUS_MASK (12 << 0) #define UART_IIR_FIFO_ENABLE_STATUS_MASK (3 << 6) /* FCR register fields */ #define UART_FCR_RFTL_STATE_IDX (6) #define UART_FCR_RFTL_STATE (3 << 6) #define UART_FCR_TET_STATE_IDX (4) #define UART_FCR_TET_STATE (3 << 4) #define UART_FCR_RESET_TX_FLAG (1 << 2) #define UART_FCR_RESET_RX_FLAG (1 << 1) #define UART_FCR_FEWO (1 << 0) /* LCR register fields */ #define UART_LCR_DLAB (1 << 7) #define UART_LCR_BC (1 << 6) #define UART_LCR_STP (1 << 5) #define UART_LCR_EPS (1 << 4) #define UART_LCR_PEN (1 << 3) #define UART_LCR_STOP (1 << 2) #define UART_LCR_DLS (3 << 0) /* MCR register fields */ #define UART_MCR_AFCE (1 << 5) #define UART_MCR_RTS (1 << 1) /* LSR register fields */ #define UART_LSR_EIRF (1 << 7) #define UART_LSR_TEMT (1 << 6) #define UART_LSR_THRE (1 << 5) #define UART_LSR_BI (1 << 4) #define UART_LSR_FE (1 << 3) #define UART_LSR_PE (1 << 2) #define UART_LSR_OE (1 << 1) #define UART_LSR_RDR (1 << 0) /* MSR register fields */ #define UART_MSR_CTS (1 << 4) #define UART_MSR_DCTS (1 << 0) /* USR register fields */ #define UART_LSR_RFF (1 << 4) #define UART_LSR_RFNE (1 << 3) #define UART_LSR_TFE (1 << 2) #define UART_LSR_TFNF (1 << 1) #define UART_LSR_BUSY (1 << 0) /* SRR register fields */ #define UART_SRR_XFR (1 << 2) #define UART_SRR_RFR (1 << 1) #define UART_SRR_UR (1 << 0) /* SRTS register fields */ #define UART_SRTS_SRTS (1 << 0) /* SBCR register fields */ #define UART_SBCR_SBCR (1 << 0) /* SFE register fields */ #define UART_SFE_SBCR (1 << 0) /* SRT register fields */ #define UART_SRT_SBCR (1 << 0) /* STET register fields */ #define UART_STET_SBCR (1 << 0) /* HTX register fields */ #define UART_HTX_HTX (1 << 0) #define UART_CLK_HZ (216000000UL) #define UART0_VECTOR_ID (32) #define UART_FIFO_SIZE_BYTES (32UL) #define UART1_VECTOR_ID (33) #define UART2_VECTOR_ID (34) #define UART3_VECTOR_ID (35) #define TX_QUEUE (0) #define RX_QUEUE (1) #define min(a, b) ((a) < (b)) ? (a) : (b) // // @name: uart_config // @description: Setup uart port to transfer at given speed and frequency // // @in unsigned int khz - frequency // @in unsigned long baud - data transfer speed // void uart_config(unsigned int id, unsigned long baud); // // @name: uart_putchar // @description: Send symbol // // @in short c - // void uart_putchar(unsigned int id, short c); // // @name: uart_getchar // @description: Wait for the byte to be received and return it. // @return: unsigned short - received symbol // unsigned short uart_getchar(unsigned int id); // Function: uart_puts // Sends buffer to uart port // // Parameters: const char* str - string // int uart_puts(unsigned int id, const char *str); #endif