各位大大:
因项目需要,我在做一个工装,模拟实现IIC的从机。主机的SCL时钟周期为10us,我通过2us的定时器不断扫描SDA与SCL的状态来实现模拟过程。
通过单步调试(即主机的每个时钟上下沿均是鼠标点击,比正常SCL时钟周期慢的多),实现了主机与从机的IIC通信过程,但全速跑时就不行了。
经测试发现,定时器设定2us,但实际为10us进一次定时中断,即定时器中执行语句的时间超过了2us导致实际定时超时,将定时器中执行语句注释定时时间就正常了。
但我在定时器中执行的语句并不多,不至于超时,再经测试:在定时中将一个端口电平进行翻转测试(通过宏PBout实现),其时间居然达到了惊人了154ns!!
时钟配置均引用的官方固件库,代码我也查询过APB2总线时钟没有进行分频,这是怎么回事呢?
因定时时间短,对定时中执行的语句时间要求严格。是否因为PBout执行时间就需要154ns呢?有没有更高效的端口高低电平控制方法?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原子哥的是模拟主机,你模拟个从机试试,很难。
经过一周的调试,我已经实现了,SCL持续时间只要大于2us均能正常跟踪。
目前已经实现了温湿度,PM2.5、CO2传感器的从机模拟。
定时器扫描不可靠,最后是用外部中断实现的,的确有很多地方应直接操作寄存器而非用库函数,可以节省很多宝贵的时间。
谢谢原子哥帮顶,已实现了多类从机的IIC软件模拟。
一周热门 更多>