嗨对话框。
我使用DA14580使用SDK 5.0.3我需要通过与加速度计设备LIS2DH12(与LIS3DH非常相似)进行通信。我看到来自SDK for EEPROM的I2C驱动程序使用具有全局中断的POLOINE部分。
您是否具有I2C主驱动程序示例,具有内容工作方法?
非常感谢!
我还有一个问题:为什么当我们从I2C读取数据时需要禁用中断?我的意思是函数:来自i2c_eeprom.c驱动程序的read_data_single():
静态void read_data_single(uint8_t ** p,uint32_t地址,uint32_t大小){in j;
i2c_send_address(地址);
for(j = 0; j {等待_while_i2c_fifo_is_full();//等待TX FIFO已满send_i2c_command(0x0100);//设置次次读取访问}
//关键部分global_int_disable();
//获取收到的数据for(j = 0; j {wait_for_received_byte();//等待收到的数据** p =(0xff&getword16(i2c_data_cmd_reg));//获取收到的字节(* p)++;}//关键部分结束global_int_restore();}
嗨Vadym,
不,目前在I2C上没有官方版本,与中断合作。
在下面的帖子上,我对I2C驱动程序进行了一些修改,以便使用中断,以便在没有启动和停止信号的情况下传输超过32个字节,也许您会发现它有用。
https://support.dialog-semicondiondiondum/i2c-data-transfer-size.
关于第二个帖子,有关此版本的驱动程序存在一些不一致,请在新SDK中查看新版本的Read_Data_single()。在新版本的SDK中,关键部分已移动到函数的上部 - 将时钟应用于I2C从站的部分应该是中断,而不是在从FIFO读取字节时的中断。禁用中断的原因是为了防止在中断情况下防止地址和数据之间的I2C终止。
谢谢mt_dialog.
我还有一个问题:
为什么当我们从I2C读取数据时需要禁用中断?
我的意思是函数:来自i2c_eeprom.c驱动程序的read_data_single():
静态void read_data_single(uint8_t ** p,uint32_t地址,uint32_t大小)
{
in j;
i2c_send_address(地址);
for(j = 0; j{
等待_while_i2c_fifo_is_full();//等待TX FIFO已满
send_i2c_command(0x0100);//设置次次读取访问
}
//关键部分
global_int_disable();
//获取收到的数据{
for(j = 0; j
wait_for_received_byte();//等待收到的数据
** p =(0xff&getword16(i2c_data_cmd_reg));//获取收到的字节
(* p)++;
}
//关键部分结束
global_int_restore();
}
嗨Vadym,
不,目前在I2C上没有官方版本,与中断合作。
在下面的帖子上,我对I2C驱动程序进行了一些修改,以便使用中断,以便在没有启动和停止信号的情况下传输超过32个字节,也许您会发现它有用。
https://support.dialog-semicondiondiondum/i2c-data-transfer-size.
关于第二个帖子,有关此版本的驱动程序存在一些不一致,请在新SDK中查看新版本的Read_Data_single()。在新版本的SDK中,关键部分已移动到函数的上部 - 将时钟应用于I2C从站的部分应该是中断,而不是在从FIFO读取字节时的中断。禁用中断的原因是为了防止在中断情况下防止地址和数据之间的I2C终止。
谢谢mt_dialog.