cbad06d616
- 将 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 总线空闲
63 lines
1.4 KiB
C++
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
|