专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
lm3s的i2c控制器与lwip回调函数冲突
2019-03-24 15:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
14338
11
1271
大家好,我是使用i2c控制器中断,总线接了一个时钟芯片 正常情况下对时钟芯片,使用i2c总线中断方式读写都很正常, 当使用串口对设备工作情况进行查询时,一切正常,查询时有去读时钟的时间 可当使用网口,使用lwip对设备进行查询时,i2c控制器就死了。如果查询内容不包括对时钟芯片的查询,就正常 请问大家是否遇到过lm3s的i2c控制器死锁问题呢?请给一下解决思路,谢谢! 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
tekkon
2019-03-26 05:42
我之前用philips的 LPC2292做一个项目时遇到过类似的情况
TaskA和TaskB都会通过I2C接口去读写从设备的寄存器, 当他们单独使用I2C接口时一切正常, 但当TaskA需要通过I2C接口每秒读一次从设备寄存器时, TaskB试图使用I2C接口写一字节给从设备会导致I2C瘫痪掉
后来的解决方法是在保证I2C空闲的状态下再进行读写,每次读写操作前先检测I2C之前的读写数据是否完全完成。
用task的话基本上就是在每次读写时使用下面的机制
//获取I2C接口,别的任务想使用就得等
xMutexTake( I2CMutex, portMAX_DELAY );
//读取操作
I2CWrite();或者 I2CRead();
// xI2CFinishedSemaphore在中断服务函数里当读写结束时释放,告诉调
//用它的任务操作完成,不用semaphore的话可以一直读取寄存器看是否成
xSemaphoreTake( xI2CFinishedSemaphore, portMAX_DELAY );
//释放I2C接口,别的等待的任务可以使用
xMutexGive( I2CMutex );
没有操作系统的话就得在每次读写前一直查询寄存器状态,确保空闲!
希望有帮助
加载中...
查看其它11个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
TaskA和TaskB都会通过I2C接口去读写从设备的寄存器, 当他们单独使用I2C接口时一切正常, 但当TaskA需要通过I2C接口每秒读一次从设备寄存器时, TaskB试图使用I2C接口写一字节给从设备会导致I2C瘫痪掉
后来的解决方法是在保证I2C空闲的状态下再进行读写,每次读写操作前先检测I2C之前的读写数据是否完全完成。
用task的话基本上就是在每次读写时使用下面的机制
//获取I2C接口,别的任务想使用就得等
xMutexTake( I2CMutex, portMAX_DELAY );
//读取操作
I2CWrite();或者 I2CRead();
// xI2CFinishedSemaphore在中断服务函数里当读写结束时释放,告诉调
//用它的任务操作完成,不用semaphore的话可以一直读取寄存器看是否成
xSemaphoreTake( xI2CFinishedSemaphore, portMAX_DELAY );
//释放I2C接口,别的等待的任务可以使用
xMutexGive( I2CMutex );
没有操作系统的话就得在每次读写前一直查询寄存器状态,确保空闲!
希望有帮助
一周热门 更多>