不支持楼上的说法, IIC 的时钟是允许误差, 但也不能随意中断. 如果中断一段时间, 会出现超时错误而导致传输失败.
针对这个具体问题, 本人觉得这有多个办法好解决. 上面(比如4楼)就说了不错的办法.
我先说一个. 就是尽可能把占长时间的任务拆开, 分成小段来进行.
比如: 模拟iic设备读写, 把整块数据的读写拆开, 变成单字节数据的传输. 传输完单字节后, 开中断.这时候允许串口中断做下处理. 然后完成中断再继续 模拟iic设备读写.
当然如果串口中断里有较耗时的任务, 可能导致模拟iic设备读写打断后出现错误, 那就尽可能精简中断服务. 比如串口中断, 只是更新一下数据缓冲(软件 FIFO). 数据和协议处理, 可以交给主循环来进行. |