S32K144入门笔记(十二):LPIT的解读
1. 概述
在S32K1xx中,LPIT是一个四通道的低功耗周期中断定时器,支持低泄露模式但不支持等待模式,当其功能时钟禁止时,访问LPIT会出现错误。
LPIT产生周期性的触发事件于DMA的通道对应关系如下:
DMA通道号 | LPIT通道 |
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
1.1 LPIT输入触发
LPIT 被设计为在其输入触发端捕获小脉冲,而不受其时钟频率的影响。但为了可靠的连续操作,这些触发器之间的间隔应至少为 10 个 LPIT 总线时钟周期。
1.2 LPIT/ADC触发
LPIT 可用作候补的 ADC 硬件触发源,通过 TRGMUX 实现。每个 LPIT 通道支持一个预触发和一个触发。LPIT 通道是基于独立计数器实现的。当用作 ADC 触发源时,通道输出会生成 ADC 硬件触发和预触发。
1.3 LPIT定时器的当前值
对于S32K1xx系列的芯片而言,直接读取CVLAn寄存器不会返回计数器的真实值,如果需要读取计数值的真实值,需要在中断服务程序中读取。而S32K14xW系列的芯片可以直接读取计数器的当前值。
2. 功能描述
2.1 基本信息
LPIT 是一种具有多个定时器通道的低功耗周期性中断定时器。当一个定时器达到编程计数时,相应的定时器通道将生成预触发和触发输出信号,并且这些预触发和触发输出可用于触发设备上的其他模块。
- 定时器可以配置为使用以下方式控制:
- 外部触发(从LPIT模块的外部触发)
- 内部触发(通过定时器内部的其他通道触发)
- 定时器的通道可以被级联,形成宽度更宽的定时器
- 根据定时器模式,定时器通道可能会重新加载并再次计数,或在达到编程计数后停止(也就是循环或单次模式)
定时器触发接口如图1所示。
- CPU接口提供时钟、复位、寄存器读/写总线接口,并处理来自LPIT的中断
- 来自LPIT的触发输出信号可以触发芯片上的其他外设模块,如DMA、ADC和其他模块
- 其他定时器模块可以向LPIT模块提供触发输入,以控制LPIT定时器通道何时启动

- 比较模式
当启用时,定时器会递减并生成输出预触发和触发输出。触发输出比预触发脉冲延迟 1 个时钟周期。每个定时器通道的启动、重新加载和重新启动都可以通过控制位进行控制。定时器可以配置为始终从编程的起始值递减,或在选定的触发输入或前一个通道超时(当通道链接时)时递减。
通过级联定时器通道,应用程序可以实现更长的超时持续时间。
- 捕获模式
当选定的触发输入被置位时,定时器的值会被捕获(在定时器值寄存器中),定时器可用于进行测量。该定时器能够支持一次性或多次测量(如频率测量)。
注:定时器通道在异步时钟上运行,该时钟独立于寄存器读/写访问时钟。也就是说定时器的通道是基于外设功能时钟运行的。正常操作是依靠于两个时钟域之间的同步。
2.2 功能框图
模块的功能框图如图2所示,包括一个全局寄存器集(所有定时器通道共用),以及每个定时器通道的寄存器(用于控制各自的定时器通道)。对这些寄存器的访问与异步外设时钟同步,然后影响定时器通道寄存器。

- 每个定时器通道都包含一个32位计数器,用于加载每个外围时钟正沿的起始值和递减计数
- 在达到零值(通道定时器超时)后,会生成一个触发输出。
- 计数器启动是使用定时器使能寄存器控制位、外部或内部触发器或通过之前的通道超时(使用定时器链时)来控制的。
- 通道定时器超时后,还会设置一个中断标志位,来通知CPU定时器超时
2.3 不同运行模式的操作
运行模式 | LPIT的操作 |
Run | 正常操作 |
Stop | 如果打盹使能位(MCR[DOZE_EN])被设置,且 LPIT 正在使用在停止模式期间仍保持运行的外部或内部时钟源,则可以继续运行。 |
Debug | 如果调试使能位(MCR[DBG_EN])被设置,则可以继续运行。 |
2.4 初始化
参考用户手册表48-4.
2.5 定时器的模式
定时器模式 | 操作 |
32位周期计数器 | 计数器将加载,递减到0 置位中断标志并断言输出预触发 |
双16位周期计数器 | 计数器将加载,递减到0,低16位计数器递减到0 断言输出预触发 高16位计数器递减到0 置位中断标志位并否定输出预触发 |
32位触发累加器 | 计数器将在第一个触发上升沿加载,然后在每个触发上升沿递减到0 置位中断标志并断言输出预触发 |
32位触发器输入捕获 | 计数器将加载0xFFFF_FFF,然后递减到0 如果检测到触发上升沿,然后,它将把当前计数器值的反码存储在计时器值寄存器中,置位中断标志并断言输出预触发 |
2.6 定时器的触发控制
各种可编程位控制触发输入和定时器的操作方式。TRG_SEL 和 TRG_SRC 选择定时器触发:
- 触发选择(TRG_SEL)从所有其他通道的触发输出中为该通道选择输入触发。
- 触发源(TRG_SRC)在内部触发和该通道的外部触发输入之间进行选择。
所选的触发通过 TROT、TSOI 和 TSOT 位的配置影响定时器的操作。
If | = | Then |
TSOI 定时器在中断时停止 | 1 | 则计数器在定时器中断标志(MSR[TIFn])断言时停止。要重新加载和递减,需要: 触发器(如果TSOT=1) T_EN上升沿(如果TSOT=0) |
0 | 计数器在溢出后不停止 | |
TROT 定时器在触发时重载 | 1 | 计数器在每次触发时加载 |
0 | 在每个T_EN上升沿或超时上升沿(捕获模式中不使用超时)加载计数器 | |
TSOT 定时器在触发时开始 | 1 | 计数器将在触发时开始递减。后续触发器将被忽略,直到计数器超时。 |
0 | 计数器在下一个时钟沿立即递减。当通道处于链式或捕获模式时,TSOT不起作用 |
在不同的定时器模式下,这些可编程位对定时器操作的影响不同:
定时器模式 | 哪些位影响定时器操作 |
32位周期计数器 | 所有位(TSOT、TSOI、TROT)都会影响定时器操作。 |
双16位周期计数器 | |
32位触发累加器 | 只有TSOI位控制定时器功能。 TROT和TSOT位对定时器操作没有影响。 |
32位触发器输入捕获 | 只有TSOI和TROT位控制定时器功能。 TSOT位对定时器操作没有影响。 |
2.7 通道链路
单个定时器通道可以链接在一起,以实现更大的超时值。链接定时器通道会使它们以“嵌套循环”的方式工作,从而产生有效的超时值TVALCHn×(TVALCHn-1+1)。
通过在相应通道的 TCTRLCHn 寄存器中设置 CHAIN 位来将通道链接起来。当一个通道被链接时,该通道的定时器会在前一个通道的超时脉冲下递减,而不管定时器模式(MODE 位)如何。如果通道定时器(通道 'n')链接到前一个通道的定时器(通道 'n - 1'),则 TSOT 位没有任何作用。
具体各种模式在官方手册中有详细介绍。