27 CH32I2C(ch32_i2c_id_t
id,
RawData dma_buff, GPIO_TypeDef* scl_port, uint16_t scl_pin,
28 GPIO_TypeDef* sda_port, uint16_t sda_pin, uint32_t pin_remap = 0,
29 uint32_t dma_enable_min_size = 3, uint32_t default_clock_hz = 400000,
30 bool ten_bit_addr =
false);
33 bool in_isr)
override;
36 bool in_isr)
override;
38 ErrorCode
MemRead(uint16_t slave_addr, uint16_t mem_addr,
RawData read_data,
39 ReadOperation& op, MemAddrLength mem_addr_size,
bool in_isr)
override;
43 bool in_isr)
override;
49 void TxDmaIRQHandler();
54 static CH32I2C* map_[CH32_I2C_NUMBER];
60 inline bool DmaBusy()
const
62 return (dma_rx_channel_->CNTR != 0) || (dma_tx_channel_->CNTR != 0) || busy_;
65 static inline uint8_t Addr7ToAddr8(uint16_t addr7)
69 ASSERT(addr7 <= 0x7F);
70 return static_cast<uint8_t
>(((addr7 & 0x7F) << 1) & 0xFE);
73 static inline uint16_t Addr10Clamp(uint16_t addr10)
75 ASSERT(addr10 <= 0x3FF);
76 return static_cast<uint16_t
>(addr10 & 0x3FF);
84 ErrorCode MasterStartAndAddress(uint16_t slave_addr, uint8_t dir);
89 ErrorCode MasterStartAndAddress10Bit(uint16_t addr10, uint8_t final_dir);
91 ErrorCode SendMemAddr(uint16_t mem_addr, MemAddrLength len);
93 ErrorCode PollingWriteBytes(
const uint8_t* data, uint32_t len);
94 ErrorCode PollingReadBytes(uint8_t* data, uint32_t len);
96 void StartTxDma(uint32_t len);
97 void StartRxDma(uint32_t len);
99 void AbortTransfer(ErrorCode ec);
102 I2C_TypeDef* instance_;
103 DMA_Channel_TypeDef* dma_rx_channel_;
104 DMA_Channel_TypeDef* dma_tx_channel_;
106 uint32_t dma_enable_min_size_;
116 GPIO_TypeDef* scl_port_;
118 GPIO_TypeDef* sda_port_;
121 Configuration cfg_{400000};
123 bool ten_bit_addr_ =
false;
ErrorCode MemWrite(uint16_t slave_addr, uint16_t mem_addr, ConstRawData write_data, WriteOperation &op, MemAddrLength mem_addr_size, bool in_isr) override
向 I2C 设备指定寄存器写入数据。 Writes data to a specific register of an I2C device.
ErrorCode MemRead(uint16_t slave_addr, uint16_t mem_addr, RawData read_data, ReadOperation &op, MemAddrLength mem_addr_size, bool in_isr) override
从 I2C 设备指定寄存器读取数据。 Reads data from a specific register of an I2C device.
ErrorCode Write(uint16_t slave_addr, ConstRawData write_data, WriteOperation &op, bool in_isr) override
向 I2C 设备写入数据。 Writes data to an I2C device.
ErrorCode Read(uint16_t slave_addr, RawData read_data, ReadOperation &op, bool in_isr) override
读取 I2C 设备的数据。 Reads data from an I2C device.
CH32I2C(ch32_i2c_id_t id, RawData dma_buff, GPIO_TypeDef *scl_port, uint16_t scl_pin, GPIO_TypeDef *sda_port, uint16_t sda_pin, uint32_t pin_remap=0, uint32_t dma_enable_min_size=3, uint32_t default_clock_hz=400000, bool ten_bit_addr=false)
构造 I2C 驱动对象 / Construct I2C driver object