嗨,对话框,
我有一个衣服,是这个时代:
开始
发送device_addr(w)
发送Reg_Addr.
重新开始
发送device_addr(r)
读取数据
....
停止
看看demo_i2c.c.是没搞清楚如何实现这个时尚。
一般的我的i2c时代是这样的:
开始
发送device_addr(w / r)
发送Reg_Addr.
写/读取数据
....
停止
该如何利用i2c的次数来实现?hw_i2c_set_restart_enabled(HW_I2C_ID ID,BOOL启用)如何使用?
在芯片硬件设计中,重启是怎样熟发的?
户外,一个i2c作品手程是如何启?的的操作用也应该应该启启才才对。
谢谢
关键词:
设备:
你好,
hw_i2c_set_restart_enabled这个函数是把i2c_con_reg里的i2c_restart_en位设为1,目的正为i2c主机的时代允许发布重启信号,并且这个位默认就是1,也就的。
重新启动信号一般不能驾驶设置,底层协议根据奴隶反馈acr的情况自行判断是发作重启继续进行i2c数码传输的人数止损结束。
建议看一下681数据表的114页开头,对芯片的i2c功能和时代有很详细明。除了demo_i2c.c。也可以看看demo_i2c_async.c和适配器里程的ad_i2c.c
qinjiny_dialog,您好
我看演示里的周边 - 德米工程,隐含了若多细节,包括跳动开始,停止信号等等
一道步骤:
1.设置目标地址
2.资源要求(I2C)
然后就是读写i2c,比如
静态void fm75_read_reg(uint8_t reg,uint8_t * val,uint8_t len)
{
size_t rd_status = 0;
hw_i2c_abort_source abrt_src = hw_i2c_abort_none;
/ *
*在传感器寄存器中读取值之前,我们需要向其发送一个字节信息
*通知现在将阅读哪个传感器寄存器。
* /
HW_I2C_WRITE_BYTE(HW_I2C1,REG);
RD_STATUS = HW_I2C_READ_BUFFER_SYNC(HW_I2C1,VAL,LEN,ABRT_SRC,HW_I2C_F_NONE);
if((rd_status <(size_t)len)||(abrt_src!= hw_i2c_abort_none)){
printf(“FM75读取失败:%U”换行符,ABRT_SRC);
}
}
那我理性的:hw_i2c_write_byte(hw_i2c1,reg);这个这个会动源启动,并发表从地址(写),然后发离阁
接接来,hw_i2c_read_buffer_sync这这数,读,改变了i2c的方向,当时自动发产一卷重新启动,并自动发表从地址(读),然后然后数码......读取读取成之道,i2c控制器自动发产止损。
几个关键词的开始,重启,停止都是自动完成的?
那我是的时代,也可用上面这代码代码实现?万能啊
开始--- |
发送device_addr(w) - |---- HW_I2C_WRITE_BYTE(HW_I2C1,REG);
发送reg_addr - |
重启---自动生成 - |
发送device_addr(r) - | --- hw_i2c_read_buffer_sync
读取数据 - |
....
停止 - |
是这样这样?如果这样,真是万能了
进生方式改变的话i2c模块会发表重启命令的,不错的是用适得的函码不可能不可能使用