lm3s的i2c控制器与lwip回调函数冲突

2019-03-24 15:07发布

大家好,我是使用i2c控制器中断,总线接了一个时钟芯片   正常情况下对时钟芯片,使用i2c总线中断方式读写都很正常,   当使用串口对设备工作情况进行查询时,一切正常,查询时有去读时钟的时间   可当使用网口,使用lwip对设备进行查询时,i2c控制器就死了。如果查询内容不包括对时钟芯片的查询,就正常     请问大家是否遇到过lm3s的i2c控制器死锁问题呢?请给一下解决思路,谢谢!   此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
zjd0608
2019-03-25 22:32
问题原因也许是由于LWIP的回调函数操作I2C控制器引起的。也许你的程序中,网络收到的命令有的会要求从I2C设备中读取数据,其它任务也可能会操作同一个I2C设备。当I2C操作正在进行时,如果来了一个网络请求也要操作该I2C设备,就有可能会把原来的I2C操作进程打断,插入新的操作,从而导致总线异常。同样道理,操作需要独占的外设的时候也有可能会出现这样的问题。尝试重新初始化I2C控制器,用I2C控制器发起START和STOP和用

IO口产生冗余SCL时钟等方法也不能使这些错误标志复位。芯片的系统控制库里找到了可以单独重启I2C模块的函数SysCtlPeripheralReset( SYSCTL_PERIPH_I2C0 )。在检测到I2C控制器错误标志后,先发起START和STOP来释放总线,然后重启并重新初始化MCU的I2C模块,再进行读写操作。这样即使I2C控制器死掉也可以正常操作了。

一周热门 更多>

相关问题

    相关文章