123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- #ifndef GD32F10X_USART_H
- #define GD32F10X_USART_H
- #include "gd32f10x.h"
- #define USART1 USART_BASE
- #define USART2 (USART_BASE+(0x00000400U))
- #define UART3 (USART_BASE+(0x00000800U))
- #define UART4 (USART_BASE+(0x00000C00U))
- #define USART0 (USART_BASE+(0x0000F400U))
- #define USART_STAT(usartx) REG32((usartx) + (0x00000000U))
- #define USART_DATA(usartx) REG32((usartx) + (0x00000004U))
- #define USART_BAUD(usartx) REG32((usartx) + (0x00000008U))
- #define USART_CTL0(usartx) REG32((usartx) + (0x0000000CU))
- #define USART_CTL1(usartx) REG32((usartx) + (0x00000010U))
- #define USART_CTL2(usartx) REG32((usartx) + (0x00000014U))
- #define USART_GP(usartx) REG32((usartx) + (0x00000018U))
- #define USART_STAT_PERR BIT(0)
- #define USART_STAT_FERR BIT(1)
- #define USART_STAT_NERR BIT(2)
- #define USART_STAT_ORERR BIT(3)
- #define USART_STAT_IDLEF BIT(4)
- #define USART_STAT_RBNE BIT(5)
- #define USART_STAT_TC BIT(6)
- #define USART_STAT_TBE BIT(7)
- #define USART_STAT_LBDF BIT(8)
- #define USART_STAT_CTSF BIT(9)
- #define USART_DATA_DATA BITS(0,8)
- #define USART_BAUD_FRADIV BITS(0,3)
- #define USART_BAUD_INTDIV BITS(4,15)
- #define USART_CTL0_SBKCMD BIT(0)
- #define USART_CTL0_RWU BIT(1)
- #define USART_CTL0_REN BIT(2)
- #define USART_CTL0_TEN BIT(3)
- #define USART_CTL0_IDLEIE BIT(4)
- #define USART_CTL0_RBNEIE BIT(5)
- #define USART_CTL0_TCIE BIT(6)
- #define USART_CTL0_TBEIE BIT(7)
- #define USART_CTL0_PERRIE BIT(8)
- #define USART_CTL0_PM BIT(9)
- #define USART_CTL0_PCEN BIT(10)
- #define USART_CTL0_WM BIT(11)
- #define USART_CTL0_WL BIT(12)
- #define USART_CTL0_UEN BIT(13)
- #define USART_CTL1_ADDR BITS(0,3)
- #define USART_CTL1_LBLEN BIT(5)
- #define USART_CTL1_LBDIE BIT(6)
- #define USART_CTL1_CLEN BIT(8)
- #define USART_CTL1_CPH BIT(9)
- #define USART_CTL1_CPL BIT(10)
- #define USART_CTL1_CKEN BIT(11)
- #define USART_CTL1_STB BITS(12,13)
- #define USART_CTL1_LMEN BIT(14)
- #define USART_CTL2_ERRIE BIT(0)
- #define USART_CTL2_IREN BIT(1)
- #define USART_CTL2_IRLP BIT(2)
- #define USART_CTL2_HDEN BIT(3)
- #define USART_CTL2_NKEN BIT(4)
- #define USART_CTL2_SCEN BIT(5)
- #define USART_CTL2_DENR BIT(6)
- #define USART_CTL2_DENT BIT(7)
- #define USART_CTL2_RTSEN BIT(8)
- #define USART_CTL2_CTSEN BIT(9)
- #define USART_CTL2_CTSIE BIT(10)
- #define USART_GP_PSC BITS(0,7)
- #define USART_GP_GUAT BITS(8,15)
- #define USART_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
- #define USART_REG_VAL(usartx, offset) (REG32((usartx) + (((uint32_t)(offset) & (0x0000FFFFU)) >> 6)))
- #define USART_BIT_POS(val) ((uint32_t)(val) & (0x0000001FU))
- #define USART_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\
- | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)))
- #define USART_REG_VAL2(usartx, offset) (REG32((usartx) + ((uint32_t)(offset) >> 22)))
- #define USART_BIT_POS2(val) (((uint32_t)(val) & (0x001F0000U)) >> 16)
- #define USART_STAT_REG_OFFSET (0x00000000U)
- #define USART_CTL0_REG_OFFSET (0x0000000CU)
- #define USART_CTL1_REG_OFFSET (0x00000010U)
- #define USART_CTL2_REG_OFFSET (0x00000014U)
- typedef enum
- {
-
- USART_FLAG_CTSF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 9U),
- USART_FLAG_LBDF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 8U),
- USART_FLAG_TBE = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 7U),
- USART_FLAG_TC = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 6U),
- USART_FLAG_RBNE = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 5U),
- USART_FLAG_IDLEF = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 4U),
- USART_FLAG_ORERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 3U),
- USART_FLAG_NERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 2U),
- USART_FLAG_FERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 1U),
- USART_FLAG_PERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 0U),
- }usart_flag_enum;
- typedef enum
- {
-
- USART_INT_FLAG_PERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 8U, USART_STAT_REG_OFFSET, 0U),
- USART_INT_FLAG_TBE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 7U, USART_STAT_REG_OFFSET, 7U),
- USART_INT_FLAG_TC = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 6U),
- USART_INT_FLAG_RBNE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 5U),
- USART_INT_FLAG_RBNE_ORERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 3U),
- USART_INT_FLAG_IDLE = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 4U, USART_STAT_REG_OFFSET, 4U),
-
- USART_INT_FLAG_LBD = USART_REGIDX_BIT2(USART_CTL1_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 8U),
-
- USART_INT_FLAG_CTS = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 10U, USART_STAT_REG_OFFSET, 9U),
- USART_INT_FLAG_ERR_ORERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 3U),
- USART_INT_FLAG_ERR_NERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 2U),
- USART_INT_FLAG_ERR_FERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 1U),
- }usart_interrupt_flag_enum;
- typedef enum
- {
-
- USART_INT_PERR = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 8U),
- USART_INT_TBE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 7U),
- USART_INT_TC = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 6U),
- USART_INT_RBNE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 5U),
- USART_INT_IDLE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 4U),
-
- USART_INT_LBD = USART_REGIDX_BIT(USART_CTL1_REG_OFFSET, 6U),
-
- USART_INT_CTS = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 10U),
- USART_INT_ERR = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 0U),
- }usart_interrupt_enum;
- #define CTL0_REN(regval) (BIT(2) & ((uint32_t)(regval) << 2))
- #define USART_RECEIVE_ENABLE CTL0_REN(1)
- #define USART_RECEIVE_DISABLE CTL0_REN(0)
- #define CTL0_TEN(regval) (BIT(3) & ((uint32_t)(regval) << 3))
- #define USART_TRANSMIT_ENABLE CTL0_TEN(1)
- #define USART_TRANSMIT_DISABLE CTL0_TEN(0)
- #define CTL0_PM(regval) (BITS(9,10) & ((uint32_t)(regval) << 9))
- #define USART_PM_NONE CTL0_PM(0)
- #define USART_PM_EVEN CTL0_PM(2)
- #define USART_PM_ODD CTL0_PM(3)
- #define CTL0_WM(regval) (BIT(11) & ((uint32_t)(regval) << 11))
- #define USART_WM_IDLE CTL0_WM(0)
- #define USART_WM_ADDR CTL0_WM(1)
- #define CTL0_WL(regval) (BIT(12) & ((uint32_t)(regval) << 12))
- #define USART_WL_8BIT CTL0_WL(0)
- #define USART_WL_9BIT CTL0_WL(1)
- #define CTL1_STB(regval) (BITS(12,13) & ((uint32_t)(regval) << 12))
- #define USART_STB_1BIT CTL1_STB(0)
- #define USART_STB_0_5BIT CTL1_STB(1)
- #define USART_STB_2BIT CTL1_STB(2)
- #define USART_STB_1_5BIT CTL1_STB(3)
- #define CTL1_LBLEN(regval) (BIT(5) & ((uint32_t)(regval) << 5))
- #define USART_LBLEN_10B CTL1_LBLEN(0)
- #define USART_LBLEN_11B CTL1_LBLEN(1)
- #define CTL1_CLEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))
- #define USART_CLEN_NONE CTL1_CLEN(0)
- #define USART_CLEN_EN CTL1_CLEN(1)
- #define CTL1_CPH(regval) (BIT(9) & ((uint32_t)(regval) << 9))
- #define USART_CPH_1CK CTL1_CPH(0)
- #define USART_CPH_2CK CTL1_CPH(1)
- #define CTL1_CPL(regval) (BIT(10) & ((uint32_t)(regval) << 10))
- #define USART_CPL_LOW CTL1_CPL(0)
- #define USART_CPL_HIGH CTL1_CPL(1)
- #define CLT2_DENR(regval) (BIT(6) & ((uint32_t)(regval) << 6))
- #define USART_DENR_ENABLE CLT2_DENR(1)
- #define USART_DENR_DISABLE CLT2_DENR(0)
- #define CLT2_DENT(regval) (BIT(7) & ((uint32_t)(regval) << 7))
- #define USART_DENT_ENABLE CLT2_DENT(1)
- #define USART_DENT_DISABLE CLT2_DENT(0)
- #define CLT2_RTSEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))
- #define USART_RTS_ENABLE CLT2_RTSEN(1)
- #define USART_RTS_DISABLE CLT2_RTSEN(0)
- #define CLT2_CTSEN(regval) (BIT(9) & ((uint32_t)(regval) << 9))
- #define USART_CTS_ENABLE CLT2_CTSEN(1)
- #define USART_CTS_DISABLE CLT2_CTSEN(0)
- #define CTL2_IRLP(regval) (BIT(2) & ((uint32_t)(regval) << 2))
- #define USART_IRLP_LOW CTL2_IRLP(1)
- #define USART_IRLP_NORMAL CTL2_IRLP(0)
- void usart_deinit(uint32_t usart_periph);
- void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval);
- void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg);
- void usart_word_length_set(uint32_t usart_periph, uint32_t wlen);
- void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen);
- void usart_enable(uint32_t usart_periph);
- void usart_disable(uint32_t usart_periph);
- void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig);
- void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig);
- void usart_data_transmit(uint32_t usart_periph, uint16_t data);
- uint16_t usart_data_receive(uint32_t usart_periph);
- void usart_address_config(uint32_t usart_periph, uint8_t addr);
- void usart_mute_mode_enable(uint32_t usart_periph);
- void usart_mute_mode_disable(uint32_t usart_periph);
- void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod);
- void usart_lin_mode_enable(uint32_t usart_periph);
- void usart_lin_mode_disable(uint32_t usart_periph);
- void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen);
- void usart_send_break(uint32_t usart_periph);
- void usart_halfduplex_enable(uint32_t usart_periph);
- void usart_halfduplex_disable(uint32_t usart_periph);
- void usart_synchronous_clock_enable(uint32_t usart_periph);
- void usart_synchronous_clock_disable(uint32_t usart_periph);
- void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl);
- void usart_guard_time_config(uint32_t usart_periph,uint32_t gaut);
- void usart_smartcard_mode_enable(uint32_t usart_periph);
- void usart_smartcard_mode_disable(uint32_t usart_periph);
- void usart_smartcard_mode_nack_enable(uint32_t usart_periph);
- void usart_smartcard_mode_nack_disable(uint32_t usart_periph);
- void usart_irda_mode_enable(uint32_t usart_periph);
- void usart_irda_mode_disable(uint32_t usart_periph);
- void usart_prescaler_config(uint32_t usart_periph, uint8_t psc);
- void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp);
- void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig);
- void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig);
- void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd);
- void usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd);
- FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag);
- void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag);
- void usart_interrupt_enable(uint32_t usart_periph, uint32_t interrupt);
- void usart_interrupt_disable(uint32_t usart_periph, uint32_t interrupt);
- FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag);
- void usart_interrupt_flag_clear(uint32_t usart_periph, uint32_t int_flag);
- #endif
|