/**************************************************************************//** * @file uart.h * @version V1.00 * @brief N9H30 UART driver header file * * SPDX-License-Identifier: Apache-2.0 * @copyright (C) 2015 Nuvoton Technology Corp. All rights reserved. *****************************************************************************/ #ifndef __NU_UART_H__ #define __NU_UART_H__ #include "N9H30.h" #ifdef __cplusplus extern "C" { #endif /** @addtogroup N9H30_Device_Driver N9H30 Device Driver @{ */ /** @addtogroup N9H30_UART_Driver UART Driver @{ */ /*-----------------------------------------*/ /* marco, type and constant definitions */ /*-----------------------------------------*/ /// @cond HIDDEN_SYMBOLS #define UART_NUM 11 #define UARTOFFSET 0x100 /// @endcond HIDDEN_SYMBOLS /** @addtogroup N9H30_UART_EXPORTED_CONSTANTS UART Exported Constants @{ */ #define UARTWRITESIZE 100 /*!< UART max. write size */ #define UARTINTMODE 1 /*!< UART interrupt mode */ #define UARTPOLLMODE 0 /*!< UART polling mode */ #define DISABLEALLIER 0 /*!< Disable all interrupt */ /*---------------------------------------------------------------------------------------------------------*/ /* UART channel number */ /*---------------------------------------------------------------------------------------------------------*/ #define ALLCHANNEL 11 /*!< UART ALL channel */ /*---------------------------------------------------------------------------------------------------------*/ /* UA_FCR constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_FCR_RFITL_1BYTE (0x0 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 1 bit */ #define UART_FCR_RFITL_4BYTES (0x1 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 4 bits */ #define UART_FCR_RFITL_8BYTES (0x2 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 8 bits */ #define UART_FCR_RFITL_14BYTES (0x3 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 14 bits */ #define UART_FCR_RFITL_30BYTES (0x4 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 30 bits */ #define UART_FCR_RFITL_46BYTES (0x5 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 46 bits */ #define UART_FCR_RFITL_62BYTES (0x6 << UART_FCR_RFITL_Pos) /*!< UA_FCR setting to set RX FIFO Trigger Level to 62 bits */ #define UART_FCR_RTS_TRI_LEV_1BYTE (0x0 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 1 bit */ #define UART_FCR_RTS_TRI_LEV_4BYTES (0x1 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 4 bits */ #define UART_FCR_RTS_TRI_LEV_8BYTES (0x2 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 8 bits */ #define UART_FCR_RTS_TRI_LEV_14BYTES (0x3 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 14 bits */ #define UART_FCR_RTS_TRI_LEV_30BYTES (0x4 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 30 bits */ #define UART_FCR_RTS_TRI_LEV_46BYTES (0x5 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 46 bits */ #define UART_FCR_RTS_TRI_LEV_62BYTES (0x6 << UART_FCR_RTS_TRI_LEV_Pos) /*!< UA_FCR setting to set RTS Trigger Level to 62 bits */ /*---------------------------------------------------------------------------------------------------------*/ /* UA_LCR constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_WORD_LEN_5 (0) /*!< UA_LCR setting to set UART word length to 5 bits */ #define UART_WORD_LEN_6 (1) /*!< UA_LCR setting to set UART word length to 6 bits */ #define UART_WORD_LEN_7 (2) /*!< UA_LCR setting to set UART word length to 7 bits */ #define UART_WORD_LEN_8 (3) /*!< UA_LCR setting to set UART word length to 8 bits */ #define UART_PARITY_NONE (0x0 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as no parity */ #define UART_PARITY_ODD (0x1 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as odd parity */ #define UART_PARITY_EVEN (0x3 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as even parity */ #define UART_PARITY_STICK (0x8 << UART_LCR_PBE_Pos) /*!< UA_LCR setting to set UART as stick parity */ #define UART_STOP_BIT_1 (0x0 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for one stop bit */ #define UART_STOP_BIT_1_5 (0x1 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for 1.5 stop bit when 5-bit word length */ #define UART_STOP_BIT_2 (0x1 << UART_LCR_NSB_Pos) /*!< UA_LCR setting for two stop bit when 6, 7, 8-bit word length */ /*---------------------------------------------------------------------------------------------------------*/ /* UART RTS LEVEL TRIGGER constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_RTS_IS_HIGH_LEV_TRG (0x1 << UART_MCR_LEV_RTS_Pos) /*!< Set RTS is High Level Tigger */ #define UART_RTS_IS_LOW_LEV_TRG (0x0 << UART_MCR_LEV_RTS_Pos) /*!< Set RTS is Low Level Tigger */ /*---------------------------------------------------------------------------------------------------------*/ /* UART CTS LEVEL TRIGGER constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_CTS_IS_HIGH_LEV_TRG (0x1 << UART_MSR_LEV_CTS_Pos) /*!< Set CTS is High Level Trigger */ #define UART_CTS_IS_LOW_LEV_TRG (0x0 << UART_MSR_LEV_CTS_Pos) /*!< Set CTS is Low Level Trigger */ /*---------------------------------------------------------------------------------------------------------*/ /* UA_FUNC_SEL constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_FUNC_SEL_UART (0x0 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set UART Function (Default) */ #define UART_FUNC_SEL_LIN (0x1 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set LIN Funciton */ #define UART_FUNC_SEL_IrDA (0x2 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set IrDA Function */ #define UART_FUNC_SEL_RS485 (0x3 << UART_FUN_SEL_FUN_SEL_Pos) /*!< UA_FUNC_SEL setting to set RS485 Function */ /*---------------------------------------------------------------------------------------------------------*/ /* UA_LIN_CTL constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_LIN_CTL_LINS_EN (0x1UL << UART_LIN_CTL_LINS_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Mode Enable */ #define UART_LIN_CTL_LINS_HDET_EN (0x1UL << UART_LIN_CTL_LINS_HDET_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Header Detection Enable */ #define UART_LIN_CTL_LINS_ARS_EN (0x1UL << UART_LIN_CTL_LINS_ARS_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Automatic Resynchronization Mode Enable */ #define UART_LIN_CTL_LINS_DUM_EN (0x1UL << UART_LIN_CTL_LINS_DUM_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Slave Divider Update Method Enable */ #define UART_LIN_CTL_LIN_WAKE_EN (0x1UL << UART_LIN_CTL_LIN_WAKE_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Wake-Up Mode Enable */ #define UART_LIN_CTL_LIN_SHD (0x1UL << UART_LIN_CTL_LIN_SHD_Pos) /*!< UA_LIN_CTL setting to set LIN TX Send Header Enable */ #define UART_LIN_CTL_LIN_IDPEN (0x1UL << UART_LIN_CTL_LIN_IDPEN_Pos) /*!< UA_LIN_CTL setting to set LIN ID Parity Enable */ #define UART_LIN_CTL_LIN_BKDET_ENN (0x1UL << UART_LIN_CTL_LIN_BKDET_EN_Pos) /*!< UA_LIN_CTL setting to set LIN Break Detection Enable */ #define UART_LIN_CTL_LIN_RX_DIS (0x1UL << UART_LIN_CTL_LIN_RX_DIS_Pos) /*!< UA_LIN_CTL setting to set LIN Receiver Disable */ #define UART_LIN_CTL_BIT_ERR_EN (0x1UL << UART_LIN_CTL_BIT_ERR_EN_Pos) /*!< UA_LIN_CTL setting to set Bit Error Detect Enable */ #define UART_LIN_CTL_LIN_BKFL(x) (((x)-1) << UART_LIN_CTL_LIN_BKFL_Pos) /*!< UA_LIN_CTL setting to set LIN Break Field Length, x = 10 ~ 15, default value is 12 */ #define UART_LIN_CTL_LIN_BS_LEN(x) (((x)-1) << UART_LIN_CTL_LIN_BS_LEN_Pos)/*!< UA_LIN_CTL setting to set LIN Break/Sync Delimiter Length, x = 1 ~ 4 */ #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK (0x0UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field */ #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK_SYNC (0x1UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field and sync field */ #define UART_LIN_CTL_LIN_HEAD_SEL_BREAK_SYNC_ID (0x2UL << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UA_LIN_CTL setting to set LIN Header Select to break field, sync field and ID field*/ #define UART_LIN_CTL_LIN_LIN_PID(x) ((x) << UART_LIN_CTL_LIN_PID_Pos) /*!< UA_LIN_CTL setting to set LIN PID value */ /*---------------------------------------------------------------------------------------------------------*/ /* BAUD constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_BAUD_MODE0 (0) /*!< Set UART Baudrate Mode is Mode0 */ #define UART_BAUD_MODE2 (UART_BAUD_DIV_X_EN_Msk | UART_BAUD_DIV_X_ONE_Msk) /*!< Set UART Baudrate Mode is Mode2 */ /* UART THR Bit Field Definitions */ #define UART_THR_THR_Pos 0 /*!< UART THR: THR Position */ #define UART_THR_THR_Msk (0xFFul << UART_THR_THR_Pos) /*!< UART THR: THR Mask */ /* UART RBR Bit Field Definitions */ #define UART_RBR_RBR_Pos 0 /*!< UART RBR: RBR Posistion */ #define UART_RBR_RBR_Msk (0xFFul << UART_RBR_RBR_Pos) /*!< UART RBR: RBR Mask */ /* UART IER Bit Field Definitions */ #define UART_IER_DMA_RX_EN_Pos 15 /*!< UART IER: RX DMA Enable Posistion */ #define UART_IER_DMA_RX_EN_Msk (1ul << UART_IER_DMA_RX_EN_Pos) /*!< UART IER: RX DMA Enable Mask */ #define UART_IER_DMA_TX_EN_Pos 14 /*!< UART IER: TX DMA Enable Posistion */ #define UART_IER_DMA_TX_EN_Msk (1ul << UART_IER_DMA_TX_EN_Pos) /*!< UART IER: TX DMA Enable Mask */ #define UART_IER_AUTO_CTS_EN_Pos 13 /*!< UART IER: AUTO_CTS_EN Posistion */ #define UART_IER_AUTO_CTS_EN_Msk (1ul << UART_IER_AUTO_CTS_EN_Pos) /*!< UART IER: AUTO_CTS_EN Mask */ #define UART_IER_AUTO_RTS_EN_Pos 12 /*!< UART IER: AUTO_RTS_EN Posistion */ #define UART_IER_AUTO_RTS_EN_Msk (1ul << UART_IER_AUTO_RTS_EN_Pos) /*!< UART IER: AUTO_RTS_EN Mask */ #define UART_IER_TIME_OUT_EN_Pos 11 /*!< UART IER: TIME_OUT_EN Posistion */ #define UART_IER_TIME_OUT_EN_Msk (1ul << UART_IER_TIME_OUT_EN_Pos) /*!< UART IER: TIME_OUT_EN Mask */ #define UART_IER_LIN_RX_BRK_IEN_Pos 8 /*!< UART IER: LIN_RX_BRK_IEN Posistion */ #define UART_IER_LIN_RX_BRK_IEN_Msk (1ul << UART_IER_LIN_RX_BRK_IEN_Pos) /*!< UART IER: LIN_RX_BRK_IEN Mask */ #define UART_IER_WAKE_EN_Pos 6 /*!< UART IER: WAKE_EN Posistion */ #define UART_IER_WAKE_EN_Msk (1ul << UART_IER_WAKE_EN_Pos) /*!< UART IER: WAKE_EN Mask */ #define UART_IER_BUF_ERR_IEN_Pos 5 /*!< UART IER: BUF_ERR_IEN Posistion */ #define UART_IER_BUF_ERR_IEN_Msk (1ul << UART_IER_BUF_ERR_IEN_Pos) /*!< UART IER: BUF_ERR_IEN Mask */ #define UART_IER_RTO_IEN_Pos 4 /*!< UART IER: RTO_IEN Posistion */ #define UART_IER_RTO_IEN_Msk (1ul << UART_IER_RTO_IEN_Pos) /*!< UART IER: RTO_IEN Mask */ #define UART_IER_MODEM_IEN_Pos 3 /*!< UART IER: MODEM_IEN Posistion */ #define UART_IER_MODEM_IEN_Msk (1ul << UART_IER_MODEM_IEN_Pos) /*!< UART IER: MODEM_IEN Mask */ #define UART_IER_RLS_IEN_Pos 2 /*!< UART IER: RLS_IEN Posistion */ #define UART_IER_RLS_IEN_Msk (1ul << UART_IER_RLS_IEN_Pos) /*!< UART IER: RLS_IEN Mask */ #define UART_IER_THRE_IEN_Pos 1 /*!< UART IER: THRE_IEN Posistion */ #define UART_IER_THRE_IEN_Msk (1ul << UART_IER_THRE_IEN_Pos) /*!< UART IER: THRE_IEN Mask */ #define UART_IER_RDA_IEN_Pos 0 /*!< UART IER: RDA_IEN Position */ #define UART_IER_RDA_IEN_Msk (1ul << UART_IER_RDA_IEN_Pos) /*!< UART IER: RDA_IEN Mask */ /* UART FCR Bit Field Definitions */ #define UART_FCR_RTS_TRI_LEV_Pos 16 /*!< UART FCR: RTS_TRI_LEV Position */ #define UART_FCR_RTS_TRI_LEV_Msk (0xFul << UART_FCR_RTS_TRI_LEV_Pos) /*!< UART FCR: RTS_TRI_LEV Mask */ #define UART_FCR_RX_DIS_Pos 8 /*!< UART FCR: RX_DIS Position */ #define UART_FCR_RX_DIS_Msk (1ul << UART_FCR_RX_DIS_Pos) /*!< UART FCR: RX_DIS Mask */ #define UART_FCR_RFITL_Pos 4 /*!< UART FCR: RFITL Position */ #define UART_FCR_RFITL_Msk (0xFul << UART_FCR_RFITL_Pos) /*!< UART FCR: RFITL Mask */ #define UART_FCR_TFR_Pos 2 /*!< UART FCR: TFR Position */ #define UART_FCR_TFR_Msk (1ul << UART_FCR_TFR_Pos) /*!< UART FCR: TFR Mask */ #define UART_FCR_RFR_Pos 1 /*!< UART FCR: RFR Position */ #define UART_FCR_RFR_Msk (1ul << UART_FCR_RFR_Pos) /*!< UART FCR: RFR Mask */ /* UART LCR Bit Field Definitions */ #define UART_LCR_BCB_Pos 6 /*!< UART LCR: BCB Position */ #define UART_LCR_BCB_Msk (1ul << UART_LCR_BCB_Pos) /*!< UART LCR: BCB Mask */ #define UART_LCR_SPE_Pos 5 /*!< UART LCR: SPE Position */ #define UART_LCR_SPE_Msk (1ul << UART_LCR_SPE_Pos) /*!< UART LCR: SPE Mask */ #define UART_LCR_EPE_Pos 4 /*!< UART LCR: EPE Position */ #define UART_LCR_EPE_Msk (1ul << UART_LCR_EPE_Pos) /*!< UART LCR: EPE Mask */ #define UART_LCR_PBE_Pos 3 /*!< UART LCR: PBE Position */ #define UART_LCR_PBE_Msk (1ul << UART_LCR_PBE_Pos) /*!< UART LCR: PBE Mask */ #define UART_LCR_NSB_Pos 2 /*!< UART LCR: NSB Position */ #define UART_LCR_NSB_Msk (1ul << UART_LCR_NSB_Pos) /*!< UART LCR: NSB Mask */ #define UART_LCR_WLS_Pos 0 /*!< UART LCR: WLS Position */ #define UART_LCR_WLS_Msk (0x3ul << UART_LCR_WLS_Pos) /*!< UART LCR: WLS Mask */ /* UART MCR Bit Field Definitions */ #define UART_MCR_RTS_ST_Pos 13 /*!< UART MCR: RTS_ST Position */ #define UART_MCR_RTS_ST_Msk (1ul << UART_MCR_RTS_ST_Pos) /*!< UART MCR: RTS_ST Mask */ #define UART_MCR_LEV_RTS_Pos 9 /*!< UART MCR: LEV_RTS Position */ #define UART_MCR_LEV_RTS_Msk (1ul << UART_MCR_LEV_RTS_Pos) /*!< UART MCR: LEV_RTS Mask */ #define UART_MCR_RTS_Pos 1 /*!< UART MCR: RTS Position */ #define UART_MCR_RTS_Msk (1ul << UART_MCR_RTS_Pos) /*!< UART MCR: RTS Mask */ /* UART MSR Bit Field Definitions */ #define UART_MSR_LEV_CTS_Pos 8 /*!< UART MSR: LEV_CTS Position */ #define UART_MSR_LEV_CTS_Msk (1ul << UART_MSR_LEV_CTS_Pos) /*!< UART MSR: LEV_CTS Mask */ #define UART_MSR_CTS_ST_Pos 4 /*!< UART MSR: CTS_ST Position */ #define UART_MSR_CTS_ST_Msk (1ul << UART_MSR_CTS_ST_Pos) /*!< UART MSR: CTS_ST Mask */ #define UART_MSR_DCTSF_Pos 0 /*!< UART MSR: DCTST Position */ #define UART_MSR_DCTSF_Msk (1ul << UART_MSR_DCTSF_Pos) /*!< UART MSR: DCTST Mask */ /* UART FSR Bit Field Definitions */ #define UART_FSR_TE_FLAG_Pos 28 /*!< UART FSR: TE_FLAG Position */ #define UART_FSR_TE_FLAG_Msk (1ul << UART_FSR_TE_FLAG_Pos) /*!< UART FSR: TE_FLAG Mask */ #define UART_FSR_TX_OVER_IF_Pos 24 /*!< UART FSR: TX_OVER_IF Position */ #define UART_FSR_TX_OVER_IF_Msk (1ul << UART_FSR_TX_OVER_IF_Pos) /*!< UART FSR: TX_OVER_IF Mask */ #define UART_FSR_TX_FULL_Pos 23 /*!< UART FSR: TX_FULL Position */ #define UART_FSR_TX_FULL_Msk (1ul << UART_FSR_TX_FULL_Pos) /*!< UART FSR: TX_FULL Mask */ #define UART_FSR_TX_EMPTY_Pos 22 /*!< UART FSR: TX_EMPTY Position */ #define UART_FSR_TX_EMPTY_Msk (1ul << UART_FSR_TX_EMPTY_Pos) /*!< UART FSR: TX_EMPTY Mask */ #define UART_FSR_TX_POINTER_Pos 16 /*!< UART FSR: TX_POINTER Position */ #define UART_FSR_TX_POINTER_Msk (0x3Ful << UART_FSR_TX_POINTER_Pos) /*!< UART FSR: TX_POINTER Mask */ #define UART_FSR_RX_FULL_Pos 15 /*!< UART FSR: RX_FULL Position */ #define UART_FSR_RX_FULL_Msk (1ul << UART_FSR_RX_FULL_Pos) /*!< UART FSR: RX_FULL Mask */ #define UART_FSR_RX_EMPTY_Pos 14 /*!< UART FSR: RX_EMPTY Position */ #define UART_FSR_RX_EMPTY_Msk (1ul << UART_FSR_RX_EMPTY_Pos) /*!< UART FSR: RX_EMPTY Mask */ #define UART_FSR_RX_POINTER_Pos 8 /*!< UART FSR: RX_POINTERS Position */ #define UART_FSR_RX_POINTER_Msk (0x3Ful << UART_FSR_RX_POINTER_Pos) /*!< UART FSR: RX_POINTER Mask */ #define UART_FSR_BIF_Pos 6 /*!< UART FSR: BIF Position */ #define UART_FSR_BIF_Msk (1ul << UART_FSR_BIF_Pos) /*!< UART FSR: BIF Mask */ #define UART_FSR_FEF_Pos 5 /*!< UART FSR: FEF Position */ #define UART_FSR_FEF_Msk (1ul << UART_FSR_FEF_Pos) /*!< UART FSR: FEF Mask */ #define UART_FSR_PEF_Pos 4 /*!< UART FSR: PEF Position */ #define UART_FSR_PEF_Msk (1ul << UART_FSR_PEF_Pos) /*!< UART FSR: PEF Mask */ #define UART_FSR_RS485_ADD_DETF_Pos 3 /*!< UART FSR: RS485_ADD_DETF Position */ #define UART_FSR_RS485_ADD_DETF_Msk (1ul << UART_FSR_RS485_ADD_DETF_Pos) /*!< UART FSR: RS485_ADD_DETF Mask */ #define UART_FSR_RX_OVER_IF_Pos 0 /*!< UART FSR: RX_OVER_IF Position */ #define UART_FSR_RX_OVER_IF_Msk (1ul << UART_FSR_RX_OVER_IF_Pos) /*!< UART FSR: RX_OVER_IF Mask */ /* UART ISR Bit Field Definitions */ #define UART_ISR_LIN_RX_BREAK_INT_Pos 15 /*!< UART ISR: LIN_RX_BREAK_INT Position */ #define UART_ISR_LIN_RX_BREAK_INT_Msk (1ul << UART_ISR_LIN_RX_BREAK_INT_Pos) /*!< UART ISR: LIN_RX_BREAK_INT Mask */ #define UART_ISR_BUF_ERR_INT_Pos 13 /*!< UART ISR: BUF_ERR_INT Position */ #define UART_ISR_BUF_ERR_INT_Msk (1ul << UART_ISR_BUF_ERR_INT_Pos) /*!< UART ISR: BUF_ERR_INT Mask */ #define UART_ISR_TOUT_INT_Pos 12 /*!< UART ISR: TOUT_INT Position */ #define UART_ISR_TOUT_INT_Msk (1ul << UART_ISR_TOUT_INT_Pos) /*!< UART ISR: TOUT_INT Mask */ #define UART_ISR_MODEM_INT_Pos 11 /*!< UART ISR: MODEM_INT Position */ #define UART_ISR_MODEM_INT_Msk (1ul << UART_ISR_MODEM_INT_Pos) /*!< UART ISR: MODEM_INT Mask */ #define UART_ISR_RLS_INT_Pos 10 /*!< UART ISR: RLS_INT Position */ #define UART_ISR_RLS_INT_Msk (1ul << UART_ISR_RLS_INT_Pos) /*!< UART ISR: RLS_INT Mask */ #define UART_ISR_THRE_INT_Pos 9 /*!< UART ISR: THRE_INT Position */ #define UART_ISR_THRE_INT_Msk (1ul << UART_ISR_THRE_INT_Pos) /*!< UART ISR: THRE_INT Mask */ #define UART_ISR_RDA_INT_Pos 8 /*!< UART ISR: RDA_INT Position */ #define UART_ISR_RDA_INT_Msk (1ul << UART_ISR_RDA_INT_Pos) /*!< UART ISR: RDA_INT Mask */ #define UART_ISR_LIN_RX_BREAK_IF_Pos 7 /*!< UART ISR: LIN RX BREAK IF Position */ #define UART_ISR_LIN_RX_BREAK_IF_Msk (1ul << UART_ISR_LIN_RX_BREAK_IF_Pos) /*!< UART ISR: LIN RX BREAK IF Mask */ #define UART_ISR_BUF_ERR_IF_Pos 5 /*!< UART ISR: BUF_ERR_IF Position */ #define UART_ISR_BUF_ERR_IF_Msk (1ul << UART_ISR_BUF_ERR_IF_Pos) /*!< UART ISR: BUF_ERR_IF Mask */ #define UART_ISR_TOUT_IF_Pos 4 /*!< UART ISR: TOUT_IF Position */ #define UART_ISR_TOUT_IF_Msk (1ul << UART_ISR_TOUT_IF_Pos) /*!< UART ISR: TOUT_IF Mask */ #define UART_ISR_MODEM_IF_Pos 3 /*!< UART ISR: MODEM_IF Position */ #define UART_ISR_MODEM_IF_Msk (1ul << UART_ISR_MODEM_IF_Pos) /*!< UART ISR: MODEM_IF Mask */ #define UART_ISR_RLS_IF_Pos 2 /*!< UART ISR: RLS_IF Position */ #define UART_ISR_RLS_IF_Msk (1ul << UART_ISR_RLS_IF_Pos) /*!< UART ISR: RLS_IF Mask */ #define UART_ISR_THRE_IF_Pos 1 /*!< UART ISR: THRE_IF Position */ #define UART_ISR_THRE_IF_Msk (1ul << UART_ISR_THRE_IF_Pos) /*!< UART ISR: THRE_IF Mask */ #define UART_ISR_RDA_IF_Pos 0 /*!< UART ISR: RDA_IF Position */ #define UART_ISR_RDA_IF_Msk (1ul << UART_ISR_RDA_IF_Pos) /*!< UART ISR: RDA_IF Mask */ /* UART TOR Bit Field Definitions */ #define UART_TOR_DLY_Pos 8 /*!< UART TOR: DLY Position */ #define UART_TOR_DLY_Msk (0xFFul << UART_TOR_DLY_Pos) /*!< UART TOR: DLY Mask */ #define UART_TOR_TOIC_Pos 0 /*!< UART TOR: TOIC Position */ #define UART_TOR_TOIC_Msk (0xFFul << UART_TOR_TOIC_Pos) /*!< UART TOR: TOIC Mask */ /* UART BAUD Bit Field Definitions */ #define UART_BAUD_DIV_X_EN_Pos 29 /*!< UART BARD: DIV_X_EN Position */ #define UART_BAUD_DIV_X_EN_Msk (1ul << UART_BAUD_DIV_X_EN_Pos) /*!< UART BARD: DIV_X_EN Mask */ #define UART_BAUD_DIV_X_ONE_Pos 28 /*!< UART BARD: DIV_X_ONE Position */ #define UART_BAUD_DIV_X_ONE_Msk (1ul << UART_BAUD_DIV_X_ONE_Pos) /*!< UART BARD: DIV_X_ONE Mask */ #define UART_BAUD_DIVIDER_X_Pos 24 /*!< UART BARD: DIVIDER_X Position */ #define UART_BAUD_DIVIDER_X_Msk (0xFul << UART_BAUD_DIVIDER_X_Pos) /*!< UART BARD: DIVIDER_X Mask */ #define UART_BAUD_BRD_Pos 0 /*!< UART BARD: BRD Position */ #define UART_BAUD_BRD_Msk (0xFFFFul << UART_BAUD_BRD_Pos) /*!< UART BARD: BRD Mask */ /* UART IRCR Bit Field Definitions */ #define UART_IRCR_INV_RX_Pos 6 /*!< UART IRCR: INV_RX Position */ #define UART_IRCR_INV_RX_Msk (1ul << UART_IRCR_INV_RX_Pos) /*!< UART IRCR: INV_RX Mask */ #define UART_IRCR_INV_TX_Pos 5 /*!< UART IRCR: INV_TX Position */ #define UART_IRCR_INV_TX_Msk (1ul << UART_IRCR_INV_TX_Pos) /*!< UART IRCR: INV_TX Mask */ #define UART_IRCR_TX_SELECT_Pos 1 /*!< UART IRCR: TX_SELECT Position */ #define UART_IRCR_TX_SELECT_Msk (1ul << UART_IRCR_TX_SELECT_Pos) /*!< UART IRCR: TX_SELECT Mask */ /* UART ALT_CSR Bit Field Definitions */ #define UART_ALT_CSR_ADDR_MATCH_Pos 24 /*!< UART ALT_CSR: ADDR_MATCH Position */ #define UART_ALT_CSR_ADDR_MATCH_Msk (0xFFul << UART_ALT_CSR_ADDR_MATCH_Pos) /*!< UART ALT_CSR: ADDR_MATCH Mask */ #define UART_ALT_CSR_RS485_ADD_EN_Pos 15 /*!< UART ALT_CSR: RS485_ADD_EN Position */ #define UART_ALT_CSR_RS485_ADD_EN_Msk (1ul << UART_ALT_CSR_RS485_ADD_EN_Pos) /*!< UART ALT_CSR: RS485_ADD_EN Mask */ #define UART_ALT_CSR_RS485_AUD_Pos 10 /*!< UART ALT_CSR: RS485_AUD Position */ #define UART_ALT_CSR_RS485_AUD_Msk (1ul << UART_ALT_CSR_RS485_AUD_Pos) /*!< UART ALT_CSR: RS485_AUD Mask */ #define UART_ALT_CSR_RS485_AAD_Pos 9 /*!< UART ALT_CSR: RS485_AAD Position */ #define UART_ALT_CSR_RS485_AAD_Msk (1ul << UART_ALT_CSR_RS485_AAD_Pos) /*!< UART ALT_CSR: RS485_AAD Mask */ #define UART_ALT_CSR_RS485_NMM_Pos 8 /*!< UART ALT_CSR: RS485_NMM Position */ #define UART_ALT_CSR_RS485_NMM_Msk (1ul << UART_ALT_CSR_RS485_NMM_Pos) /*!< UART ALT_CSR: RS485_NMM Mask */ #define UART_ALT_CSR_LIN_TX_EN_Pos 7 /*!< UART ALT_CSR: LIN TX Break Mode Enable Position */ #define UART_ALT_CSR_LIN_TX_EN_Msk (1ul << UART_ALT_CSR_LIN_TX_EN_Pos) /*!< UART ALT_CSR: LIN TX Break Mode Enable Mask */ #define UART_ALT_CSR_LIN_RX_EN_Pos 6 /*!< UART ALT_CSR: LIN RX Enable Position */ #define UART_ALT_CSR_LIN_RX_EN_Msk (1ul << UART_ALT_CSR_LIN_RX_EN_Pos) /*!< UART ALT_CSR: LIN RX Enable Mask */ #define UART_ALT_CSR_UA_LIN_BKFL_Pos 0 /*!< UART ALT_CSR: UART LIN Break Field Length Position */ #define UART_ALT_CSR_UA_LIN_BKFL_Msk (0xFul << UART_ALT_CSR_UA_LIN_BKFL_Pos) /*!< UART ALT_CSR: UART LIN Break Field Length Mask */ /* UART FUN_SEL Bit Field Definitions */ #define UART_FUN_SEL_FUN_SEL_Pos 0 /*!< UART FUN_SEL: FUN_SEL Position */ #define UART_FUN_SEL_FUN_SEL_Msk (0x3ul << UART_FUN_SEL_FUN_SEL_Pos) /*!< UART FUN_SEL: FUN_SEL Mask */ /* UART LIN_CTL Bit Field Definitions */ #define UART_LIN_CTL_LIN_PID_Pos 24 /*!< UART LIN_CTL: LIN_PID Position */ #define UART_LIN_CTL_LIN_PID_Msk (0xFFul << UART_LIN_CTL_LIN_PID_Pos) /*!< UART LIN_CTL: LIN_PID Mask */ #define UART_LIN_CTL_LIN_HEAD_SEL_Pos 22 /*!< UART LIN_CTL: LIN_HEAD_SEL Position */ #define UART_LIN_CTL_LIN_HEAD_SEL_Msk (0x3ul << UART_LIN_CTL_LIN_HEAD_SEL_Pos) /*!< UART LIN_CTL: LIN_HEAD_SEL Mask */ #define UART_LIN_CTL_LIN_BS_LEN_Pos 20 /*!< UART LIN_CTL: LIN_BS_LEN Position */ #define UART_LIN_CTL_LIN_BS_LEN_Msk (0x3ul << UART_LIN_CTL_LIN_BS_LEN_Pos) /*!< UART LIN_CTL: LIN_BS_LEN Mask */ #define UART_LIN_CTL_LIN_BKFL_Pos 16 /*!< UART LIN_CTL: LIN_BKFL Position */ #define UART_LIN_CTL_LIN_BKFL_Msk (0xFul << UART_LIN_CTL_LIN_BKFL_Pos) /*!< UART LIN_CTL: LIN_BKFL Mask */ #define UART_LIN_CTL_BIT_ERR_EN_Pos 12 /*!< UART LIN_CTL: BIT_ERR_EN Position */ #define UART_LIN_CTL_BIT_ERR_EN_Msk (1ul << UART_LIN_CTL_BIT_ERR_EN_Pos) /*!< UART LIN_CTL: BIT_ERR_EN Mask */ #define UART_LIN_CTL_LIN_RX_DIS_Pos 11 /*!< UART LIN_CTL: LIN_RX_DIS Position */ #define UART_LIN_CTL_LIN_RX_DIS_Msk (1ul << UART_LIN_CTL_LIN_RX_DIS_Pos) /*!< UART LIN_CTL: LIN_RX_DIS Mask */ #define UART_LIN_CTL_LIN_BKDET_EN_Pos 10 /*!< UART LIN_CTL: LIN_BKDET_EN Position */ #define UART_LIN_CTL_LIN_BKDET_EN_Msk (1ul << UART_LIN_CTL_LIN_BKDET_EN_Pos) /*!< UART LIN_CTL: LIN_BKDET_EN Mask */ #define UART_LIN_CTL_LIN_IDPEN_Pos 9 /*!< UART LIN_CTL: LIN_IDPEN Position */ #define UART_LIN_CTL_LIN_IDPEN_Msk (1ul << UART_LIN_CTL_LIN_IDPEN_Pos) /*!< UART LIN_CTL: LIN_IDPEN Mask */ #define UART_LIN_CTL_LIN_SHD_Pos 8 /*!< UART LIN_CTL: LIN_SHD Position */ #define UART_LIN_CTL_LIN_SHD_Msk (1ul << UART_LIN_CTL_LIN_SHD_Pos) /*!< UART LIN_CTL: LIN_SHD Mask */ #define UART_LIN_CTL_LIN_WAKE_EN_Pos 4 /*!< UART LIN_CTL: LIN_WAKE_EN Position */ #define UART_LIN_CTL_LIN_WAKE_EN_Msk (1ul << UART_LIN_CTL_LIN_WAKE_EN_Pos) /*!< UART LIN_CTL: LIN_WAKE_EN Mask */ #define UART_LIN_CTL_LINS_DUM_EN_Pos 3 /*!< UART LIN_CTL: LINS_DUM_EN Position */ #define UART_LIN_CTL_LINS_DUM_EN_Msk (1ul << UART_LIN_CTL_LINS_DUM_EN_Pos) /*!< UART LIN_CTL: LINS_DUM_EN Mask */ #define UART_LIN_CTL_LINS_ARS_EN_Pos 2 /*!< UART LIN_CTL: LINS_ARS_EN Position */ #define UART_LIN_CTL_LINS_ARS_EN_Msk (1ul << UART_LIN_CTL_LINS_ARS_EN_Pos) /*!< UART LIN_CTL: LINS_ARS_EN Mask */ #define UART_LIN_CTL_LINS_HDET_EN_Pos 1 /*!< UART LIN_CTL: LINS_HDET_EN Position */ #define UART_LIN_CTL_LINS_HDET_EN_Msk (1ul << UART_LIN_CTL_LINS_HDET_EN_Pos) /*!< UART LIN_CTL: LINS_HDET_EN Mask */ #define UART_LIN_CTL_LINS_EN_Pos 0 /*!< UART LIN_CTL: LINS_EN Position */ #define UART_LIN_CTL_LINS_EN_Msk (1ul << UART_LIN_CTL_LINS_EN_Pos) /*!< UART LIN_CTL: LINS_EN Mask */ /* UART LIN_SR Bit Field Definitions */ #define UART_LIN_SR_LINS_SYNC_F_Pos 3 /*!< UART LIN_SR: LINS_SYNC_F Position */ #define UART_LIN_SR_LINS_SYNC_F_Msk (1ul << UART_LIN_SR_LINS_SYNC_F_Pos) /*!< UART LIN_SR: LINS_SYNC_F Mask */ #define UART_LIN_SR_LINS_IDPERR_F_Pos 2 /*!< UART LIN_SR: LINS_IDPERR_F Position */ #define UART_LIN_SR_LINS_IDPERR_F_Msk (1ul << UART_LIN_SR_LINS_IDPERR_F_Pos) /*!< UART LIN_SR: LINS_IDPERR_F Mask */ #define UART_LIN_SR_LINS_HERR_F_Pos 1 /*!< UART LIN_SR: LINS_HERR_F Position */ #define UART_LIN_SR_LINS_HERR_F_Msk (1ul << UART_LIN_SR_LINS_HERR_F_Pos) /*!< UART LIN_SR: LINS_HERR_F Mask */ #define UART_LIN_SR_LINS_HDET_F_Pos 0 /*!< UART LIN_SR: LINS_HDET_F Position */ #define UART_LIN_SR_LINS_HDET_F_Msk (1ul << UART_LIN_SR_LINS_HDET_F_Pos) /*!< UART LIN_SR: LINS_HDET_F Mask */ /* UART DEBUG Bit Field Definitions */ #define UART_DEBUG_ERR_DIVIA_F_Pos 0 /*!< UART DEBUG: ERR_DIVIA_F Position */ #define UART_DEBUG_ERR_DIVIA_F_Msk (1ul << UART_DEBUG_ERR_DIVIA_F_Pos) /*!< UART DEBUG: ERR_DIVIA_F Mask */ #define UART_DEBUG_ERR_HETIME_OUT_F_Pos 1 /*!< UART DEBUG: ERR_HETIME_OUT_F Position */ #define UART_DEBUG_ERR_HETIME_OUT_F_Msk (1ul << UART_DEBUG_ERR_HETIME_OUT_F_Pos) /*!< UART DEBUG: ERR_HETIME_OUT_F Mask */ #define UART_DEBUG_ERR_HEFE_F_Pos 2 /*!< UART DEBUG: ERR_HEFE_F Position */ #define UART_DEBUG_ERR_HEFE_F_Msk (1ul << UART_DEBUG_ERR_HEFE_F_Pos) /*!< UART DEBUG: ERR_HEFE_F Mask */ #define UART_DEBUG_ERR_SYNC_F_Pos 3 /*!< UART DEBUG: ERR_SYNC_F Position */ #define UART_DEBUG_ERR_SYNC_F_Msk (1ul << UART_DEBUG_ERR_SYNC_F_Pos) /*!< UART DEBUG: ERR_SYNC_F Mask */ /* UART SC_CTL Bit Field Definitions */ #define UART_SC_CTL_RX_ERETRY_Pos 0 /*!< UART SC_CTL: RX_ERETRY Position */ #define UART_SC_CTL_RX_ERETRY_Msk (7ul << UART_SC_CTL_RX_ERETRY_Pos) /*!< UART SC_CTL: RX_ERETRY Mask */ #define UART_SC_CTL_RX_ERETRY_EN_Pos 3 /*!< UART SC_CTL: RX_ERETRY_EN Position */ #define UART_SC_CTL_RX_ERETRY_EN_Msk (1ul << UART_SC_CTL_RX_ERETRY_EN_Pos) /*!< UART SC_CTL: RX_ERETRY_EN Mask */ #define UART_SC_CTL_TX_ERETRY_Pos 4 /*!< UART SC_CTL: TX_ERETRY Position */ #define UART_SC_CTL_TX_ERETRY_Msk (7ul << UART_SC_CTL_TX_ERETRY_Pos) /*!< UART SC_CTL: TX_ERETRY Mask */ #define UART_SC_CTL_TX_ERETRY_EN_Pos 7 /*!< UART SC_CTL: TX_ERETRY_EN Position */ #define UART_SC_CTL_TX_ERETRY_EN_Msk (1ul << UART_SC_CTL_TX_ERETRY_EN_Pos) /*!< UART SC_CTL: TX_ERETRY_EN Mask */ /* UART SC_FSR Bit Field Definitions */ #define UART_SC_FSR_RX_OVER_ERETRY_Pos 0 /*!< UART SC_FSR: RX_OVER_ERETRY Position */ #define UART_SC_FSR_RX_OVER_ERETRY_Msk (1ul << UART_SC_FSR_RX_OVER_ERETRY_Pos) /*!< UART SC_FSR: RX_OVER_ERETRY Mask */ #define UART_SC_FSR_TX_OVER_ERETRY_Pos 1 /*!< UART SC_FSR: TX_OVER_ERETRY Position */ #define UART_SC_FSR_TX_OVER_ERETRY_Msk (1ul << UART_SC_FSR_TX_OVER_ERETRY_Pos) /*!< UART SC_FSR: TX_OVER_ERETRY Mask */ #define UART_SC_FSR_RX_ERETRY_F_Pos 8 /*!< UART SC_FSR: RX_ERETRY_F Position */ #define UART_SC_FSR_RX_ERETRY_F_Msk (1ul << UART_SC_FSR_RX_ERETRY_F_Pos) /*!< UART SC_FSR: RX_ERETRY_F Mask */ #define UART_SC_FSR_TX_ERETRY_F_Pos 9 /*!< UART SC_FSR: TX_ERETRY_F Position */ #define UART_SC_FSR_TX_ERETRY_F_Msk (1ul << UART_SC_FSR_TX_ERETRY_F_Pos) /*!< UART SC_FSR: TX_ERETRY_F Mask */ /* Enable/Disable IrDA Mode */ #define ENABLEIrDA 1 /*!< Enable IrDA */ #define DISABLEIrDA 0 /*!< Disable IrDA */ /* define IrDA Direction */ #define IrDA_TX 0 /*!< Set IrDA Tx direction*/ #define IrDA_RX 1 /*!< Set IrDA Rx direction*/ /* define RTS signal */ #define UART_RTS_HIGH 1 /*!< Set RTS high*/ #define UART_RTS_LOW 0 /*!< Set RTS low*/ /* define IOCTL command of UART operation mode, interrupt or pooling mode */ #define UART_IOC_SETTXMODE 1 /*!< Set Tx Mode */ #define UART_IOC_SETRXMODE 2 /*!< Set Tx Mode */ #define UART_IOC_GETRECCHARINFO 3 /*!< Get receive character */ #define UART_IOC_SETUARTPARAMETER 4 /*!< Config UART */ //#define UART_IOC_PERFORMBLUETOOTH 5 #define UART_IOC_PERFORMIrDA 6 /*!< Config IrDA */ #define UART_IOC_GETUARTREGISTERVALUE 7 /*!< Get UART register value*/ #define UART_IOC_GETERRNO 8 /*!< Get rrror code */ //#define UART_IOC_SETMODEMLOOPBACK 9 //#define UART_IOC_GETDSRSTATE 10 //#define UART_IOC_SETDTRSIGNAL 11 #define UART_IOC_SETINTERRUPT 12 /*!< Set interrupt */ #define UART_IOC_SETBREAKCONTROL 13 /*!< Set break */ #define UART_IOC_GETBIISTATE 14 /*!< Get break status */ #define UART_IOC_GETCTSSTATE 15 /*!< Get CTS status */ #define UART_IOC_SETRTSSIGNAL 16 /*!< Set RTS signal */ #define UART_IOC_SETMODEMINTERRUPT 17 /*!< Set modem interrupt */ #define UART_IOC_ENABLEHWFLOWCONTROL 18 /*!< Enable H/W flow control */ #define UART_IOC_DISABLEHWFLOWCONTROL 19 /*!< Disable H/W flow control */ //#define UART_IOC_ENABLESWFLOWCONTROL 20 /*!< Enable S/W flow control */ //#define UART_IOC_DISABLESWFLOWCONTROL 21 /*!< Disable S/W flow control */ //#define UART_IOC_SETUART1FULLMODEM 22 //#define UART_IOC_SETUART1HIGHSPEED 23 #define UART_IOC_FLUSH_TX_BUFFER 24 /*!< Flush Tx buffer */ #define UART_IOC_FLUSH_RX_BUFFER 25 /*!< Flus Rx buffer */ #define UART_IOC_SET_RS485_MODE 26 /*!< Select RS485 Mode */ #define UART_IOC_SEND_RS485_ADDRESS 27 /*!< Send RS485 Address*/ #define UART_IOC_SET_RS485_RXOFF 28 /*!< Select RS485 Mode */ #define UART_IOC_SET_ALTCTL_REG 29 /*!< Set ALT_CTL register */ #define UART_IOC_GET_ALTCTL_REG 30 /*!< Get ALT_CTL register */ #define UART_IOC_SET_LIN_MODE 31 /*!< Select LIN Mode */ /* Enable/Disable Modem interrupt */ #define UART_ENABLE_MODEM_INT 0 /*!< Enable Modem interrupt */ #define UART_DISABLE_MODEM_INT 1 /*!< Disable Modem interrupt */ /* These error code can get from UART_IOC_GETERRNO */ #define UART_ERR_PARITY_INVALID -1 /*!< Parity invalid */ #define UART_ERR_DATA_BITS_INVALID -2 /*!< Data bits invalid */ #define UART_ERR_STOP_BITS_INVALID -3 /*!< Stop bit invalid */ #define UART_ERR_TRIGGERLEVEL_INVALID -4 /*!< Trigger level invalid */ #define UART_ERR_CHANNEL_INVALID -5 /*!< UART channel invalid */ #define UART_ERR_ALLOC_MEMORY_FAIL -6 /*!< Allocate memory error */ //#define UART_ERR_CLOCK_SOURCE_INVALID -7 /*!< Clock Source invalid */ //#define UART_ERR_BAUDRATE_INVALID -8 /*!< Baudrate invalid */ //#define UART_ERR_CONFIGURE_BT_FAIL -9 #define UART_ERR_IrDA_COMMAND_INVALID -10 /*!< IrDA mode invalid */ #define UART_ERR_TX_BUF_NOT_ENOUGH -11 /*!< Tx buffer not enough */ #define UART_ERR_OPERATE_MODE_INVALID -12 /*!< Operation mode invalid */ #define UART_ERR_SET_BAUDRATE_FAIL -13 /*!< Set baudrate fail */ /* These are the error code actually returns to user application */ #define UART_ERR_ID 0xFFFF1700 /*!< UART library ID */ #define UART_ENOTTY (1 | UART_ERR_ID) /*!< Command not support */ #define UART_ENODEV (2 | UART_ERR_ID) /*!< Interface number out of range */ #define UART_EIO (3 | UART_ERR_ID) /*!< Read/Write error */ /*@}*/ /* end of group N9H30_UART_EXPORTED_CONSTANTS */ /** @addtogroup N9H30_UART_EXPORTED_STRUCTS UART Exported Structs @{ */ /// @cond HIDDEN_SYMBOLS /*----------------------------------------------------*/ /* Define UART buffer structure */ /*----------------------------------------------------*/ typedef struct UART_BUFFER_STRUCT { UINT32 volatile uUartTxHead, uUartTxTail; UINT32 volatile uUartRxHead, uUartRxTail; PUINT8 pucUartTxBuf; PUINT8 pucUartRxBuf; PVOID pvUartVector; BOOL bIsUseUARTTxInt; BOOL bIsUseUARTRxInt; BOOL bIsUARTInitial; PINT pucUARTFlag; PINT pucLINFlag; INT32 volatile nErrno; } UART_BUFFER_T; /// @endcond HIDDEN_SYMBOLS /** \brief Structure type of UART data */ #if 0 #define UART0 0 /*!< UART0 channel */ #define UART1 1 /*!< UART1 channel */ #define UART2 2 /*!< UART2 channel */ #define UART3 3 /*!< UART3 channel */ #define UART4 4 /*!< UART4 channel */ #define UART5 5 /*!< UART5 channel */ #define UART6 6 /*!< UART6 channel */ #define UART7 7 /*!< UART7 channel */ #define UART8 8 /*!< UART8 channel */ #define UART9 9 /*!< UART9 channel */ #define UARTA 10 /*!< UARTA channel */ typedef struct UART_STRUCT { UINT32 uFreq; /*!< UART clock frequency */ UINT32 uBaudRate; /*!< Baudrate */ UINT8 ucUartNo; /*!< UART Port */ UINT8 ucDataBits; /*!< Select Data length */ UINT8 ucStopBits; /*!< Select stop bit length */ UINT8 ucParity; /*!< Select Parity */ UINT8 ucRxTriggerLevel; /*!< Select Rx FIFO trigger level */ } UART_T; #else typedef struct { __IO uint32_t DAT; /*!< [0x0000] UART Receive/Transmit Buffer Register */ __IO uint32_t INTEN; /*!< [0x0004] UART Interrupt Enable Register */ __IO uint32_t FIFO; /*!< [0x0008] UART FIFO Control Register */ __IO uint32_t LINE; /*!< [0x000c] UART Line Control Register */ __IO uint32_t MODEM; /*!< [0x0010] UART Modem Control Register */ __IO uint32_t MODEMSTS; /*!< [0x0014] UART Modem Status Register */ __IO uint32_t FIFOSTS; /*!< [0x0018] UART FIFO Status Register */ __IO uint32_t INTSTS; /*!< [0x001c] UART Interrupt Status Register */ __IO uint32_t TOUT; /*!< [0x0020] UART Time-out Register */ __IO uint32_t BAUD; /*!< [0x0024] UART Baud Rate Divider Register */ __IO uint32_t IRDA; /*!< [0x0028] UART IrDA Control Register */ __IO uint32_t ALTCTL; /*!< [0x002c] UART Alternate Control/Status Register */ __IO uint32_t FUNCSEL; /*!< [0x0030] UART Function Select Register */ __IO uint32_t LINCTL; /*!< [0x0034] UART LIN Control Register */ __IO uint32_t LINSTS; /*!< [0x0038] UART LIN Status Register */ } UART_T; #define UART0 ((UART_T *) UART0_BA) /*!< UART0 channel */ #define UART1 ((UART_T *) UART1_BA) /*!< UART1 channel */ #define UART2 ((UART_T *) UART2_BA) /*!< UART2 channel */ #define UART3 ((UART_T *) UART3_BA) /*!< UART3 channel */ #define UART4 ((UART_T *) UART4_BA) /*!< UART4 channel */ #define UART5 ((UART_T *) UART5_BA) /*!< UART5 channel */ #define UART6 ((UART_T *) UART6_BA) /*!< UART6 channel */ #define UART7 ((UART_T *) UART7_BA) /*!< UART7 channel */ #define UART8 ((UART_T *) UART8_BA) /*!< UART8 channel */ #define UART9 ((UART_T *) UART9_BA) /*!< UART9 channel */ #define UARTA ((UART_T *) UARTA_BA) /*!< UARTA channel */ /*---------------------------------------------------------------------------------------------------------*/ /* UART_FUNCSEL constants definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define UART_FIFO_RFITL_Pos (4) /*!< UART_T::FIFO: RFITL Position */ #define UART_FIFO_RFITL_Msk (0xful << UART_FIFO_RFITL_Pos) /*!< UART_T::FIFO: RFITL Mask */ #define UART_FIFO_RTSTRGLV_Pos (16) /*!< UART_T::FIFO: RTSTRGLV Position */ #define UART_FIFO_RTSTRGLV_Msk (0xful << UART_FIFO_RTSTRGLV_Pos) /*!< UART_T::FIFO: RTSTRGLV Mask */ #define UART_FUNCSEL_FUNCSEL_Pos (0) /*!< UART_T::FUNCSEL: FUNCSEL Position */ #define UART_FUNCSEL_FUNCSEL_Msk (0x3ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_T::FUNCSEL: FUNCSEL Mask */ #define UART_FUNCSEL_UART (0x0ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set UART Function (Default) \hideinitializer */ #define UART_FUNCSEL_LIN (0x1ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set LIN Function \hideinitializer */ #define UART_FUNCSEL_IrDA (0x2ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set IrDA Function \hideinitializer */ #define UART_FUNCSEL_RS485 (0x3ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set RS485 Function \hideinitializer */ #endif /** \brief Structure type of UART register */ typedef struct UART_REGISTER_STRUCT { UINT32 uUartReg[14][2]; /*!< Store UART register value */ } UART_REGISTER_T; /*@}*/ /* end of group N9H30_UART_EXPORTED_STRUCTS */ /** @addtogroup N9H30_UART_EXPORTED_FUNCTIONS UART Exported Functions @{ */ /** * @brief Calculate UART baudrate mode0 divider * * @param[in] u32SrcFreq UART clock frequency * @param[in] u32BaudRate Baudrate of UART module * * @return UART baudrate mode0 divider * \hideinitializer * */ #define UART_BAUD_MODE0_DIVIDER(u32SrcFreq, u32BaudRate) (((u32SrcFreq + (u32BaudRate*8)) / u32BaudRate >> 4)-2) /** * @brief Calculate UART baudrate mode2 divider * * @param[in] u32SrcFreq UART clock frequency * @param[in] u32BaudRate Baudrate of UART module * * @return UART baudrate mode2 divider * \hideinitializer */ #define UART_BAUD_MODE2_DIVIDER(u32SrcFreq, u32BaudRate) (((u32SrcFreq + (u32BaudRate/2)) / u32BaudRate)-2) /** * @brief Get Rx empty * * @param[in] uart The pointer of the specified UART module * * @retval 0 Rx FIFO is not empty * @retval >=1 Rx FIFO is empty * * @details This macro get Receiver FIFO empty register value. * \hideinitializer */ #define UART_GET_RX_EMPTY(uart) ((uart)->FIFOSTS & UART_FSR_RX_EMPTY_Msk) /** * @brief Check TX FIFO is full or not * * @param[in] uart The pointer of the specified UART module * * @retval 1 TX FIFO is full * @retval 0 TX FIFO is not full * * @details This macro check TX FIFO is full or not. * \hideinitializer */ #define UART_IS_TX_FULL(uart) (((uart)->FIFOSTS & UART_FSR_TX_FULL_Msk)>>UART_FSR_TX_FULL_Pos) /** * @brief Write UART data * * @param[in] uart The pointer of the specified UART module * @param[in] u8Data Data byte to transmit. * * @return None * * @details This macro write Data to Tx data register. * \hideinitializer */ #define UART_WRITE(uart, u8Data) ((uart)->DAT = (u8Data)) /** * @brief Read UART data * * @param[in] uart The pointer of the specified UART module * * @return The oldest data byte in RX FIFO. * * @details This macro read Rx data register. * \hideinitializer */ #define UART_READ(uart) ((uart)->DAT) #define UART_ENABLE_INT(uart, u32eIntSel) ((uart)->INTEN |= (u32eIntSel)) #define UART_DISABLE_INT(uart, u32eIntSel) ((uart)->INTEN &= ~ (u32eIntSel)) /*-----------------------------------------*/ /* interface function declarations */ /*-----------------------------------------*/ INT uartOpen(PVOID param); INT uartInit(void); INT uartIoctl(INT nNum, UINT32 uCom, UINT32 uArg0, UINT32 uArg1); INT32 uartRelease(INT nNum); INT32 uartWrite(INT nNum, PUINT8 pucBuf, UINT32 uLen); INT32 uartRead(INT nNum, PUINT8 pucBuf, UINT32 uLen); void UART_Open(UART_T *uart, uint32_t u32baudrate); void UART_Close(UART_T *uart); void UART_SetLineConfig(UART_T *uart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits); /*@}*/ /* end of group N9H30_UART_EXPORTED_FUNCTIONS */ /*@}*/ /* end of group N9H30_UART_Driver */ /*@}*/ /* end of group N9H30_Device_Driver */ #endif