概述
S32K1具有丰富的Timer资源,今天,我们从最简单的LPTMR开始。
LPTMR:Low Power Timer ,S32K1xx有一个LPTMR模块,该模块是一个通道的16bit时间(time counter)或者脉冲计数器。 可配置为带有可选预分频器的时间计数器,或带有可选毛刺滤波器的脉冲计数器,适用于所有功耗模式,包括低泄漏模式。 它还可以在大多数系统重置事件中继续运行,从而可以将其用作时间计数器。
特征
-16位带比较器的时间计数器或脉冲计数器; 可选中断可从任何低功耗模式产生异步唤醒 硬件触发输出 计数器支持自由运行模式或比较触发复位
- 可配置时钟源
- 可配置脉冲计数器输入源(上升沿或者下降沿)
模式
引脚
LPTMR_ALTn Pulse Counter Input
内存映射
typedef struct {
__IO uint32_t CSR;
__IO uint32_t PSR;
__IO uint32_t CMR;
__IO uint32_t CNR;
} LPTMR_Type, *LPTMR_MemMapPtr;
CSR
TDRE: Timer DMA Request Enable TCF: Timer Compare Flag, 1b - The value of CNR is equal to CMR and increments. TIE: Timer Interrupt Enable TPS: Timer Pin Select TPP: Timer Pin Polarity 0:CNR increments on the rising-edge. 1:CNR increments on the falling-edge. TFC: Timer Free-Running Counter 0b - CNR is reset whenever TCF is set. 1b - CNR is reset on overflow TMS: Timer Mode Select 0b - Time Counter mode. 1b - Pulse Counter mode. TEN: Timer Enable
PSR
BIT6-3: PRESCALE BIT2: PBYP Prescaler Bypass BIT1-0: PCS Prescaler Clock Select
功能描述
电源与复位
LPTMR在所有模式下保持供电,如果在低功耗模式下不需要LPTMR,应在进入低功耗前将其失能。
LPTMR仅在全局上电复位POR和低电压监测LVD情况下复位,失能情况下配置LPTMR CMRPSR,然后CSR[TIE]置位使能。
时钟
LPTMR prescaler/glitch filter的时钟必须在模块使能前配置,可从4个中选择一个。 PSR[PCS]选择的时钟必须在低功耗模式下保持,LPTMR才能在低功耗模式下运行。 输入脉冲时钟不应超过fLPTMR。
prescaler/glitch filter
在Time Counter模式下,当prescaler使能,prescaler的输出为CNR提供时基,CNR在2^2 到 16预分频时钟下加1,LPTMR 使能后,由于同步逻辑,CNR 的第一个增量需要额外的一个或两个预分频器时钟周期。 当prescaler被旁路bypassed,CNR在prescaler的每个时钟周期加1.
在Pulse Counter 模式下,当glitch filter使能,glitch filter的输出为CNR提供时基。CNR在glitch filter 的输出有效下加1, if(The selected input source remains asserted for at least 2^1 to 15 consecutive prescaler clock rising-edges) then(The glitch filter output also asserts.) 当glitch filter被旁路bypassed,CNR在glitch filter的每个时钟周期加1. 在LPTMR 初次使能前,选择的时钟强制为高,避免CNR意外计数。
LPTMR counter
The CNR increments by one on every: ? Prescaler clock in Time Counter mode with prescaler bypassed ? Prescaler output in Time Counter mode with prescaler enabled ? Input source assertion in Pulse Counter mode with glitch filter bypassed ? Glitch filter output in Pulse Counter mode with glitch filter enabled 当LPTMR失能或者CNR溢出或者CSR[TFC] w1c时,CNR复位。
当在调试模式内核暂停时:
- Pulse Counter mode, the CNR continues incrementing
- Time Counter mode, the CNR stops incrementing.
CNR读取前,先随意写入一个值,再读取,这样是从临时寄存器中读取到的当前CNR。
当读取CNR,bus clock必须大于CNR增速2倍,否则读取的数据不正确。
LPTMR compare
CMR==CNR时: ? CSR[TCF] is set. ? LPTMR interrupt is generated if CSR[TIE] is also set. ? LPTMR hardware trigger is generated. ? CNR is reset if CSR[TFC] is clear
当更新CMR时,还需CSR[TCF]被清除。 当 LPTMR 在时间计数器模式下启用时,由于同步逻辑,第一个增量将需要一个或两个时钟周期。 这将导致第一次比较(因此中断和硬件触发)稍晚发生。更快的预分频器时钟或更大的预分频器值将最大限度地减少这种影响。
LPTMR interrupt
当CSR[TIE] 使能,CSR[TCF] 置位时中断产生,该中断能任意模式下产生唤醒。
LPTMR hardware trigger
CSR[TCF]置位时,硬件触发。LPTMR hardware trigger能够触发事件到其它外设,在不需要软件干预情况下。
|