You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

397 lines
16 KiB

/*********************************************************
*Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
*文件名: lib_timer.h
*作 者: AE Team
*版 本: V1.01
*日 期: 2021/06/09
*描 述: Timer模块库函数头文件
*备 注:
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
**********************************************************/
#ifndef __LIB_TIMER_H__
#define __LIB_TIMER_H__
#include <stdint.h>
#include "ES8P5066.h"
#include "type.h"
#include "system_ES8P5066.h"
/* 时钟源选择 */
typedef enum
{
T16Nx_ClkS_PCLK = 0x0, /* 时钟源选择:内部PCLK */
T16Nx_ClkS_CK0 = 0x1, /* 时钟源选择:外部CK0时钟输入 */
T16Nx_ClkS_CK1 = 0x2, /* 时钟源选择:外部CK1时钟输入 */
} T16Nx_TYPE_CLKS;
/* 外部时钟计数边沿选择 */
typedef enum
{
T16Nx_EDGE_Rise = 0x0, /* 外部时钟计数边沿选择:上升沿 */
T16Nx_EDGE_Fall = 0x1, /* 外部时钟计数边沿选择:下降沿 */
T16Nx_EDGE_All = 0x2, /* 外部时钟计数边沿选择:所有 */
} T16Nx_TYPE_EDGE;
/* 工作模式选择 */
typedef enum
{
T16Nx_Mode_TC0 = 0x0, /* 工作模式:定时、计数模式 */
T16Nx_Mode_TC1 = 0x1, /* 工作模式:定时、计数模式 */
T16Nx_Mode_CAP = 0x2, /* 工作模式:捕捉模式 */
T16Nx_Mode_PWM = 0x3, /* 工作模式:调制模式 */
} T16Nx_TYPE_MODE;
/* T16Nx初始化配置结构体定义 */
typedef struct
{
T16Nx_TYPE_CLKS T16Nx_ClkS; /* 时钟源选择 */
TYPE_FUNCEN T16Nx_SYNC; /* 外部时钟同步 */
T16Nx_TYPE_EDGE T16Nx_EDGE; /* 外部时钟计数边沿选择 */
T16Nx_TYPE_MODE T16Nx_Mode; /* 工作模式选择 */
unsigned int T16Nx_PREMAT; /* 设置预分频比,范围 :0x00-0xFF */
} T16Nx_BaseInitStruType;
/* 捕捉次数控制 */
typedef enum
{
T16Nx_CapTime_1 = 0x0, /* 捕捉次数控制:1 */
T16Nx_CapTime_2 = 0x1, /* 捕捉次数控制:2 */
T16Nx_CapTime_3 = 0x2, /* 捕捉次数控制:3 */
T16Nx_CapTime_4 = 0x3, /* 捕捉次数控制:4 */
T16Nx_CapTime_5 = 0x4, /* 捕捉次数控制:5 */
T16Nx_CapTime_6 = 0x5, /* 捕捉次数控制:6 */
T16Nx_CapTime_7 = 0x6, /* 捕捉次数控制:7 */
T16Nx_CapTime_8 = 0x7, /* 捕捉次数控制:8 */
T16Nx_CapTime_9 = 0x8, /* 捕捉次数控制:9 */
T16Nx_CapTime_10 = 0x9, /* 捕捉次数控制:10 */
T16Nx_CapTime_11 = 0xA, /* 捕捉次数控制:11 */
T16Nx_CapTime_12 = 0xB, /* 捕捉次数控制:12 */
T16Nx_CapTime_13 = 0xC, /* 捕捉次数控制:13 */
T16Nx_CapTime_14 = 0xD, /* 捕捉次数控制:14 */
T16Nx_CapTime_15 = 0xE, /* 捕捉次数控制:15 */
T16Nx_CapTime_16 = 0xF, /* 捕捉次数控制:16 */
} T16Nx_TYPE_CAPT;
/* 捕捉功能初始化结构体定义 */
typedef struct
{
TYPE_FUNCEN T16Nx_CAPCAPL1; /* 捕捉1重载计数器使能 */
TYPE_FUNCEN T16Nx_CAPCAPL0; /* 捕捉0重载计数器使能 */
TYPE_FUNCEN T16Nx_CapRise; /* 上升沿捕捉使能 */
TYPE_FUNCEN T16Nx_CapFall; /* 下降沿捕捉使能 */
TYPE_FUNCEN T16Nx_CapIS0; /* 输入端口0使能 */
TYPE_FUNCEN T16Nx_CapIS1; /* 输入端口1使能 */
T16Nx_TYPE_CAPT T16Nx_CapTime; /* 捕捉次数控制 */
} T16Nx_CapInitStruType;
/* 匹配寄存器值匹配后的工作模式 */
typedef enum
{
T16Nx_Go_No = 0x0, /* 匹配寄存器值匹配后的工作模式:继续计数,不产生中断 */
T16Nx_Hold_Int = 0x1, /* 匹配寄存器值匹配后的工作模式:保持计数,产生中断 */
T16Nx_Clr_Int = 0x2, /* 匹配寄存器值匹配后的工作模式:清零并重新计数,产生中断 */
T16Nx_Go_Int = 0x3, /* 匹配寄存器值匹配后的工作模式:继续计数,产生中断 */
} T16Nx_TYPE_MATCON;
/* 中断配置 */
typedef enum
{
T16Nx_IT_MAT0 = 0x01, /* 匹配0中断 */
T16Nx_IT_MAT1 = 0x02, /* 匹配1中断 */
T16Nx_IT_MAT2 = 0x04, /* 匹配2中断 */
T16Nx_IT_MAT3 = 0x08, /* 匹配3中断 */
T16Nx_IT_TOP0 = 0x10, /* T16N_CNT0匹配计数器峰值中断 */
T16Nx_IT_TOP1 = 0x20, /* T16N_CNT1匹配计数器峰值中断 */
T16Nx_IT_CAP0 = 0x40, /* 输入端口T16NxIN0输入捕捉中断 */
T16Nx_IT_CAP1 = 0x80, /* 输入端口T16NxIN1输入捕捉中断 */
T16Nx_IT_PBK0 = 0x100, /* PWM通道0刹车中断 */
T16Nx_IT_PBK1 = 0x200, /* PWM通道1刹车中断 */
} T16Nx_TYPE_IT;
/* PWM输出极性类型 */
typedef enum
{
POSITIVE = 0x00, /* 正极性 */
NEGATIVE = 0x01, /* 负极性 */
} T16Nx_PWMOUT_POLAR_Type;
/* PWM工作模式选择 */
typedef enum
{
T16Nx_PWMMode_INDEP = 0x0, /* 独立模式 */
T16Nx_PWMMode_SYNC = 0x2, /* 同步模式 */
T16Nx_PWMMode_COMPLE = 0x3, /* 互补模式 */
} T16Nx_PWMTYPE_MODE;
/* 调制功能初始化结构体定义 */
typedef struct
{
TYPE_FUNCEN T16Nx_MOE0; /* 输出端口0使能 */
TYPE_FUNCEN T16Nx_MOE1; /* 输出端口1使能 */
T16Nx_PWMOUT_POLAR_Type T16Nx_POL0; /* T16NxOUT0输出极性选择位 */
T16Nx_PWMOUT_POLAR_Type T16Nx_POL1; /* T16NxOUT1输出极性选择位 */
T16Nx_PWMTYPE_MODE T16Nx_PWMMODE; /* T16PWM输出模式选择 */
TYPE_FUNCEN PWMDZE; /* PWM互补模式死区使能 */
TYPE_FUNCEN REGBUFEN; /* 缓冲寄存器使能 */
} T16Nx_PWMInitStruType;
/* 匹配寄存器值匹配后输出端口的工作模式 */
typedef enum
{
T16Nx_Out_Hold = 0x0, /* 匹配寄存器值匹配后输出端口的工作模式:保持 */
T16Nx_Out_Low = 0x1, /* 匹配寄存器值匹配后输出端口的工作模式:清0 */
T16Nx_Out_High = 0x2, /* 匹配寄存器值匹配后输出端口的工作模式:置1 */
T16Nx_Out_Switch = 0x3, /* 匹配寄存器值匹配后输出端口的工作模式:取反 */
} T16Nx_TYPE_MATOUT;
/* PWM刹车输出电平 */
typedef enum
{
PWMBKOUT_Low = 0,
PWMBKOUT_High = 1,
} T16Nx_PWMBKOUT_LEVEl;
/* PWM刹车信号极性选择 */
typedef enum
{
PWMBKP_High = 0,
PWMBKP_Low = 1,
} T16Nx_PWMBKP_LEVEl;
/*PWM输出刹车控制*/
typedef struct
{
TYPE_FUNCEN T16Nx_PWMBK_EN0; /* PWM通段0刹车使能 */
TYPE_FUNCEN T16Nx_PWMBK_EN1; /* PWM通段0刹车使能 */
T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBK_L0; /* PWM通道0刹车输出电平选择 */
T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBK_L1; /* PWM通道1刹车输出电平选择 */
T16Nx_PWMBKP_LEVEl T16Nx_PWMBK_P0; /* PWM通道0刹车信号极性选择 */
T16Nx_PWMBKP_LEVEl T16Nx_PWMBK_P1; /* PWM通道1刹车信号极性选择 */
} T16Nx_PWMBK_Type;
/*PWM调制模式ADC触发使能控制*/
typedef enum
{
T16Nx_P0MAT0 = 0x02, /* PWM通道0匹配0触发使能 */
T16Nx_P0MAT1 = 0x04, /* PWM通道0匹配1触发使能 */
T16Nx_P0TOP0 = 0x08, /* PWM通道0峰值0触发使能 */
T16Nx_P1MAT2 = 0x20, /* PWM通道1匹配2触发使能 */
T16Nx_P1MAT3 = 0x40, /* PWM通道1匹配3触发使能 */
T16Nx_P1TOP1 = 0x80, /* PWM通道1峰值1触发使能 */
} T16Nx_PWMTRE_type;
/****************************************32位时钟数据结构定义*********************************/
/* 时钟源选择 */
typedef enum
{
T32Nx_ClkS_PCLK = 0x0, /* 时钟源选择:内部PCLK */
T32Nx_ClkS_CK0 = 0x1, /* 时钟源选择:外部CK0时钟输入 */
T32Nx_ClkS_CK1 = 0x2, /* 时钟源选择:外部CK1时钟输入 */
} T32Nx_TYPE_CLKS;
/* 外部时钟计数边沿选择 */
typedef enum
{
T32Nx_EDGE_Rise = 0x0, /* 外部时钟计数边沿选择:上升沿 */
T32Nx_EDGE_Fall = 0x1, /* 外部时钟计数边沿选择:下降沿 */
T32Nx_EDGE_All = 0x2, /* 外部时钟计数边沿选择:所有 */
} T32Nx_TYPE_EDGE;
/* 工作模式选择 */
typedef enum
{
T32Nx_Mode_TC0 = 0x0, /* 工作模式:定时、计数模式 */
T32Nx_Mode_TC1 = 0x1, /* 工作模式:定时、计数模式 */
T32Nx_Mode_CAP = 0x2, /* 工作模式:捕捉模式 */
T32Nx_Mode_PWM = 0x3, /* 工作模式:调制模式 */
} T32Nx_TYPE_MODE;
/* T32Nx初始化配置结构体定义 */
typedef struct
{
T32Nx_TYPE_CLKS T32Nx_ClkS; /* 时钟源选择 */
TYPE_FUNCEN T32Nx_SYNC; /* 外部时钟同步 */
T32Nx_TYPE_EDGE T32Nx_EDGE; /* 外部时钟计数边沿选择 */
T32Nx_TYPE_MODE T32Nx_Mode; /* 工作模式选择 */
unsigned int T32Nx_PREMAT; /* 设置预分频比,范围 :1-256 */
} T32Nx_BaseInitStruType;
/* 捕捉次数控制 */
typedef enum
{
T32Nx_CapTime_1 = 0x0, /* 捕捉次数控制:1 */
T32Nx_CapTime_2 = 0x1, /* 捕捉次数控制:2 */
T32Nx_CapTime_3 = 0x2, /* 捕捉次数控制:3 */
T32Nx_CapTime_4 = 0x3, /* 捕捉次数控制:4 */
T32Nx_CapTime_5 = 0x4, /* 捕捉次数控制:5 */
T32Nx_CapTime_6 = 0x5, /* 捕捉次数控制:6 */
T32Nx_CapTime_7 = 0x6, /* 捕捉次数控制:7 */
T32Nx_CapTime_8 = 0x7, /* 捕捉次数控制:8 */
T32Nx_CapTime_9 = 0x8, /* 捕捉次数控制:9 */
T32Nx_CapTime_10 = 0x9, /* 捕捉次数控制:10 */
T32Nx_CapTime_11 = 0xA, /* 捕捉次数控制:11 */
T32Nx_CapTime_12 = 0xB, /* 捕捉次数控制:12 */
T32Nx_CapTime_13 = 0xC, /* 捕捉次数控制:13 */
T32Nx_CapTime_14 = 0xD, /* 捕捉次数控制:14 */
T32Nx_CapTime_15 = 0xE, /* 捕捉次数控制:15 */
T32Nx_CapTime_16 = 0xF, /* 捕捉次数控制:16 */
} T32Nx_TYPE_CAPT;
/* 捕捉功能初始化结构体定义 */
typedef struct
{
TYPE_FUNCEN T32Nx_CAPCAPL1; /* 捕捉1重载计数器使能 */
TYPE_FUNCEN T32Nx_CAPCAPL0; /* 捕捉0重载计数器使能 */
TYPE_FUNCEN T32Nx_CapRise; /* 上升沿捕捉使能 */
TYPE_FUNCEN T32Nx_CapFall; /* 下降沿捕捉使能 */
TYPE_FUNCEN T32Nx_CapIS0; /* 输入端口0使能 */
TYPE_FUNCEN T32Nx_CapIS1; /* 输入端口1使能 */
T32Nx_TYPE_CAPT T32Nx_CapTime; /* 捕捉次数控制 */
} T32Nx_CapInitStruType;
/* 调制功能初始化结构体定义 */
typedef struct
{
TYPE_FUNCEN T32Nx_MOE0; /* 输出端口0使能 */
TYPE_FUNCEN T32Nx_MOE1; /* 输出端口1使能 */
} T32Nx_PWMInitStruType;
/* 匹配寄存器值匹配后的工作模式 */
typedef enum
{
T32Nx_Go_No = 0x0, /* 匹配寄存器值匹配后的工作模式:继续计数,不产生中断 */
T32Nx_Hold_Int = 0x1, /* 匹配寄存器值匹配后的工作模式:保持计数,产生中断 */
T32Nx_Clr_Int = 0x2, /* 匹配寄存器值匹配后的工作模式:清零并重新计数,产生中断 */
T32Nx_Go_Int = 0x3, /* 匹配寄存器值匹配后的工作模式:继续计数,产生中断 */
} T32Nx_TYPE_MATCON;
/* 匹配寄存器值匹配后输出端口的工作模式 */
typedef enum
{
T32Nx_Out_Hold = 0x0, /* 匹配寄存器值匹配后输出端口的工作模式:保持 */
T32Nx_Out_Low = 0x1, /* 匹配寄存器值匹配后输出端口的工作模式:清0 */
T32Nx_Out_High = 0x2, /* 匹配寄存器值匹配后输出端口的工作模式:置1 */
T32Nx_Out_Switch = 0x3, /* 匹配寄存器值匹配后输出端口的工作模式:取反 */
} T32Nx_TYPE_MATOUT;
/* 中断配置 */
typedef enum
{
T32Nx_IT_MAT0 = 0x01, /* 匹配0中断 */
T32Nx_IT_MAT1 = 0x02, /* 匹配1中断 */
T32Nx_IT_MAT2 = 0x04, /* 匹配2中断 */
T32Nx_IT_MAT3 = 0x08, /* 匹配3中断 */
T32Nx_IT_IT = 0x10, /* T32N匹配0xFFFFFFFF中断使能位 */
T32Nx_IT_CAP0 = 0x20, /* T32N_CNT0匹配计数器峰值中断 */
T32Nx_IT_CAP1 = 0x40, /* T32N_CNT0匹配计数器峰值中断 */
} T32Nx_TYPE_IT;
/*********************T16Nx模块函数声明 *********************/
void T16Nx_BaseInit(T16N_TypeDef *T16Nx, T16Nx_BaseInitStruType *T16Nx_BaseInitStruct);
void T16Nx_CapInit(T16N_TypeDef *T16Nx, T16Nx_CapInitStruType *T16Nx_CapInitStruct);
void T16Nx_PMWOutInit(T16N_TypeDef *T16Nx, T16Nx_PWMInitStruType *T16Nx_PWMInitStruct);
void T16Nx_PWMPDZ_Config(T16N_TypeDef *T16Nx, unsigned int PWM_PDZ_data);
void T16Nx_MAT0ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type);
void T16Nx_MAT1ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type);
void T16Nx_MAT2ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type);
void T16Nx_MAT3ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATCON Type);
void T16Nx_MAT0Out0Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type);
void T16Nx_MAT1Out0Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type);
void T16Nx_MAT2Out1Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type);
void T16Nx_MAT3Out1Config(T16N_TypeDef *T16Nx, T16Nx_TYPE_MATOUT Type);
void T16Nx_ITConfig(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT Type, TYPE_FUNCEN NewState);
void T16Nx_SetCNT0(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetCNT1(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetPREMAT(T16N_TypeDef *T16Nx, uint8_t Value);
void T16Nx_SetPRECNT(T16N_TypeDef *T16Nx, uint8_t Value);
void T16Nx_SetMAT0(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetMAT1(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetMAT2(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetMAT3(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetTOP0(T16N_TypeDef *T16Nx, uint16_t Value);
void T16Nx_SetTOP1(T16N_TypeDef *T16Nx, uint16_t Value);
uint16_t T16Nx_GetMAT0(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetMAT1(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetMAT2(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetMAT3(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetTOP0(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetTOP1(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetCNT0(T16N_TypeDef *T16Nx);
uint16_t T16Nx_GetCNT1(T16N_TypeDef *T16Nx);
FlagStatus T16Nx_GetFlagStatus(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag);
FlagStatus T16Nx_GetITStatus(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT T16Nx_Flag);
void T16Nx_ClearITPendingBit(T16N_TypeDef *T16Nx, T16Nx_TYPE_IT TIM_Flag);
void T16Nx_Enable(T16N_TypeDef *T16Nx);
void T16Nx_Disable(T16N_TypeDef *T16Nx);
void T16Nx_PWMBK_Config(T16N_TypeDef *T16Nx, T16Nx_PWMBK_Type *type);
FlagStatus T16Nx_GetPWMBKF(T16N_TypeDef *T16Nx);
void T16Nx_ResetPWMBKF(T16N_TypeDef *T16Nx);
void T16Nx_PTR_Config(T16N_TypeDef *T16Nx, T16Nx_PWMTRE_type Type, TYPE_FUNCEN NewState);
/***************************32位定时器函数声明********************************/
void T32Nx_BaseInit(T32N_TypeDef *T32Nx, T32Nx_BaseInitStruType *T32Nx_BaseInitStruct);
void T32Nx_CapInit(T32N_TypeDef *T32Nx, T32Nx_CapInitStruType *T32Nx_CapInitStruct);
void T32Nx_PMWOutInit(T32N_TypeDef *T32Nx, T32Nx_PWMInitStruType *T32Nx_PWMInitStruct);
void T32Nx_MAT0ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type);
void T32Nx_MAT1ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type);
void T32Nx_MAT2ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type);
void T32Nx_MAT3ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATCON Type);
void T32Nx_MAT0Out0Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type);
void T32Nx_MAT1Out0Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type);
void T32Nx_MAT2Out1Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type);
void T32Nx_MAT3Out1Config(T32N_TypeDef *T32Nx, T32Nx_TYPE_MATOUT Type);
void T32Nx_ITConfig(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT Type, TYPE_FUNCEN NewState);
void T32Nx_SetCNT(T32N_TypeDef *T32Nx, uint32_t Value);
void T32Nx_SetPREMAT(T32N_TypeDef *T32Nx, uint8_t Value);
void T32Nx_SetPRECNT(T32N_TypeDef *T32Nx, uint8_t Value);
void T32Nx_SetMAT0(T32N_TypeDef *T32Nx, uint32_t Value);
void T32Nx_SetMAT1(T32N_TypeDef *T32Nx, uint32_t Value);
void T32Nx_SetMAT2(T32N_TypeDef *T32Nx, uint32_t Value);
void T32Nx_SetMAT3(T32N_TypeDef *T32Nx, uint32_t Value);
uint32_t T32Nx_GetMAT0(T32N_TypeDef *T32Nx);
uint32_t T32Nx_GetMAT1(T32N_TypeDef *T32Nx);
uint32_t T32Nx_GetMAT2(T32N_TypeDef *T32Nx);
uint32_t T32Nx_GetMAT3(T32N_TypeDef *T32Nx);
uint32_t T32Nx_GetCNT(T32N_TypeDef *T32Nx);
FlagStatus T32Nx_GetFlagStatus(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT T32Nx_Flag);
FlagStatus T32Nx_GetITStatus(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT T32Nx_Flag);
void T32Nx_ClearITPendingBit(T32N_TypeDef *T32Nx, T32Nx_TYPE_IT TIM_Flag);
void T32Nx_Enable(T32N_TypeDef *T32Nx);
void T32Nx_Disable(T32N_TypeDef *T32Nx);
void BUZC_Frequence(uint32_t Frequence, TYPE_FUNCEN sys_buz);
#endif