184***724
请问 IIC 总线上挂了两个设备,怎么通过回调判断是操作哪个设备产生的回调?
Barton
抱歉,昨天回复的信息不准确,目前发布的最新公版SDK中还没有加入此地址字段。
HAL层目前没有开源,建议按照以下方式对app_i2c.c/h进行修改,来实现获取从机地址的目的。
1、在struct app_i2c_evt_t数据结构中增加一个记录从机地址的字段,如
typedef struct
{
...
uint16_t slave_addr;
...
} app_i2c_evt_t;
2、在struct i2c_env_t数据结构中也增加一个记录从机地址的字段,如
struct i2c_env_t
{
...
uint16_t slv_dev_addr;
...
};
3、在调用transmit或receive接口时,将入参target_address进行缓存,如
s_i2c_env[id].slv_dev_addr = target_address;
4、在app_i2c_event_call函数中,调用应用层回调函数前,增加如下代码
static void app_i2c_event_call(i2c_handle_t *p_i2c, app_i2c_evt_type_t evt_type)
{
...
i2c_evt.slave_addr = s_i2c_env[id].slv_dev_addr;
if (s_i2c_env[id].evt_handler != NULL)
{
s_i2c_env[id].evt_handler(&i2c_evt);
}
}
Barton
你好,IIC回调函数的入参类型为app_i2c_evt_t,可以通过此结构体中的slave_addr获取当前的从机地址。
打开微信,使用“扫一扫”即可关注