请教i2c方面问题

老师您好,有几个i2c的问题要请教一下,我用了例程中的app_i2c.c库函数,在串口转i2c通讯的时候,快速频繁收发数据时,偶尔会死机,我怀疑是不是总线总裁方面的问题,或者是中断优先级的问题,请问老师各个中断的优先级从哪个函数里面设置,还有总站总裁是自动的还是需要配置一下的?如果需要配置,在哪个函数里配置?谢谢老师

您好,您用的是582的硬件IIC主机还是从机,主机的话可以先用GPIO模拟IIC调试,参考代码见模拟I2C主机(CH579 CH573 CH582) - debugdabiaoge - 博客园 (cnblogs.com)

调整中断优先级可以使用函数 PFIC_SetPriority() 。

总线仲裁是硬件自带功能,只可选择是否上报错误,默认开启。建议开启上报功能,即置位I2C_STAR1寄存器的ARLO位,这样出现总线相关异常时会有上报提示,关闭上报功能并不会使波形正常。您手头若有逻辑分析仪等抓包工具,可以抓个包检查一下主线仲裁出错时的SDA上的波形,是否在传输过程中受到串扰。

您可以将主/从机设备型号、调试代码、打印截图等信息发送至邮箱zhaiyw@wch.cn,年后我们会尝试复现和定位问题。


感谢工程师回复,我用的是ch582m 使用的是硬件iic 要求是没有操作时处于从机接收模式 用来接收另一个系统发来的指令,当有操作时转换为主机模式 对另一个系统发送数据,我再研究一下看看 有问题在请教您 感谢感谢 另外问一下 582是否可以设置两个从机地址?我想让它代替两个不同地址的i2c从机设备,我看32v203介绍好像可以,


可以设置双从机地址的,CH58x.i2c.c文件中有配置函数如下。

image.png

IIC中断处理过程中也要注意一下带有_SECONDADDRESS_的宏,使用了与第一地址不同的数值。image.png


感谢老师指导!!我学习一下!!


问题已经解决了,打扰老师了


只有登录才能回复,可以选择微信账号登录