微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 在CC2640中,是否应该为每个i2c从机建立单独的任务

在CC2640中,是否应该为每个i2c从机建立单独的任务

时间:10-02 整理:3721RD 点击:

我使用的事2640

在HIDEmuKbd工程中仿写了sensorTag的I2C驱动,并在该总线上挂了2个从机(一个滑鼠,一个加速度计)

然后我在Task中创建2个事件来获取2个从机的数据,代码如下:

if( events & PAW3003_EVT ) //PAW3003
{

events &= ~PAW3003_EVT;
Util_startClock(&paw3003Clock);

if(taskbma250 == 0)
{
Util_startClock(&bma250eClock); //开启BMA250E事件; 
taskbma250 = 1;
} 
PAW3003_Handle();
}

if( events & BMA250E_EVT ) //BMA250
{
taskbma250 = 0;
events &= ~BMA250E_EVT;
BMA250E_Handle(); 
}

但是程序会直接卡死,单个I2C从机通信都正常。

请问是否每个从机都必须单独建立一个任务?

有追踪过卡在哪句代码上吗?

蓝牙低功耗关闭了没有?

没有单步仿真去调试,就是2个I2C设备读取数值刷新不正常了。

没有,问题已经解决了

我分享下思路:

因为2个I2C设备共用了1个I2C的端口(I2C_INTERFACE_SDA0),在选择通信接口时,存在1个设备使用导致另一个设备阻塞的情况。

我在移植SensorTag工程的I2C代码中找到了一行代码:  if (!Semaphore_pend(Semaphore_handle(&mutex),MS_2_TICKS(I2C_TIMEOUT)))

这行代码是用来查看当前I2C总线状态的,第二个参数默认是2500,我猜测是每个设备会独自占用2500ms。我把这个时间改成200之后2个I2C的从机设备都可以正常工作不会冲突了。

另外,可以以事件的形式完成,也可以像SenserTag中一样,每个从机给一个Task。

没有,问题已经解决了

我分享下思路:

因为2个I2C设备共用了1个I2C的端口(I2C_INTERFACE_SDA0),在选择通信接口时,存在1个设备使用导致另一个设备阻塞的情况。

我在移植SensorTag工程的I2C代码中找到了一行代码:  if (!Semaphore_pend(Semaphore_handle(&mutex),MS_2_TICKS(I2C_TIMEOUT)))

这行代码是用来查看当前I2C总线状态的,第二个参数默认是2500,我猜测是每个设备会独自占用2500ms。我把这个时间改成200之后2个I2C的从机设备都可以正常工作不会冲突了。

另外,可以以事件的形式完成,也可以像SenserTag中一样,每个从机给一个Task。

非常感谢分享经验

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top