ENHTIMER
示例列表
本章介绍 ENHTIM 示例的详细信息。RTL87x2G 为 ENHTIM 外设提供以下示例。
功能概述
RTL87x2G 嵌入了四个增强定时器模块,这些模块由软件控制、可编程,并可用于各种任务。
每两个增强定时器通道(通道0和通道1,通道2和通道3)共享相同的时钟源,每个增强定时器通道有独立的预分频器,支持的分频如:Div1/2/4/8/16/32/40/64。 每个增强定时器通道支持死区功能,它的时钟源和时钟分频可以可以独立设置。

Enhance-Timer 时钟树
特性列表
32-bits 定时器。
支持三种模式:
Free-run 模式。
用户自定义 PWM Auto 模式。
用户自定义 PWM Manual 模式。
每两个增强定时器通道(通道0和通道1,通道2和通道3)共享相同的时钟源,每个增强定时器通道有独立的预分频器。
计数方法:
Free-run 模式:递增。
用户自定义 PWM 模式:递减。
每个 ENHTIM 均支持 PWM 输出功能。(支持全高电平/低电平输出)
每个 ENHTIM 均支持互补输出和死区功能。
支持 CCR FIFO 和 Latch count FIFO 的 GDMA 传输接口。
Latch count FIFO 深度:32。
支持 PWM 相位偏移。
支持 One Shot 模式。
定时器模式
计数器在 Free-run 模式下递增计数,在用户自定义模式下递减计数。如果启用了计时器的中断,当计时器下溢或上溢时,将生成超时标志并触发中断。
Free-run 模式
在 Free-run 模式下,计数器的初始值为 0,在使能 ENHTIM 后,32-bits 计数器开始递增计数。计数器计数到 0xFFFFFFFF 后会溢出并绕回到 0,并继续增加。
在初始化结构体中,配置 ENHTIM_InitTypeDef::ENHTIM_Mode
为 ENHTIM_MODE_FreeRun
以配置 ENHTIM 为 Free-run 模式。
用户自定义模式
在用户自定义模式下,计数器的初始值为用户自定义,通过配置 ENHTIM_InitTypeDef::ENHTIM_MaxCount
设定加载的计数器值。
计数器将从 ENHTIM_InitTypeDef::ENHTIM_MaxCount
- 1 计数到 0,计数器下溢后会重新加载计数器值到 ENHTIM_InitTypeDef::ENHTIM_MaxCount
- 1。
PWM 模式
每个 ENHTIM 均支持 PWM 输出功能。在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_PWMOutputEn
为 ENABLE
,以开启 PWM 输出模式。
如下是一些 PWM 的参数配置设定:
PWM 输出的极性可以通过
ENHTIM_InitTypeDef::ENHTIM_PWMStartPolarity
进行设定。PWM 周期通过 MAX-COUNT
ENHTIM_InitTypeDef::ENHTIM_MaxCount
进行设定。PWM 的占空比需要通过 MAX-COUNT 和 CCR(Capture/Compare Register) 共同决定。
在用户自定义 PWM Manual 模式下,通过设置计数器比较值
ENHTIM_InitTypeDef::ENHTIM_CCValue
到 CCR 中。在用户自定义 PWM Auto 模式下,通过调用函数
ENHTIM_WriteCCFIFO()
设置计数器比较值到 CCR FIFO 中。
当 ENHTIM_InitTypeDef::ENHTIM_PWMStartPolarity
设置为 ENHTIM_PWM_START_WITH_LOW
时:
当
ENHTIM_InitTypeDef::ENHTIM_CCValue
设置为 0 时,PWM 将会一直输出低电平。当
ENHTIM_InitTypeDef::ENHTIM_CCValue
设置的值大于等于ENHTIM_InitTypeDef::ENHTIM_MaxCount
时,PWM 将会一直输出高电平。
在调用 ENHTIM_Cmd()
使能 TIM 后,PWM 计数器会从 MAX-COUNT 开始倒计时,达到 CCR 或 CCR FIFO 中设定的计数器比较值时,PWM 输出将会翻转。
计数器会继续倒计时,当计数器值向下溢出时,PWM 输出将会再次翻转。
后续重复上述过程。

PWM 波形示意图
用户自定义 PWM Manual 模式
在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_Mode
为 ENHTIM_MODE_PWM_MANUAL
设定模式为用户自定义 PWM Manual 模式。
在用户自定义 PWM Manual 模式下,定时器将会从 CCR 内加载比较值,通过 ENHTIM_InitTypeDef::ENHTIM_CCValue
进行比较值的设定。
用户自定义 PWM Auto 模式
在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_Mode
为 ENHTIM_MODE_PWM_AUTO
设定模式为用户自定义 PWM Auto 模式。
在用户自定义 PWM Auto 模式下,定时器将会从 CCR FIFO 内加载比较值。用户需要在启用定时器之前,调用函数 ENHTIM_WriteCCFIFO()
设定比较值。
每加载一个比较值,PWM 将会根据该比较值输出符合设定占空比的一个周期的 PWM 波形,同时该比较值将从 CCR FIFO 中移除。
如果 CCR FIFO 为空,定时器会加载 CCR FIFO 中的上一个比较值。CCR FIFO 的深度为 8。
互补输出与死区功能
每个 ENHTIM 均支持 PWM 互补输出与死区功能。在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZoneEn
为 ENABLE
以开启该功能。
死区功能的时钟源可选择为 32kHz 时钟源或 ENHTIM 时钟,通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZoneClockSource
进行设定。
可以通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZone_ClockDivEn
和 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZone_ClockDiv
设定死区时钟的分频系数。
死区的大小可以通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_DeadZoneSize
进行设定,最大设定值为 0xFF。
死区时间的计算公式为 deadzone time = dead zone size * dead zone clock period。
死区时间的设定分为如下三种情况:
当死区时间大于 0 且小于 PWM 高电平/低电平的持续时间时,PWM_P 和 PWM_N 的上升沿输出会延迟一个死区时间。

PWM 死区示意图(死区时间大于 0 且小于 PWM 高电平/低电平持续时间)
当死区时间大于 PWM 高电平持续时间时,PWM_P 会持续输出低电平。

PWM 死区示意图(死区时间大于 PWM 高电平持续时间)
当死区时间大于 PWM 低电平持续时间时,PWM_N 会持续输出低电平。

PWM 死区示意图(死区时间大于 PWM 低电平持续时间)
One Shot 功能
ENHTIM 在 Free-run 模式和用户自定义模式下均支持 One Shot 功能。在初始化结构体中设置 ENHTIM_InitTypeDef::ENHTIM_OneShotEn
为 ENABLE
以开启该功能。
在启用 One Shot 功能后,调用 ENHTIM_Cmd()
不会使 ENHTIM 开始计数,需要额外调用 ENHTIM_OneShotCmd()
激活 One Shot 功能,定时器开始计数。
无论计数器下溢或上溢,定时器都会停止计数,用户可以再次调用 ENHTIM_OneShotCmd()
以重新启动定时器计数。
GPIO Latch 功能
在 Free-run 模式下,ENHTIM 可以通过 GPIO 信号触发锁存计数(仅通道0)。
在初始化结构体中,通过设置 ENHTIM_InitTypeDef::ENHTIM_LatchCountEn
使能 Latch Count 功能,通过设置 ENHTIM_InitTypeDef::ENHTIM_LatchCountTrigger
设置 GPIO Latch 触发条件。
通过设置 ENHTIM_InitTypeDef::ENHTIM_LatchTriggerPad
设置 GPIO 的引脚。
当启用定时器后,GPIO 信号满足触发条件时,所存的计数值将会记录在对应的 Latch Count FIFO 中。
当 Latch Count FIFO 中的数据数量达到设定的阈值时会触发 ENHTIM_INT_LATCH_CNT_FIFO_THD
中断。
GDMA Handshake
ENHTIM 支持 CCR FIFO 和 Latch Count FIFO 的 GDMA 握手接口,可以通过 GDMA 访问 FIFO 并搬运数据。
在初始化结构体中,通过设定 ENHTIM_InitTypeDef::ENHTIM_DmaEn
开启 GDMA 搬运,设定 ENHTIM_InitTypeDef::ENHTIM_DmaTragget
以确定 GDMA 的搬运目标,可选择为 CCR FIFO 或 Latch Count FIFO 。