嗨,对话。
我在sdk5.0.3中使用DA14580我需要通过I2C与加速度计设备LIS2DH12通信(非常类似于LIS3DH)。我看到,I2C驱动程序从SDK的EEPROM使用极化部分与全局中断禁用。
你有I2C主驱动程序的例子与intterupt工作方法?
谢谢!
我还有一个问题:当我们从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();}
嗨,瓦迪姆,
不,目前还没有官方发布的I2C驱动程序可以处理中断。
在下面的文章中,我对I2C驱动程序做了一些修改,以便处理中断,以便在没有启动和停止信号的情况下传输32个字节以上的数据,也许你会发现它很有用。
https://support.dialog-semiconductor.com/i2c-data-transfer-size
关于第二篇文章,关于这个版本的驱动程序有一些不一致的地方,请检查新SDK中read\u data\u single()的新版本。在新版本的SDK中,关键部分移到了函数的上半部分——应用于i2c从机的时钟部分应该受到中断保护,而不是从FIFO读取字节时。禁用中断的原因是为了防止中断时地址和数据之间的I2C终止。
谢谢你的对话
我还有一个问题:
当我们从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();
}
嗨,瓦迪姆,
不,目前还没有官方发布的I2C驱动程序可以处理中断。
在下面的文章中,我对I2C驱动程序做了一些修改,以便处理中断,以便在没有启动和停止信号的情况下传输32个字节以上的数据,也许你会发现它很有用。
https://support.dialog-semiconductor.com/i2c-data-transfer-size
关于第二篇文章,关于这个版本的驱动程序有一些不一致的地方,请检查新SDK中read\u data\u single()的新版本。在新版本的SDK中,关键部分移到了函数的上半部分——应用于i2c从机的时钟部分应该受到中断保护,而不是从FIFO读取字节时。禁用中断的原因是为了防止中断时地址和数据之间的I2C终止。
谢谢你的对话