代码拉取完成,页面将自动刷新
在GD32F450上实现GPIO-I2C-SLAVE,要求2个支持双边沿中断的GPIO。
测试平台 | CPU主频 | I2C速率 | 状态 |
---|---|---|---|
GD32F450 | 200M | 100K | OK |
GD32F150 | 72M | 10K | OK |
核心接口和板级代码已经做分离,一个单片机可以支持n个I2C从设备。
具体见i2c_slave_0.c
的有关实现,以快速拓展n个从设备处理。
提供接口支持主机写入寄存器时,对值进行检查,具体见i2c0_reg_will_changed
的实现。
提供接口支持从机主动更新寄存器(参考i2c0_reg_update_poll
的实现和调用方式)
修改i2c_slave_0.h
中的SW_SLAVE_ADDR_7BIT
即可。
支持连续写、连续读;在Linux平台验证i2c访问从机结果如下:
# i2ctransfer -f -y 0 w4@0x51 0x00 0xa1 0xa2 0xa3
# i2ctransfer -f -y 0 w1@0x51 0x00 r1
0xa1
# i2ctransfer -f -y 0 w1@0x51 0x00 r3
0xa1 0xa2 0xa3
# i2ctransfer -f -y 0 w1@0x51 0x01 r2
0xa2 0xa3
1、目前demo中,SDA、SCL都使用同一个ISR
,请在你的实际项目中,在对应的ISR响应SDA
与SCL
。
2、在移植时,请修改i2c_slave.c
中所有带CHECK_PORTING
的函数接口。
3、可以在systick
中添加i2c_tick_inc
来做异常处理。实测,可以不调用i2c_sw_check_timeout
;如果需要调用,需要确保i2c_sw_check_timeout
的执行间隔大于10ms。
4、通讯速率建议不超过100K
左右;不支持SCL
展频(Spread Spectrum Clocking
)。
参考的解决方法:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。