123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- #ifndef GD32F10X_I2C_H
- #define GD32F10X_I2C_H
- #include "gd32f10x.h"
- #define I2C0 I2C_BASE
- #define I2C1 (I2C_BASE + 0x00000400U)
- #define I2C_CTL0(i2cx) REG32((i2cx) + 0x00000000U)
- #define I2C_CTL1(i2cx) REG32((i2cx) + 0x00000004U)
- #define I2C_SADDR0(i2cx) REG32((i2cx) + 0x00000008U)
- #define I2C_SADDR1(i2cx) REG32((i2cx) + 0x0000000CU)
- #define I2C_DATA(i2cx) REG32((i2cx) + 0x00000010U)
- #define I2C_STAT0(i2cx) REG32((i2cx) + 0x00000014U)
- #define I2C_STAT1(i2cx) REG32((i2cx) + 0x00000018U)
- #define I2C_CKCFG(i2cx) REG32((i2cx) + 0x0000001CU)
- #define I2C_RT(i2cx) REG32((i2cx) + 0x00000020U)
- #define I2C_CTL0_I2CEN BIT(0)
- #define I2C_CTL0_SMBEN BIT(1)
- #define I2C_CTL0_SMBSEL BIT(3)
- #define I2C_CTL0_ARPEN BIT(4)
- #define I2C_CTL0_PECEN BIT(5)
- #define I2C_CTL0_GCEN BIT(6)
- #define I2C_CTL0_SS BIT(7)
- #define I2C_CTL0_START BIT(8)
- #define I2C_CTL0_STOP BIT(9)
- #define I2C_CTL0_ACKEN BIT(10)
- #define I2C_CTL0_POAP BIT(11)
- #define I2C_CTL0_PECTRANS BIT(12)
- #define I2C_CTL0_SALT BIT(13)
- #define I2C_CTL0_SRESET BIT(15)
- #define I2C_CTL1_I2CCLK BITS(0,5)
- #define I2C_CTL1_ERRIE BIT(8)
- #define I2C_CTL1_EVIE BIT(9)
- #define I2C_CTL1_BUFIE BIT(10)
- #define I2C_CTL1_DMAON BIT(11)
- #define I2C_CTL1_DMALST BIT(12)
- #define I2C_SADDR0_ADDRESS0 BIT(0)
- #define I2C_SADDR0_ADDRESS BITS(1,7)
- #define I2C_SADDR0_ADDRESS_H BITS(8,9)
- #define I2C_SADDR0_ADDFORMAT BIT(15)
- #define I2C_SADDR1_DUADEN BIT(0)
- #define I2C_SADDR1_ADDRESS2 BITS(1,7)
- #define I2C_DATA_TRB BITS(0,7)
- #define I2C_STAT0_SBSEND BIT(0)
- #define I2C_STAT0_ADDSEND BIT(1)
- #define I2C_STAT0_BTC BIT(2)
- #define I2C_STAT0_ADD10SEND BIT(3)
- #define I2C_STAT0_STPDET BIT(4)
- #define I2C_STAT0_RBNE BIT(6)
- #define I2C_STAT0_TBE BIT(7)
- #define I2C_STAT0_BERR BIT(8)
- #define I2C_STAT0_LOSTARB BIT(9)
- #define I2C_STAT0_AERR BIT(10)
- #define I2C_STAT0_OUERR BIT(11)
- #define I2C_STAT0_PECERR BIT(12)
- #define I2C_STAT0_SMBTO BIT(14)
- #define I2C_STAT0_SMBALT BIT(15)
- #define I2C_STAT1_MASTER BIT(0)
- #define I2C_STAT1_I2CBSY BIT(1)
- #define I2C_STAT1_TR BIT(2)
- #define I2C_STAT1_RXGC BIT(4)
- #define I2C_STAT1_DEFSMB BIT(5)
- #define I2C_STAT1_HSTSMB BIT(6)
- #define I2C_STAT1_DUMODF BIT(7)
- #define I2C_STAT1_PECV BITS(8,15)
- #define I2C_CKCFG_CLKC BITS(0,11)
- #define I2C_CKCFG_DTCY BIT(14)
- #define I2C_CKCFG_FAST BIT(15)
- #define I2C_RT_RISETIME BITS(0,5)
- #define I2C_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
- #define I2C_REG_VAL(i2cx, offset) (REG32((i2cx) + (((uint32_t)(offset) & 0xFFFFU) >> 6)))
- #define I2C_BIT_POS(val) ((uint32_t)(val) & 0x1FU)
- #define I2C_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16)\
- | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)))
- #define I2C_REG_VAL2(i2cx, offset) (REG32((i2cx) + ((uint32_t)(offset) >> 22)))
- #define I2C_BIT_POS2(val) (((uint32_t)(val) & 0x1F0000U) >> 16)
- #define I2C_CTL1_REG_OFFSET 0x04U
- #define I2C_STAT0_REG_OFFSET 0x14U
- #define I2C_STAT1_REG_OFFSET 0x18U
- typedef enum
- {
-
- I2C_FLAG_SBSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 0U),
- I2C_FLAG_ADDSEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 1U),
- I2C_FLAG_BTC = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 2U),
- I2C_FLAG_ADD10SEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 3U),
- I2C_FLAG_STPDET = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 4U),
- I2C_FLAG_RBNE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 6U),
- I2C_FLAG_TBE = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 7U),
- I2C_FLAG_BERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 8U),
- I2C_FLAG_LOSTARB = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 9U),
- I2C_FLAG_AERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 10U),
- I2C_FLAG_OUERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 11U),
- I2C_FLAG_PECERR = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 12U),
- I2C_FLAG_SMBTO = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 14U),
- I2C_FLAG_SMBALT = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 15U),
-
- I2C_FLAG_MASTER = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 0U),
- I2C_FLAG_I2CBSY = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 1U),
- I2C_FLAG_TRS = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 2U),
- I2C_FLAG_RXGC = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 4U),
- I2C_FLAG_DEFSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 5U),
- I2C_FLAG_HSTSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 6U),
- I2C_FLAG_DUMOD = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 7U),
- }i2c_flag_enum;
- typedef enum
- {
-
- I2C_INT_FLAG_SBSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 0U),
- I2C_INT_FLAG_ADDSEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 1U),
- I2C_INT_FLAG_BTC = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 2U),
- I2C_INT_FLAG_ADD10SEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 3U),
- I2C_INT_FLAG_STPDET = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 4U),
- I2C_INT_FLAG_RBNE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 6U),
- I2C_INT_FLAG_TBE = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 7U),
- I2C_INT_FLAG_BERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 8U),
- I2C_INT_FLAG_LOSTARB = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 9U),
- I2C_INT_FLAG_AERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 10U),
- I2C_INT_FLAG_OUERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 11U),
- I2C_INT_FLAG_PECERR = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 12U),
- I2C_INT_FLAG_SMBTO = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 14U),
- I2C_INT_FLAG_SMBALT = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 15U),
- }i2c_interrupt_flag_enum;
- typedef enum
- {
-
- I2C_INT_ERR = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 8U),
- I2C_INT_EV = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 9U),
- I2C_INT_BUF = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 10U),
- }i2c_interrupt_enum;
- #define I2C_I2CMODE_ENABLE ((uint32_t)0x00000000U)
- #define I2C_SMBUSMODE_ENABLE I2C_CTL0_SMBEN
- #define I2C_SMBUS_DEVICE ((uint32_t)0x00000000U)
- #define I2C_SMBUS_HOST I2C_CTL0_SMBSEL
- #define I2C_RECEIVER ((uint32_t)0x00000001U)
- #define I2C_TRANSMITTER ((uint32_t)0xFFFFFFFEU)
- #define I2C_ACK_DISABLE ((uint32_t)0x00000000U)
- #define I2C_ACK_ENABLE I2C_CTL0_ACKEN
- #define I2C_ACKPOS_CURRENT ((uint32_t)0x00000000U)
- #define I2C_ACKPOS_NEXT I2C_CTL0_POAP
- #define I2C_DUADEN_DISABLE ((uint32_t)0x00000000U)
- #define I2C_DUADEN_ENABLE ((uint32_t)0x00000001U)
- #define I2C_SCLSTRETCH_ENABLE ((uint32_t)0x00000000U)
- #define I2C_SCLSTRETCH_DISABLE I2C_CTL0_SS
- #define I2C_GCEN_ENABLE I2C_CTL0_GCEN
- #define I2C_GCEN_DISABLE ((uint32_t)0x00000000U)
- #define I2C_SRESET_SET I2C_CTL0_SRESET
- #define I2C_SRESET_RESET ((uint32_t)0x00000000U)
- #define I2C_DMA_ON I2C_CTL1_DMAON
- #define I2C_DMA_OFF ((uint32_t)0x00000000U)
- #define I2C_DMALST_ON I2C_CTL1_DMALST
- #define I2C_DMALST_OFF ((uint32_t)0x00000000U)
- #define I2C_PEC_ENABLE I2C_CTL0_PECEN
- #define I2C_PEC_DISABLE ((uint32_t)0x00000000U)
- #define I2C_PECTRANS_ENABLE I2C_CTL0_PECTRANS
- #define I2C_PECTRANS_DISABLE ((uint32_t)0x00000000U)
- #define I2C_SALTSEND_ENABLE I2C_CTL0_SALT
- #define I2C_SALTSEND_DISABLE ((uint32_t)0x00000000U)
- #define I2C_ARP_ENABLE I2C_CTL0_ARPEN
- #define I2C_ARP_DISABLE ((uint32_t)0x00000000U)
- #define DATA_TRANS(regval) (BITS(0,7) & ((uint32_t)(regval) << 0))
- #define DATA_RECV(regval) GET_BITS((uint32_t)(regval), 0, 7)
- #define I2C_DTCY_2 ((uint32_t)0x00000000U)
- #define I2C_DTCY_16_9 I2C_CKCFG_DTCY
- #define I2C_ADDFORMAT_7BITS ((uint32_t)0x00000000U)
- #define I2C_ADDFORMAT_10BITS I2C_SADDR0_ADDFORMAT
- void i2c_deinit(uint32_t i2c_periph);
- void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc);
- void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr);
- void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type);
- void i2c_ack_config(uint32_t i2c_periph, uint32_t ack);
- void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos);
- void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection);
- void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t addr);
- void i2c_dualaddr_disable(uint32_t i2c_periph);
- void i2c_enable(uint32_t i2c_periph);
- void i2c_disable(uint32_t i2c_periph);
- void i2c_start_on_bus(uint32_t i2c_periph);
- void i2c_stop_on_bus(uint32_t i2c_periph);
- void i2c_data_transmit(uint32_t i2c_periph, uint8_t data);
- uint8_t i2c_data_receive(uint32_t i2c_periph);
- void i2c_dma_config(uint32_t i2c_periph, uint32_t dmastate);
- void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast);
- void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara);
- void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara);
- void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset);
- void i2c_pec_config(uint32_t i2c_periph, uint32_t pecstate);
- void i2c_pec_transfer_config(uint32_t i2c_periph, uint32_t pecpara);
- uint8_t i2c_pec_value_get(uint32_t i2c_periph);
- void i2c_smbus_alert_config(uint32_t i2c_periph, uint32_t smbuspara);
- void i2c_smbus_arp_config(uint32_t i2c_periph, uint32_t arpstate);
- FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag);
- void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag);
- void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt);
- void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt);
- FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag);
- void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag);
- #endif
|