 |
思澈科技软件开发工具包
2.20
|
|
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基本函数的使用:
{
TIM_Handle.
core = GPTIM1_CORE;
...
}
void GPTIM1_IRQHandler(void)
{
}
{
printf("Timeout\n");
}
以下是GPT PWM的使用, 在rtos/rtthread/bsp/drv_pwm.c中还有更多的PWM的使用可以作为参考。
oc_config.
OCMode = GPT_OCMODE_PWM1;
@ HAL_OK
Definition: bf0_hal_def.h:75
#define __HAL_GPT_SET_MODE(__HANDLE__, __MODE__)
Set the TIM single mode.
Definition: bf0_hal_tim.h:1140
HAL_StatusTypeDef HAL_GPT_GenerateEvent(GPT_HandleTypeDef *htim, uint32_t EventSource)
Generate a software event.
uint32_t ClockSource
Definition: bf0_hal_tim.h:224
uint32_t HAL_RCC_GetPCLKFreq(int core_id, int is_pclk1)
Get PCLK freq.
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...
uint32_t CounterMode
Definition: bf0_hal_tim.h:79
uint32_t OCPolarity
Definition: bf0_hal_tim.h:108
HAL_StatusTypeDef HAL_GPT_Base_Start_IT(GPT_HandleTypeDef *htim)
Starts the TIM Base generation in interrupt mode.
uint32_t OCFastMode
Definition: bf0_hal_tim.h:115
Clock Configuration Handle Structure definition.
Definition: bf0_hal_tim.h:223
TIM Time Base Handle Structure definition.
Definition: bf0_hal_tim.h:318
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Set the priority of an interrupt.
uint32_t Pulse
Definition: bf0_hal_tim.h:105
HAL_StatusTypeDef HAL_GPT_ConfigClockSource(GPT_HandleTypeDef *htim, GPT_ClockConfigTypeDef *sClockSourceConfig)
Configures the clock source to be used.
uint32_t RepetitionCounter
Definition: bf0_hal_tim.h:86
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.
#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
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
Enable a device specific interrupt in the NVIC interrupt controller.
void HAL_GPT_PeriodElapsedCallback(GPT_HandleTypeDef *htim)
HW timer periodical timeout call back.
uint32_t OCMode
Definition: bf0_hal_tim.h:102
uint32_t Period
Definition: bf0_hal_tim.h:82
uint8_t core
Definition: bf0_hal_tim.h:325
void HAL_GPT_IRQHandler(GPT_HandleTypeDef *htim)
This function handles TIM interrupts requests.
GPT_Base_InitTypeDef Init
Definition: bf0_hal_tim.h:320
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_StatusTypeDef HAL_GPT_PWM_Start(GPT_HandleTypeDef *htim, uint32_t Channel)
Starts the PWM signal generation.
TIM Output Compare Configuration Structure definition.
Definition: bf0_hal_tim.h:101
uint32_t Prescaler
Definition: bf0_hal_tim.h:76
GPT_TypeDef * Instance
Definition: bf0_hal_tim.h:319