周期中断定时器、低功耗定时器、实时时钟

定时信号

KL25提供的周期中断定时器(PIT)、低功耗定时器(LPTMR)、实时时钟(RTC)三个模块均可以产生定时信号。

RIT、LPTMR、RTC

功能概述

周期中断定时器RIT:KL25/26内部支持一个周期中断定时器模块RIT,内含两个通道,没有外部引脚。每个通道都有一个独立的32位减一计数器(CVALn,n=0,1),时钟源固定为系统总线时钟并且不可分频。

低功耗定时器LPTMR:KL25/26支持一个低功耗定时器模块LPTMR,可以被配置为具有可选预分频因子的定时器,也可以被配置为带有脉冲干扰滤波器功能的脉冲计数器,用以普通单次计时。

时钟源可以多种选择,即可配置为1KHz的LPO时钟,32KHz的慢速IRC时钟,4MHz的快速IRC时钟,8MHz额OSCERCLK时钟。时钟源分频范围大,最小分频1,最大分频65536。当采用1KHz的LPO时钟时,最大中断周期可达50天。

实时时钟RTC:KL25/26支持一个实时时钟RTC,RTC正常情况下需要外接32.768KHz晶振、匹配电容、备用电源等元件,提供MCU掉电累计计时功能。

在KL25评估板上芯片晶振与RTC晶振引脚复用在一起产生冲突,无外部晶振,故无法提供掉电计时功能,KL25上的RTC可作为普通累计计时和闹钟报警使用。RTC定时器由一个具有报警功能的32位秒计数寄存器和一个具有补偿功能的16位预分频寄存器组成。

工作原理

周期中断定时器PIT工作原理:

  1. 当PIT模块的某一通道被初始化使能后,计数器CVALn的值会自动加载重载寄存器LDVALn的值,开始按照时钟源频率减一计数。
  2. 到0时,标志寄存器TFLGn的TIF位被置1,产生定时溢出中断。

中断周期的最大值可由时钟源频率及计数器位数计算获得。

例如时钟源频率为24MHz,可计算得出中断周期最大值为178时,实际的中断周期由重载寄存器LDVALn值决定。

低功耗定时器LPTM工作原理:LPTMR模块内含16位的递增定时器

  1. 在LPTMR模块初始化使能后,定时器从0开始加1计数。
  2. 当计数器CNR的值与重载寄存器LPTMR0_CMR的值相等就会置控制和状态寄存器CSR的比较标志位TCF并产生中断。
  3. 程序转而运行该中断向量号对应的中断服务例程,并在例程中通过向该位写1来完成清比较标志位的工作。
  4. 此时LPTMR模块就会重新开始计时。

实时时钟RTC工作原理:

RTC模块包括两个中断向量号,秒中断的中断向量号37,其他中断对应的中断向量号36。

RTC模块的计数器为递增计数,累计计数时间可达2³²秒,超过135年。

时钟源有多种,单次中断时间取决于时钟源的频率。

当时钟源为32.768KHz时,中断时间为1秒,即正常计时使用的中断时间,而如果中断为1KHz的LPO时钟,中断时间就会变为32.768秒。

  1. 在RTC模块初始化使能后,每个时钟周期,预分频寄存器TPR的值加1。
  2. 定时条件成熟时,程序转而运行该中断向量号对应的中断服务例程。

因为没有秒中断标志位,所以在例程中无需清除,在硬件设计上减少了软件开销。

如果此时秒计时器TSR的值与报警寄存器TAR的值相等,就可产生报警中断,程序转而运行该中断向量对应的中断服务例程,并在例程中通过重写报警寄存器TAR的值来完成清报警中断标志位TAF的工作。

驱动构件封装要求

PIT模块:该模块有两个独立的通道,时钟源为系统总线时钟,为方便使用,在头文件中给出通道号

及工作时钟频率的宏定义。

在中断服务例程中,需要判断某一通道计数器是否产生溢出中断。因此在头文件中给出宏函数PIT_GET_FLAG(index)用于判断index(通道号)通道计数器是否产生溢出中断。

头文件中还有清中断标志位宏函数PIT_CLEAR_FLAG(index)。

除了宏定义及宏函数,头文件还需给出对外接口函数:

PIT模块初始化函数pit_init,形参为通道号及以毫秒为单位的中断周期;

使能中断函数函数pit_enable_int禁止中断函数pit_disable_int,形参为通道号。

LPTMR模块:该模块的时钟源有很多,为区分不同的时钟源,在头文件中给出时钟源的宏定义。

在中断服务例程中,需要判断计数器是否产生溢出中断,因此在有文件中给出了宏函数LPTMR_GET_FLAG,用于判断计数器是否产生溢出中断。

头文件中还给出了用于清中断标志的宏函数LPTMR_CLEAR_FLAG。

除了宏定义及宏函数,头文件还需给出对外接口函数:

LPTMR模块初始化函数lptmr_init,形参为时钟源类别;

使能中断函数lptmr_enable_init禁止中断函数lptmr_disable_int,无形参。

RTC模块:在中断服务例程中,需要判断计数器是否产生无效中断,因此,在头文件中给出了宏函数RTC_GET_INVALID_FLAG,用于判断计数器是否产生无效中断。提供宏函数RTC_GET_OVERFLOW_FLAG,用于判断溢出中断;宏函数RTC_GET_ALAM_FLAG,用于判断报警中断;宏函数RTC_CLEAR_FLAG,用于清除中断标志。

除宏函数外,头文件还需给出对外接口函数:RTC模块初始化函数rtc_imit,形参为报警值;复位秒计数器函数rtc_reset_second_time,形参为秒计数值。

启动计时函数rtc_start,无形参;停止计时函数rtc_stop,无形参;使能中断函数rtc_enable_int禁止中断函数rtc_disable_int,无形参。

 

驱动构件的使用方法

使用方法与SysTick和TPM类似,使用时先进行初始化,再使能中断,然后在中断中编程。

 

嵌入式技术基础与实践(第4版)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值