[KungFu8位 MCU]

KF8A100ENG TIMER计数问题

[复制链接]
8508|6
手机看帖
扫描二维码
随时随地手机跟帖
lingjun1982|  楼主 | 2021-6-21 14:27 | 显示全部楼层 |阅读模式
我目前使用的MCU是KF8A100ENG,在做通过INT0与Timer4结合,实现PWM输入捕获的功能。通过示波器查看到PWM输入的周期和占空比捕获的都是正确的(通过一个测试PIN验证),但是在使用Timer4计数上遇到了问题。

这是Timer4的初始化:
        //T4 init
        T4CTL = 0x21;        //时钟源为INTHF(8MHz), 4分频,使能T4
        T4IF = 0;                 //T4中断标志位, 0无中断, 1有中断
        T4IE = 1;                //T4中断使能
        T4H = 0;
        T4L = 0;


        PUIE = 1;        //使能所有未屏蔽的外设中断
        AIE = 1;        //使能所有未屏蔽的全局中断


这是Timer4计数值的获取:
capEdgeTime[capEdgeIndex] = (T4H<<8|T4L);

请问,这样取Timer4的计数值对吗?因为T4H和T4L是实时变化的,debug时断点打在以上代码的下面一行,查看T4H和T4L寄存器的值,跟capEdgeTime[capEdgeIndex] 的值差别还是很大的。是不是我获取的方式不对?

使用特权

评论回复
树上的小鸟| | 2021-6-21 20:02 | 显示全部楼层
看你的描述应该是在外部中断里去读取Timer4的计数值。那这个地方,有三个地方要注意一下,第一,读取Timer4计数值时,应该就Timer4关闭一下,读取值之后,再次使能Timer4(这里根据你的项目需求决定是否需要清计数器),这样可以防止读取的时候有数据更新(低8位计数器正好向高八位进位);2,注意测量的PWM周期,Timer4是否存在溢出可能性;3,为了验证数据,尽量使用串口等外设将周期和占空比打印出来,而不是debug,因为debug模式下会跑其他代码(与仿真器通信),可能会影响数据实时性。

使用特权

评论回复
lingjun1982|  楼主 | 2021-6-24 11:12 | 显示全部楼层
树上的小鸟 发表于 2021-6-21 20:02
看你的描述应该是在外部中断里去读取Timer4的计数值。那这个地方,有三个地方要注意一下,第一,读取Timer4 ...

感谢回复!
我将Timer4的时钟源改为8倍分频,计数就正确了,但是目前我还没明白是什么原因。
1. 因为我计算的是输入PWM的占空比,所以不能在读取Timer的计数值时关闭它,可能会影响后面的计数。
2. 已考虑溢出的可能性
3. 因为这个占空比我还要用于PWM输出,所以从输出上就验证了输入时计时的错误。

使用特权

评论回复
LucasYe| | 2021-9-3 15:33 | 显示全部楼层
KF8A100ENG,可以联系

使用特权

评论回复
这个单片机是不是需要使用芯片自己带的仿真器才可以了?

使用特权

评论回复
lingjun1982|  楼主 | 2021-9-7 10:49 | 显示全部楼层
勇敢的大白菜 发表于 2021-9-6 09:23
这个单片机是不是需要使用芯片自己带的仿真器才可以了?

是的

使用特权

评论回复
现在8位单片机还是很好用的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

29

帖子

1

粉丝