CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

请问 IIC 总线上挂了两个设备,怎么通过回调判断是操作哪个设备产生的回调? GR551x

184***724

2022-01-15 08:41

请问 IIC 总线上挂了两个设备,怎么通过回调判断是操作哪个设备产生的回调?

0收藏

0赞成

Barton

2022-01-17 09:48

你好,IIC回调函数的入参类型为app_i2c_evt_t,可以通过此结构体中的slave_addr获取当前的从机地址。

1条评论

0赞成

0收藏

您的评论

Barton

2022-01-18 11:54

抱歉,昨天回复的信息不准确,目前发布的最新公版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);
}
}


1条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注