ENHTIMER

示例列表

本章介绍 ENHTIM 示例的详细信息。RTL87x2G 为 ENHTIM 外设提供以下示例。

功能概述

RTL87x2G 嵌入了四个增强定时器模块,这些模块由软件控制、可编程,并可用于各种任务。

每两个增强定时器通道(通道0和通道1,通道2和通道3)共享相同的时钟源,每个增强定时器通道有独立的预分频器,支持的分频如:Div1/2/4/8/16/32/40/64。 每个增强定时器通道支持死区功能,它的时钟源和时钟分频可以可以独立设置。

这是 enhtim clock tree.

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_ModeENHTIM_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_PWMOutputEnENABLE ,以开启 PWM 输出模式。

如下是一些 PWM 的参数配置设定:

ENHTIM_InitTypeDef::ENHTIM_PWMStartPolarity 设置为 ENHTIM_PWM_START_WITH_LOW 时:

在调用 ENHTIM_Cmd() 使能 TIM 后,PWM 计数器会从 MAX-COUNT 开始倒计时,达到 CCR 或 CCR FIFO 中设定的计数器比较值时,PWM 输出将会翻转。 计数器会继续倒计时,当计数器值向下溢出时,PWM 输出将会再次翻转。 后续重复上述过程。

这是 enhtim pwm parameter.

PWM 波形示意图

用户自定义 PWM Manual 模式

在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_ModeENHTIM_MODE_PWM_MANUAL 设定模式为用户自定义 PWM Manual 模式。

在用户自定义 PWM Manual 模式下,定时器将会从 CCR 内加载比较值,通过 ENHTIM_InitTypeDef::ENHTIM_CCValue 进行比较值的设定。

用户自定义 PWM Auto 模式

在初始化中设定 ENHTIM_InitTypeDef::ENHTIM_ModeENHTIM_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_PWMDeadZoneEnENABLE 以开启该功能。

死区功能的时钟源可选择为 32kHz 时钟源或 ENHTIM 时钟,通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZoneClockSource 进行设定。 可以通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_PWMDeadZone_ClockDivEnENHTIM_InitTypeDef::ENHTIM_PWMDeadZone_ClockDiv 设定死区时钟的分频系数。

死区的大小可以通过初始化结构体参数 ENHTIM_InitTypeDef::ENHTIM_DeadZoneSize 进行设定,最大设定值为 0xFF。 死区时间的计算公式为 deadzone time = dead zone size * dead zone clock period。

死区时间的设定分为如下三种情况:

  1. 当死区时间大于 0 且小于 PWM 高电平/低电平的持续时间时,PWM_P 和 PWM_N 的上升沿输出会延迟一个死区时间。

Here should be enhtim dead zone size less than period.

PWM 死区示意图(死区时间大于 0 且小于 PWM 高电平/低电平持续时间)

  1. 当死区时间大于 PWM 高电平持续时间时,PWM_P 会持续输出低电平。

Here should be enhtim dead zone size more than high period.

PWM 死区示意图(死区时间大于 PWM 高电平持续时间)

  1. 当死区时间大于 PWM 低电平持续时间时,PWM_N 会持续输出低电平。

Here should be enhtim dead zone size more than low period.

PWM 死区示意图(死区时间大于 PWM 低电平持续时间)

One Shot 功能

ENHTIM 在 Free-run 模式和用户自定义模式下均支持 One Shot 功能。在初始化结构体中设置 ENHTIM_InitTypeDef::ENHTIM_OneShotEnENABLE 以开启该功能。

在启用 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 。