带中断的I2C主机

3个职位/0个新职位
最后一篇文章
瓦迪姆
离线
最后一次见到:1年2个月前
已加入:2015-08-13 08:28
带中断的I2C主机

嗨,对话。

我在sdk5.0.3中使用DA14580
我需要通过I2C与加速度计设备LIS2DH12通信(非常类似于LIS3DH)。
我看到,I2C驱动程序从SDK的EEPROM使用极化部分与全局中断禁用。

你有I2C主驱动程序的例子与intterupt工作方法?

谢谢!

设备:
瓦迪姆
离线
最后一次见到:1年2个月前
已加入:2015-08-13 08:28
我还有一个问题:

我还有一个问题:
当我们从I2C读取数据时,为什么需要禁用中断?
我指的是函数:从I2C\u eeprom.c驱动程序读取\u data\u single():

静态void read\u data\u single(uint8\u t**p,uint32\u t address,uint32\u t size)
{
内景j;

i2c\发送\地址(address);

对于(j=0;j<尺寸;(j++)
{
等待_I2C _FIFO _已满();//如果Tx FIFO已满,请等待
发送I2C命令(0x0100);//设置读取次数
}

//临界截面
全局\u INT \u DISABLE();

//获取接收到的数据
对于(j=0;j<尺寸;(j++)
{
等待_收到_BYTE();//等待接收数据
**p=(0xFF&GetWord16(I2C_DATA_CMD_REG));//获取接收到的字节
(*p)++;
}
//临界段结束
全局\u INT \u RESTORE();
}

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
嗨,瓦迪姆,

嗨,瓦迪姆,

不,目前还没有官方发布的I2C驱动程序可以处理中断。

在下面的文章中,我对I2C驱动程序做了一些修改,以便处理中断,以便在没有启动和停止信号的情况下传输32个字节以上的数据,也许你会发现它很有用。

https://support.dialog-semiconductor.com/i2c-data-transfer-size

关于第二篇文章,关于这个版本的驱动程序有一些不一致的地方,请检查新SDK中read\u data\u single()的新版本。在新版本的SDK中,关键部分移到了函数的上半部分——应用于i2c从机的时钟部分应该受到中断保护,而不是从FIFO读取字节时。禁用中断的原因是为了防止中断时地址和数据之间的I2C终止。

谢谢你的对话