STM32C8TC单条指令执行时间异常

2019-07-21 04:53发布

各位大大:
     因项目需要,我在做一个工装,模拟实现IIC的从机。主机的SCL时钟周期为10us,我通过2us的定时器不断扫描SDA与SCL的状态来实现模拟过程。
通过单步调试(即主机的每个时钟上下沿均是鼠标点击,比正常SCL时钟周期慢的多),实现了主机与从机的IIC通信过程,但全速跑时就不行了。
经测试发现,定时器设定2us,但实际为10us进一次定时中断,即定时器中执行语句的时间超过了2us导致实际定时超时,将定时器中执行语句注释定时时间就正常了。
但我在定时器中执行的语句并不多,不至于超时,再经测试:在定时中将一个端口电平进行翻转测试(通过宏PBout实现),其时间居然达到了惊人了154ns!!
时钟配置均引用的官方固件库,代码我也查询过APB2总线时钟没有进行分频,这是怎么回事呢?
因定时时间短,对定时中执行的语句时间要求严格。是否因为PBout执行时间就需要154ns呢?有没有更高效的端口高低电平控制方法?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-21 07:23
帮顶
0x00000000
2楼-- · 2019-07-21 09:15
 精彩回答 2  元偷偷看……
0x00000000
3楼-- · 2019-07-21 09:23
原子有很成熟的IIC软模代码,自己看看差在哪里?能用可以直接移植得了。
xielei
4楼-- · 2019-07-21 13:51
0x00000000 发表于 2019-1-15 08:53
原子有很成熟的IIC软模代码,自己看看差在哪里?能用可以直接移植得了。

原子哥的是模拟主机,你模拟个从机试试,很难。
经过一周的调试,我已经实现了,SCL持续时间只要大于2us均能正常跟踪。
xielei
5楼-- · 2019-07-21 16:04
0x00000000 发表于 2019-1-15 08:48
GPIO有bitset和bitrest寄存器,可以快速控制电平变化。还是不够快直接写汇编得了。
不过你这个应该是程序 ...

目前已经实现了温湿度,PM2.5、CO2传感器的从机模拟。
定时器扫描不可靠,最后是用外部中断实现的,的确有很多地方应直接操作寄存器而非用库函数,可以节省很多宝贵的时间。
xielei
6楼-- · 2019-07-21 20:41
正点原子 发表于 2019-1-15 01:37
帮顶

谢谢原子哥帮顶,已实现了多类从机的IIC软件模拟。

一周热门 更多>