用IO模拟11个I2C接口如何不被阻塞呢?
最近有个项目,用一片STM芯片,模拟了11个I2C接口,每个接口上都挂了8个I2C从设备,做温度、IO扩展,一共88个设备。单片机和PC之间用串口进行通信,PC发串口命令从单片机获取这些数据。
我的问题是:I2C用IO口来模拟,实现I2C总线的时候中间用了很多延时函数,延时函数是FOR循环实现的,会阻塞在这里。这样如果实现11路I2C ,MCU大部分是都耗在延时函数了,我担心串口响应会不及时,有没有什么方法不用延时函数实现这么多个口子的I2C呢? 自己实现个简易的多线程栈,实现锁,然后开12个线程同时跑。。 看I2C速度了,要求不高,就弄个RTOS呗 没有那么复杂, delay就改为return code; 下次再从这个code的位置开始判断; 接着处理下一个;几乎没有什么难度; 长延时才需要这么搞, us级的延时就等等吧 很简单的,串口协议在中断里面处理。延时用定时器实现,一次读一路i2c就行,别全部一起来。 用硬件外设降低代码参与,基于你目前的方案,考虑串口收发都使用DMA驱动 直接同时驱动,时间到了,同时操作所有的IO, switch case 或者 rtos
页:
[1]