rt-thread-official/bsp/upd70f3454/drivers/uart.h

297 lines
13 KiB
C

#ifndef __UART_H__
#define __UART_H__
#define BAUD_RATE 9600
/*
UARTAn control register 0 (UAnCTL0)
*/
#define _10_UARTA_UAnCTL0_INITIALVALUE 0x10U
/* UARTAn operation control (UAnPWR) */
#define _00_UARTA_OPERATION_DISABLE 0x00U /* disable UARTAn operation (UARTAn reset asynchronously) */
#define _80_UARTA_OPERATION_ENABLE 0x80U /* enable UARTAn operation */
/* Transmission operation enable (UAnTXE) */
#define _00_UARTA_TRANSMISSION_DISABLE 0x00U /* disable transmission operation */
#define _40_UARTA_TRANSMISSION_ENABLE 0x40U /* enable transmission operation */
/* Reception operation enable (UAnRXE) */
#define _00_UARTA_RECEPTION_DISABLE 0x00U /* disable reception operation */
#define _20_UARTA_RECEPTION_ENABLE 0x20U /* enable reception operation */
/* Transfer direction selection (UAnDIR) */
#define _00_UARTA_TRANSFDIR_MSB 0x00U /* MSB-first transfer */
#define _10_UARTA_TRANSFDIR_LSB 0x10U /* LSB-first transfer */
/* Parity selection during transmission/reception (UAnPS1,UAnPS0) */
#define _00_UARTA_PARITY_NONE 0x00U /* no parity output/reception with no parity */
#define _04_UARTA_PARITY_ZREO 0x04U /* 0 parity output/reception with 0 parity */
#define _08_UARTA_PARITY_ODD 0x08U /* odd parity output/odd parity check */
#define _0C_UARTA_PARITY_EVEN 0x0CU /* even parity output/even parity check */
/* Specification of data character length of 1 frame of transmit/receive data (UAnCL) */
#define _00_UARTA_DATALENGTH_7BIT 0x00U /* 7 bits */
#define _02_UARTA_DATALENGTH_8BIT 0x02U /* 8 bits */
/* Specification of length of stop bit for transmit data (UAnSL) */
#define _00_UARTA_STOPLENGTH_1BIT 0x00U /* 1 bit */
#define _01_UARTA_STOPLENGTH_2BIT 0x01U /* 2 bits */
/*
UARTAn base clock selects register (UAnCTL1)
*/
/* UAnCTL1 register (UAnCKS3 - UAnCKS0) */
#define _00_UARTA_BASECLK_FXX_2 0x00U /* fXX/2 */
#define _01_UARTA_BASECLK_FXX_4 0x01U /* fXX/2^2 */
#define _02_UARTA_BASECLK_FXX_8 0x02U /* fXX/2^3 */
#define _03_UARTA_BASECLK_FXX_16 0x03U /* fXX/2^4 */
#define _04_UARTA_BASECLK_FXX_32 0x04U /* fXX/2^5 */
#define _05_UARTA_BASECLK_FXX_64 0x05U /* fXX/2^6 */
#define _06_UARTA_BASECLK_FXX_128 0x06U /* fXX/2^7 */
#define _07_UARTA_BASECLK_FXX_256 0x07U /* fXX/2^8 */
#define _08_UARTA_BASECLK_FXX_512 0x08U /* fXX/2^9 */
#define _09_UARTA_BASECLK_FXX_1024 0x09U /* fXX/2^10 */
#define _0A_UARTA_BASECLK_FXX_2048 0x0AU /* fXX/2^11 */
#define _0B_UARTA_BASECLK_FXX_4096 0x0BU /* fXX/2^12 */
/*
UARTAn option control register 0 (UAnOPT0)
*/
#define _14_UARTA_UAnOPT0_INITIALVALUE 0x14U
/* Transmit data level bit(UAnTDL) */
#define _00_UARTA_TRAN_DATALEVEL_NORMAL 0x00U /* normal output of transfer data */
#define _02_UARTA_TRAN_DATALEVEL_INVERTED 0x02U /* inverted output of transfer data */
/* Receive data level bit(UAnRDL) */
#define _00_UARTA_REC_DATALEVEL_NORMAL 0x00U /* normal input of transfer data */
#define _01_UARTA_REC_DATALEVEL_INVERTED 0x01U /* inverted input of transfer data */
/*
CSIBn control register 0 (CBnCTL0)
*/
/* Specification of CSIBn operation disable/enable (CBnPWR)*/
#define _00_CSIB_OPERATION_DISABLE 0x00U /* disable CSIBn operation and reset the CBnSTR register */
#define _80_CSIB_OPERATION_ENABLE 0x80U /* enable CSIBn operation */
/* Specification of transmit operation disable/enable (CBnTXE)*/
#define _00_CSIB_TRANSMIT_DISABLE 0x00U /* disable transmit operation */
#define _40_CSIB_TRANSMIT_ENABLE 0x40U /* enable transmit operation */
/* Specification of receive operation disable/enable (CBnRXE)*/
#define _00_CSIB_RECEIVE_DISABLE 0x00U /* disable receive operation */
#define _20_CSIB_RECEIVE_ENABLE 0x20U /* enable receive operation */
/* Specification of transfer direction mode (MSB/LSB) (CBnDIR) */
#define _00_CSIB_DATA_MSB 0x00U /* MSB first */
#define _10_CSIB_DATA_LSB 0x10U /* LSB first */
/* Transfer mode specification (CBnTMS) */
#define _00_CSIB_MODE_SINGLE 0x00U /* single transfer mode */
#define _02_CSIB_MODE_CONTINUOUS 0x02U /* continuous transfer mode */
/* Specification of start transfer disable/enable (CBnSCE) */
#define _00_CSIB_STARTTRG_INVALID 0x00U /* communication start trigger invalid */
#define _01_CSIB_STARTTRG_VALID 0x01U /* communication start trigger valid */
/*
CSIBn control register 1 (CBnCTL1)
*/
/* Specification of data transmission/reception timing in relation to SCKBn (CBnCKP, CBnDAP) */
#define _00_CSIB_DATA_TIMING1 0x00U /* communication type 1 */
#define _08_CSIB_DATA_TIMING2 0x08U /* communication type 2 */
#define _10_CSIB_DATA_TIMING3 0x10U /* communication type 3 */
#define _18_CSIB_DATA_TIMING4 0x18U /* communication type 4 */
/* Specification of input clock (CBnCKS2 - CBnCKS0) */
#define _00_CSIB_CLOCK_1 0x00U /* fXX /2 */
#define _01_CSIB_CLOCK_2 0x01U /* fXX/4 */
#define _02_CSIB_CLOCK_3 0x02U /* fXX /8 */
#define _03_CSIB_CLOCK_4 0x03U /* fXX /16 */
#define _04_CSIB_CLOCK_5 0x04U /* fXX /32 */
#define _05_CSIB_CLOCK_6 0x05U /* fXX /64 */
#define _06_CSIB_CLOCK_7 0x06U /* fBRGm */
#define _07_CSIB_CLOCK_EXT 0x07U /* external clock SCKBn */
/*
CSIBn control register 2 (CBnCTL2)
*/
/* Serial register bit length (CBnCL3,CBnCL2,CBnCL1,CBnCL0) */
#define _00_CSIB_DATA_LENGTH_8 0x00U /* 8 bits */
#define _01_CSIB_DATA_LENGTH_9 0x01U /* 9 bits */
#define _02_CSIB_DATA_LENGTH_10 0x02U /* 10 bits */
#define _03_CSIB_DATA_LENGTH_11 0x03U /* 11 bits */
#define _04_CSIB_DATA_LENGTH_12 0x04U /* 12 bits */
#define _05_CSIB_DATA_LENGTH_13 0x05U /* 13 bits */
#define _06_CSIB_DATA_LENGTH_14 0x06U /* 14 bits */
#define _07_CSIB_DATA_LENGTH_15 0x07U /* 15 bits */
#define _08_CSIB_DATA_LENGTH_16 0x08U /* 16 bits */
/*
CSIBn status register (CBnSTR)
*/
/* Communication status flag (CBnTSF) */
#define _00_CSIB_COMMUNICATION_STOP 0x00U /* communication stopped */
#define _80_CSIB_COMMUNICATING 0x80U /* communicating */
/* Overrun error flag (CBnOVE) */
#define _00_CSIB_OVERRUN_NONE 0x00U /* no overrun */
#define _01_CSIB_OVERRUN 0x01U /* overrun */
/*
BRGm prescaler mode registers (PRSMm)
*/
/* Baud rate output(BGCEm) */
#define _00_CSIB_FBRGM_DISABLE 0x00U /* baudrate output disabled */
#define _10_CSIB_FBRGM_ENABLE 0x10U /* baudrate output enabled */
/* Input clock selection (BGCSm1,BGCSm0) */
#define _00_CSIB_FBGCS_0 0x00U /* fXX */
#define _01_CSIB_FBGCS_1 0x01U /* fXX/2 */
#define _02_CSIB_FBGCS_2 0x02U /* fXX/4 */
#define _03_CSIB_FBGCS_3 0x03U /* fXX/8 */
#define CB4RIC UA0RIC
#define CB4TIC UA0TIC
#define CB0RIC IICIC1
/*
IIC control register (IICCn)
*/
/* IIC operation enable (IICEn) */
#define _80_IIC_OPERATION 0x80U
#define _00_IIC_OPERATION_DISABLE 0x00U /* stop operation */
#define _80_IIC_OPERATION_ENABLE 0x80U /* enable operation */
/* Exit from communications (LRELn) */
#define _40_IIC_COMMUNICATION 0x40U
#define _00_IIC_COMMUNICATION_NORMAL 0x00U /* normal operation */
#define _40_IIC_COMMUNICATION_EXIT 0x40U /* exit from current communication */
/* Wait cancellation (WRELn) */
#define _20_IIC_WAITCANCEL 0x20U
#define _00_IIC_WAIT_NOTCANCEL 0x00U /* do not cancel wait */
#define _20_IIC_WAIT_CANCEL 0x20U /* cancel wait */
/* Generation of interrupt when stop condition (SPIEn) */
#define _10_IIC_STOPINT 0x10U
#define _00_IIC_STOPINT_DISABLE 0x00U /* disable */
#define _10_IIC_STOPINT_ENABLE 0x10U /* enable */
/* Wait and interrupt generation (WTIMn) */
#define _08_IIC_WAITINT 0x08U
#define _00_IIC_WAITINT_CLK8FALLING 0x00U /* generate at the eighth clock falling edge */
#define _08_IIC_WAITINT_CLK9FALLING 0x08U /* generated at the ninth clock falling edge */
/* Acknowledgement control (ACKEn) */
#define _04_IIC_ACK 0x04
#define _00_IIC_ACK_DISABLE 0x00U /* disable acknowledgement */
#define _04_IIC_ACK_ENABLE 0x04U /* enable acknowledgement */
/* Start condition trigger (STTn) */
#define _02_IIC_STARTCONDITION 0x02U
#define _00_IIC_START_NOTGENERATE 0x00U /* do not generate start condition */
#define _02_IIC_START_GENERATE 0x02U /* generate start condition */
/* Stop condition trigger (SPTn) */
#define _01_IIC_STOPCONDITION 0x01U
#define _00_IIC_STOP_NOTGENERATE 0x00U /* do not generate stop condition */
#define _01_IIC_STOP_GENERATE 0x01U /* generate stop condition */
/*
IIC Status Register (IICSn)
*/
/* Master device status (MSTSn) */
#define _80_IIC_MASTERSTATUS 0x80U
#define _00_IIC_STATUS_NOTMASTER 0x00U /* slave device status or communication standby status */
#define _80_IIC_STATUS_MASTER 0x80U /* master device communication status */
/* Detection of arbitration loss (ALDn) */
#define _40_IIC_ARBITRATION 0x40U
#define _00_IIC_ARBITRATION_NO 0x00U /* arbitration win or no arbitration */
#define _40_IIC_ARBITRATION_LOSS 0x40U /* arbitration loss */
/* Detection of extension code reception (EXCn) */
#define _20_IIC_EXTENSIONCODE 0x20U
#define _00_IIC_EXTCODE_NOT 0x00U /* extension code not received */
#define _20_IIC_EXTCODE_RECEIVED 0x20U /* extension code received */
/* Detection of matching addresses (COIn) */
#define _10_IIC_ADDRESSMATCH 0x10U
#define _00_IIC_ADDRESS_NOTMATCH 0x00U /* addresses do not match */
#define _10_IIC_ADDRESS_MATCH 0x10U /* addresses match */
/* Detection of transmit/receive status (TRCn) */
#define _08_IIC_STATUS 0x08U
#define _00_IIC_STATUS_RECEIVE 0x00U /* receive status */
#define _08_IIC_STATUS_TRANSMIT 0x08U /* transmit status */
/* Detection of acknowledge signal (ACKDn) */
#define _04_IIC_ACKDETECTION 0x04U
#define _00_IIC_ACK_NOTDETECTED 0x00U /* ACK signal was not detected */
#define _04_IIC_ACK_DETECTED 0x04U /* ACK signal was detected */
/* Detection of start condition (STDn) */
#define _02_IIC_STARTDETECTION 0x02U
#define _00_IIC_START_NOTDETECTED 0x00U /* start condition not detected */
#define _02_IIC_START_DETECTED 0x02U /* start condition detected */
/* Detection of stop condition (SPDn) */
#define _01_IIC_STOPDETECTION 0x01U
#define _00_IIC_STOP_NOTDETECTED 0x00U /* stop condition not detected */
#define _01_IIC_STOP_DETECTED 0x01U /* stop condition detected */
/*
IIC Flag Register (IICFn)
*/
/* STTn clear flag (STCFn) */
#define _80_IIC_STARTFLAG 0x80U
#define _00_IIC_STARTFLAG_GENERATE 0x00U /* generate start condition */
#define _80_IIC_STARTFLAG_UNSUCCESSFUL 0x80U /* start condition generation unsuccessful */
/* IIC bus status flag (IICBSYn) */
#define _40_IIC_BUSSTATUS 0x40U
#define _00_IIC_BUS_RELEASE 0x00U /* bus release status */
#define _40_IIC_BUS_COMMUNICATION 0x40U /* bus communication status */
/* Initial start enable trigger (STCENn) */
#define _02_IIC_STARTWITHSTOP 0x02U
#define _00_IIC_START_WITHSTOP 0x00U /* generation of a start condition upon detection of a stop condition */
#define _02_IIC_START_WITHOUTSTOP 0x02U /* generation of a start condition without detecting a stop condition */
/* Communication reservation function disable bit (IICRSVn) */
#define _01_IIC_RESERVATION 0x01U
#define _00_IIC_RESERVATION_ENABLE 0x00U /* enable communication reservation */
#define _01_IIC_RESERVATION_DISABLE 0x01U /* disable communication reservation */
/*
IIC clock selection register (IICCLn)
*/
#define _00_IICCL_INITIALVALUE 0x00U
/* Detection of SCL0n pin level (CLDn) */
#define _20_IIC_SCLLEVEL 0x20U
#define _00_IIC_SCL_LOW 0x00U /* clock line at low level */
#define _20_IIC_SCL_HIGH 0x20U /* clock line at high level */
/* Detection of SDA0 pin level (DADn) */
#define _10_IIC_SDALEVEL 0x10U
#define _00_IIC_SDA_LOW 0x00U /* data line at low level */
#define _10_IIC_SDA_HIGH 0x10U /* data line at high level */
/* Operation mode switching (SMCn) */
#define _08_IIC_OPERATIONMODE 0x08U
#define _00_IIC_MODE_STANDARD 0x00U /* operates in standard mode */
#define _08_IIC_MODE_HIGHSPEED 0x08U /* operates in high-speed mode */
/* Digital filter operation control (DFCn) */
#define _04_IIC_DIGITALFILTER 0x04U
#define _00_IIC_FILTER_OFF 0x00U /* digital filter off */
#define _04_IIC_FILTER_ON 0x04U /* digital filter on */
/* Operation mode switching (CLn1, CLn0) */
#define _03_IIC_CLOCKSELECTION 0x03U
/* Combine of (CLn1, CLn0)*/
#define _00_IIC_CLOCK0 0x00U
#define _01_IIC_CLOCK1 0x01U
#define _02_IIC_CLOCK2 0x02U
#define _03_IIC_CLOCK3 0x03U
/*
IIC division clock select register (OCKSn)
*/
#define _10_IIC_SELECTED0 0x10U
#define _11_IIC_SELECTED1 0x11U
#define _12_IIC_SELECTED2 0x12U
#define _13_IIC_SELECTED3 0x13U
#define _18_IIC_SELECTED4 0x18U
/*
IIC function expansion register 0 (IICXn)
*/
/* IIC clock expension (CLXn) */
#define _01_IIC_CLOCKEXPENSION 0x01U
#define _00_IIC_EXPENSION0 0x00U
#define _01_IIC_EXPENSION1 0x01U
#define _80_ADDRESS_COMPLETE 0x80U
#define _00_IIC_MASTER_FLAG_CLEAR 0x00U
#define IICIC2 UA1RIC
#define IICIC0 UA2RIC
/*
*******************************************************************************
** Macro define
*******************************************************************************
*/
/* Selection of 8-bit counter output clock (UA1BRS7~UA1BRS0) */
#define _D0_UARTA1_BASECLK_DIVISION 0xD0U /* 4 ~ 255 */ //9600
#define _11_UARTA1_BASECLK_DIVISION 0x11U /* 4 ~ 255 */ //115200
enum TransferMode
{
SEND, RECEIVE
};
void rt_hw_uart_init(void);
#endif