2025-04-11 09:40:32 +08:00

88 lines
1.9 KiB
C

#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "cmsis_os2.h"
#include "bsp.h"
#include "sw_i2c.h"
#include "hw_i2c.h"
#include "ec_i2c.h"
#include "api_i2c.h"
static ec_i2c_type s_used_i2c = SW_I2C2;
static uint32_t i2c_id = 0;
uint8_t ec_i2c_init(uint8_t sn)
{
if(s_used_i2c == SW_I2C2) {
return sw_i2c_init(sn);
}
else{
return hw_i2c_init(sn);
}
}
uint8_t ec_i2c_wait(uint8_t addr,uint8_t *data,uint16_t len,uint32_t time)
{
if(s_used_i2c == SW_I2C2)
return sw_i2c_wait(addr, data, len, time);
else
return hw_i2c_wait(addr, data, len, time);
}
uint8_t ec_i2c_send(uint8_t addr,uint8_t reg,uint16_t len,uint8_t *data)
{
if(s_used_i2c == SW_I2C2)
return sw_i2c_send(addr, reg, len, data);
else
return hw_i2c_send(addr, reg, len, data);
}
uint8_t ec_i2c_read(uint8_t addr,uint8_t reg,uint16_t len,uint8_t *data)
{
if(s_used_i2c == SW_I2C2)
return sw_i2c_read(addr, reg, len, data);
else
return hw_i2c_read(addr, reg, len, data);
}
bus_t I2C_getDefault(ec_i2c_type sn)
{
if(sn >= SW_I2C2) {
s_used_i2c = SW_I2C2;
return sw_i2c_default();
}
else{
s_used_i2c = sn;
return hw_i2c_default(sn);
}
}
void ec_hal_i2c_set_id(uint32_t id)
{
i2c_id = id;
}
uint8_t ec_hal_i2c_send(uint8_t addr, uint8_t reg, uint16_t len, uint8_t *data)
{
api_i2c_master_t buffer = {
.addr = addr,
.reg = reg,
.data = data,
.num = len,
};
return api_i2c_write(i2c_id, &buffer, sizeof(buffer));
}
uint8_t ec_hal_i2c_read(uint8_t addr, uint8_t reg, uint16_t len, uint8_t *data)
{
// printf("addr, reg, len, *data = 0x%02x, 0x%02x, %d, %d\r\n", addr, reg, len, *data);
api_i2c_master_t buffer = {
.addr = addr,
.reg = reg,
.data = data,
.num = len,
};
return api_i2c_read(i2c_id, &buffer, sizeof(buffer));
}