思澈科技软件开发工具包  2.20
GPT

GPT (General Purpose Timer) 基于一个16比特计数器,可实现计时、测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等功能。计数器本身可以进行向上、向下或者向上/向下计数,计数时钟为系统pclk或外部输入信号,并可进行1~65536倍的预分频。GPT共有4个channel,可以分别独立配置为输入捕获或输出模式。计数,输入捕获和输出比较的结果可以通过中断或者DMA的方式通知系统。GPT包含主从模式接口,可以进行多级级联,实现多级计数或同步触发等功能。

GPT主要特性:

● 16位向上、向下、向上/向下自动重装载计数器,最大计数65535
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 8位可配置重复计数
● 支持单笔计数模式(OPM),当重复计数完成后自动停止计数器
● 4个独立通道,可分别配置为输入或输出模式
● 输入模式
─ 上升沿/下降沿捕获
─ PWM脉宽和周期捕获(需占用两个通道)
─ 可选4个输入端口之一或1个外部触发端口,支持防抖动滤波和预降频
● 输出模式
─ 强制输出高/低电平
─ 计数到比较值时输出高/低/翻转电平
─ PWM输出,可配脉宽和周期
─ 多通道PWM组合输出,可产生有相互关系的多路PWM
─ 单脉冲/重触发单脉冲模式输出
● 主从模式
─ 支持多GPT互连,可在作为主设备产生控制信号的同时,作为从设备被外部输入或其它主设备控制
─ 控制模式包括复位、触发、门控等
─ 支持多GPT同步启动、复位等
● 编码模式输入,控制计数器向上/向下计数
● 如下事件发生时产生中断/DMA:
─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较

SF32LB55X/56/58X的HCPU有两个GPT,分别是GPT1和GPT2,LCPU有三个GPT,分别是GPT3,GPT4和GPT5。

GPT的接口

主要分成以下几组:

  • 时钟的基本函数,包括初始化,启动,停止
  • 利用时钟输出电平
  • 利用时钟输出波形 (PWM)
  • 利用时钟采集输出电平
  • 利用时钟生成脉冲 GPT的详细接口,请参考Hardware Timer

使用GPT

以下是GPT基本函数的使用:

{
GPT_HandleTypeDef TIM_Handle = {0};
TIM_Handle.Instance = GPTIM1; // Use GPTIM1
TIM_Handle.Init.Prescaler = HAL_RCC_GetPCLKFreq(GPTIM1_CORE, 1) / 1000 - 1; // Set prescaler
TIM_Handle.core = GPTIM1_CORE; // Clock source is from GPTIM1_CORE
TIM_Handle.Init.CounterMode = GPT_COUNTERMODE_DOWN; // Count down
TIM_Handle.Init.RepetitionCounter = 0; // One shot
HAL_GPT_Base_Init(&TIM_Handle); // Initialize Timer
HAL_NVIC_SetPriority(GPTIM1_IRQn, 3, 0); // Set the TIMx priority
HAL_NVIC_EnableIRQ(GPTIM1_IRQn); // Enable the TIMx global Interrupt
__HAL_GPT_SET_AUTORELOAD(&TIM_Handle, 1500); // Set timeout counter, based on Prescaler, it is 1.5 second
__HAL_GPT_SET_MODE(&TIM_Handle,GPT_OPMODE_SINGLE); // Set timer to single mode
HAL_GPT_Base_Start_IT(&TIM_Handle); // Start timer.
...
}
void GPTIM1_IRQHandler(void)
{
HAL_GPT_IRQHandler(&TIM_Handle);
}
{
printf("Timeout\n");
}

以下是GPT PWM的使用, 在rtos/rtthread/bsp/drv_pwm.c中还有更多的PWM的使用可以作为参考。

GPT_HandleTypeDef TIM_Handle = {0};
GPT_OC_InitTypeDef oc_config = {0};
GPT_ClockConfigTypeDef clock_config = {0};
TIM_Handle.Init.Prescaler = 0;
TIM_Handle.Init.CounterMode = GPT_COUNTERMODE_UP;
TIM_Handle.Init.Period = 0;
HAL_GPT_Base_Init(&TIM_Handle); // Initialize GPT handle
clock_config.ClockSource = GPT_CLOCKSOURCE_INTERNAL;
HAL_GPT_ConfigClockSource(&TIM_Handle, &clock_config) != HAL_OK) // Configure the clock source
HAL_GPT_PWM_Init(&TIM_Handle); // Initialize for PWM
oc_config.OCMode = GPT_OCMODE_PWM1;
oc_config.Pulse = 0;
oc_config.OCPolarity = GPT_OCPOLARITY_HIGH;
oc_config.OCFastMode = GPT_OCFAST_DISABLE;
HAL_GPT_PWM_ConfigChannel(tim, &oc_config, GPT_CHANNEL_1); // Configure PWM output to channel 1
__HAL_GPT_SET_AUTORELOAD(htim, period - 1); // Configure duty cycle number
HAL_GPT_GenerateEvent(htim, GPT_EVENTSOURCE_UPDATE); // Update frequency value
HAL_GPT_PWM_Start(htim, GPT_CHANNEL_1); // Start PWM
HAL_OK
@ HAL_OK
Definition: bf0_hal_def.h:75
__HAL_GPT_SET_MODE
#define __HAL_GPT_SET_MODE(__HANDLE__, __MODE__)
Set the TIM single mode.
Definition: bf0_hal_tim.h:1140
HAL_GPT_GenerateEvent
HAL_StatusTypeDef HAL_GPT_GenerateEvent(GPT_HandleTypeDef *htim, uint32_t EventSource)
Generate a software event.
GPT_ClockConfigTypeDef::ClockSource
uint32_t ClockSource
Definition: bf0_hal_tim.h:224
HAL_RCC_GetPCLKFreq
uint32_t HAL_RCC_GetPCLKFreq(int core_id, int is_pclk1)
Get PCLK freq.
HAL_GPT_Base_Init
HAL_StatusTypeDef HAL_GPT_Base_Init(GPT_HandleTypeDef *htim)
Initializes the TIM Time base Unit according to the specified parameters in the GPT_HandleTypeDef and...
GPT_Base_InitTypeDef::CounterMode
uint32_t CounterMode
Definition: bf0_hal_tim.h:79
GPT_OC_InitTypeDef::OCPolarity
uint32_t OCPolarity
Definition: bf0_hal_tim.h:108
HAL_GPT_Base_Start_IT
HAL_StatusTypeDef HAL_GPT_Base_Start_IT(GPT_HandleTypeDef *htim)
Starts the TIM Base generation in interrupt mode.
GPT_OC_InitTypeDef::OCFastMode
uint32_t OCFastMode
Definition: bf0_hal_tim.h:115
GPT_ClockConfigTypeDef
Clock Configuration Handle Structure definition.
Definition: bf0_hal_tim.h:223
GPT_HandleTypeDef
TIM Time Base Handle Structure definition.
Definition: bf0_hal_tim.h:318
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Set the priority of an interrupt.
GPT_OC_InitTypeDef::Pulse
uint32_t Pulse
Definition: bf0_hal_tim.h:105
HAL_GPT_ConfigClockSource
HAL_StatusTypeDef HAL_GPT_ConfigClockSource(GPT_HandleTypeDef *htim, GPT_ClockConfigTypeDef *sClockSourceConfig)
Configures the clock source to be used.
GPT_Base_InitTypeDef::RepetitionCounter
uint32_t RepetitionCounter
Definition: bf0_hal_tim.h:86
HAL_GPT_PWM_ConfigChannel
HAL_StatusTypeDef HAL_GPT_PWM_ConfigChannel(GPT_HandleTypeDef *htim, GPT_OC_InitTypeDef *sConfig, uint32_t Channel)
Initializes the TIM PWM channels according to the specified parameters in the GPT_OC_InitTypeDef.
__HAL_GPT_SET_AUTORELOAD
#define __HAL_GPT_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__)
Sets the TIM Autoreload Register value on runtime without calling another time any Init function.
Definition: bf0_hal_tim.h:1220
HAL_NVIC_EnableIRQ
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
Enable a device specific interrupt in the NVIC interrupt controller.
HAL_GPT_PeriodElapsedCallback
void HAL_GPT_PeriodElapsedCallback(GPT_HandleTypeDef *htim)
HW timer periodical timeout call back.
GPT_OC_InitTypeDef::OCMode
uint32_t OCMode
Definition: bf0_hal_tim.h:102
GPT_Base_InitTypeDef::Period
uint32_t Period
Definition: bf0_hal_tim.h:82
GPT_HandleTypeDef::core
uint8_t core
Definition: bf0_hal_tim.h:325
HAL_GPT_IRQHandler
void HAL_GPT_IRQHandler(GPT_HandleTypeDef *htim)
This function handles TIM interrupts requests.
GPT_HandleTypeDef::Init
GPT_Base_InitTypeDef Init
Definition: bf0_hal_tim.h:320
HAL_GPT_PWM_Init
HAL_StatusTypeDef HAL_GPT_PWM_Init(GPT_HandleTypeDef *htim)
Initializes the TIM PWM Time Base according to the specified parameters in the GPT_HandleTypeDef and ...
HAL_GPT_PWM_Start
HAL_StatusTypeDef HAL_GPT_PWM_Start(GPT_HandleTypeDef *htim, uint32_t Channel)
Starts the PWM signal generation.
GPT_OC_InitTypeDef
TIM Output Compare Configuration Structure definition.
Definition: bf0_hal_tim.h:101
GPT_Base_InitTypeDef::Prescaler
uint32_t Prescaler
Definition: bf0_hal_tim.h:76
GPT_HandleTypeDef::Instance
GPT_TypeDef * Instance
Definition: bf0_hal_tim.h:319