定时器 1:通用定时器

概述       

HPM5300通用定时器gptmr的时基单元比较简单,既不能选择时钟源,也没有预分频器,他就是在主频,而类比STM32中拥有死区生成功能的高级定时器,则称为PWM定时器;拥有正交解码的定时器则命名为正交解码器接口QEI,如下图所示

​编辑 ​编辑

​编辑

本文记录通用定时器TMR的使用:定时、输入捕获,输出比较

  • 定时

当计数器工作在定时触发中断的情况下,逻辑非常简单,如下图所示

HPM5300定时器只支持向上记数,同时没有预分频器,只有一个32位的计数器,计数器只能在TMR工作时钟10MHZ下向上记数,达到RLD值时复位,复位后产生中断信号,如果使能该中断信号,则进入中断函数

重载寄存器共32位,最多可存0xFFFFFFFF,在10MHZ的工作时钟下,最多可记429秒,设置RLD寄存器时,把RLD设置为gptmr_freq/1000,那么重载一次就是1ms,乘上你想要的值就可以定你想要的时间

下面看一下代码的实现

tick_ms_isr是中断函数,进入中断函数首先判断中断标志位是否确实被置1,然后则是将中断标志为手动置0,如果不手动置0,那么程序将反复运行该中断函数,随后则是你要在终端中具体要做的事情的代码

SDK_DECLARE_EXT_ISR_M(IRQn_GPTMR0, tick_ms_isr);

这行代码则是申明了,对于GPTMR0产生的中断,需要进入哪个函数

Timer_config函数则是对于GPTMR的初始化

首先声明了一个gptmr_channel_config_t结构体,GPTMR的初始化通过结构体配置

代码中将GPTMR工作模式配置为非捕获模式,RLD寄存器设置为10 000 000,随后则是声明了中断使能以及配置中断优先级

  • 输出比较

简单来说,当定时器用作输出比较时,我们可以配置的有:定时器默认状态,重载寄存器的值,两个比较寄存器的值;定时器从0记数,记数至RLD时变为0,输出引脚默认电平由用户自定义,当定时器记数至cmp0或cmp1时,输出电平翻转,与此同时,产生中断信号,如果用户使能该中断信号,可以进入中断

用一个实际的例子来演示输出比较的配置过程

首先,是gptmr_init的部分

Gptmr的默认工作模式为输出比较,不需要设置工作模式

初始电平配置为低,RLD配置与时钟工作频率一致,因此周期为一秒

到达CMP0时电平翻转置高,到达CMP1时电平再翻转置低,到达RLD时计数器重载,电平变为初始值低电平,占空比为40%,波形如下图所示

这里需要注意的有两点:

  1. 计数器重载时,输出电平也会变成配置的默认值
  2. 计数器达到CMP时,电平翻转,默认配置下CMP0 CMP1均为0

然后是中断的使能,输出比较时,计数器达到CMP0 CMP1 RLD均可以产生中断信号,你需要选择用哪个信号进入中断,上面的代码所选的就是计数器达到CMP1时产生中断

  • 输入捕获

接下来看一下初始化到底能做哪些修改,查看gptmr_channel_config的定义

输入捕获对应了工作模式中除了输出比较0之外的四种工作模式

简单的概括来说,当定时器用于输入捕获时,计数器依然按照工作时钟不断向上计数,当外部传入信号时,可以把对应上升沿/下降沿时计数器的值转存到特定寄存器中,用户配置工作模式与读取相应寄存器,可以实现对外部上/下升沿的记数以及PWM信号测量

输入捕获允许中断,中断的产生型号与工作模式息息相关,当工作模式为捕获上升沿时,上升沿进入中断,以此类推;当工作再PWM测量模式时,同样为捕获到上升沿进入中断

因为这种设计,在PWM测量模式时,第一个中断所读的寄存器的值肯定是有问题的,因为CAPDTY CAPPRD两个寄存器保存的是两次信号的之间计数器的差值,而第一个上升沿来的时候,肯定没办法算出准确的占空比和周期

接下来看一下代码部分

初始化代码将gptmr配置为捕获上升沿

进入两次中断函数后,capture_is_done置1,主函数打印tmp_time

Tmp_time 则是两次进入中断的计数器之间值相减的差,也就是方波的周期

不过该代码只是简单演示了输入捕获的功能,可以预见,当第一次和第二次上升沿之间,计数器重载了,那么该次记数一定是有问题的,不过芯片本身还有更高级的定时器,专门用于编解码以及PWM信号控制,该问题是否能在更高级的定时器上得到解决,留到后续再聊

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值