Files
lishanpi/drv/i2c/i2c_driver.h
T
hm cbad06d616 refactor(touch): 集成硬件 I2C 驱动并添加 EXTI 中断支持
- 将 touch 底层从软件 I2C 位冲切换为硬件 I2C0 (PB6/PB7)
- 修复 i2c_driver I2C0 引脚映射 (PB8/PB9 -> PB6/PB7)
- 重写 master_write_read() 实现正确的重复起始条件
- 添加 i2c_driver.h C API 声明供 C 代码调用
- 添加 GT1151 EXTI 中断 (PD11, EXTI11 下降沿触发)
- 删除 touch.h 中废弃的软件 I2C 函数声明
- test_touch() 改为中断驱动,无触摸时 I2C 总线空闲
2026-04-26 20:36:54 +08:00

63 lines
1.4 KiB
C++

#ifndef __I2C_DRIVER_H__
#define __I2C_DRIVER_H__
#include <cstdint>
#include "bus_core.h"
enum class I2cPort : uint8_t {
_0 = 0,
_1, _2,
MAX
};
struct I2cConfig {
uint32_t speed_hz = 100000;
};
class I2cDevice {
public:
explicit I2cDevice(uint16_t dev_addr);
RetCode init();
uint16_t addr() const { return dev_addr_; }
private:
friend class I2cBus;
uint16_t dev_addr_;
};
class I2cBus {
public:
explicit I2cBus(I2cPort port);
~I2cBus();
I2cBus(const I2cBus &) = delete;
I2cBus &operator=(const I2cBus &) = delete;
RetCode init(const I2cConfig &config);
RetCode deinit();
RetCode master_write(I2cDevice &dev, const uint8_t *data, uint32_t len);
RetCode master_read(I2cDevice &dev, uint8_t *data, uint32_t len);
RetCode master_write_read(I2cDevice &dev, const uint8_t *wdata, uint32_t wlen, uint8_t *rdata, uint32_t rlen);
private:
I2cPort port_;
I2cConfig config_;
bool initialized_ = false;
};
#ifdef __cplusplus
extern "C" {
#endif
int i2c_init(uint8_t port, uint32_t speed_hz);
int i2c_master_write(uint8_t port, uint16_t dev_addr, const uint8_t *data, uint32_t len);
int i2c_master_read(uint8_t port, uint16_t dev_addr, uint8_t *data, uint32_t len);
int i2c_master_write_read(uint8_t port, uint16_t dev_addr, const uint8_t *wdata, uint32_t wlen, uint8_t *rdata, uint32_t rlen);
#ifdef __cplusplus
}
#endif
#endif