/****************************************************************************************** * Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd. * 文件名: lib_timer.h * 作 者: Liut * 版 本: V1.00 * 日 期: 2017/07/14 * 描 述: 16位定时器/计数器、32位定时器/计数器库函数头文件 * 备 注: 适用于ES8P508x系列芯片 * 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。 *******************************************************************************************/ #ifndef __LIBTIMER_H__ #define __LIBTIMER_H__ #include "ES8P508x.h" #include "type.h" /* 时钟源选择 */ typedef enum { TIM_ClkS_PCLK = 0x0 , //时钟源选择:内部PCLK TIM_ClkS_CK0 = 0x1 , //时钟源选择:外部CK0时钟输入 TIM_ClkS_CK1 = 0x2 , //时钟源选择:外部CK1时钟输入 }TIM_TYPE_CLKS; /* 外部时钟计数边沿选择 */ typedef enum { TIM_EDGE_Rise = 0x0 , //外部时钟计数边沿选择:上升沿 TIM_EDGE_Fall = 0x1 , //外部时钟计数边沿选择:下降沿 TIM_EDGE_All = 0x2 , //外部时钟计数边沿选择:所有 }TIM_TYPE_EDGE; /* 工作模式选择 */ typedef enum { TIM_Mode_TC0 = 0x0 , //工作模式:定时、计数模式 TIM_Mode_TC1 = 0x1 , //工作模式:定时、计数模式 TIM_Mode_CAP = 0x2 , //工作模式:捕捉模式 TIM_Mode_PWM = 0x3 , //工作模式:调制模式 }TIM_TYPE_MODE; /* TIM初始化配置结构体定义 */ typedef struct { TIM_TYPE_CLKS TIM_ClkS; //时钟源选择 TYPE_FUNCEN TIM_SYNC; //外部时钟同步 TIM_TYPE_EDGE TIM_EDGE; //外部时钟计数边沿选择 TIM_TYPE_MODE TIM_Mode; //工作模式选择 }TIM_BaseInitStruType; /* 匹配寄存器值匹配后的工作模式 */ typedef enum { TIM_Go_No = 0x0 , //匹配寄存器值匹配后的工作模式:继续计数,不产生中断 TIM_Hold_Int = 0x1 , //匹配寄存器值匹配后的工作模式:保持计数,产生中断 TIM_Clr_Int = 0x2 , //匹配寄存器值匹配后的工作模式:清零并重新计数,产生中断 TIM_Go_Int = 0x3 , //匹配寄存器值匹配后的工作模式:继续计数,产生中断 }TIM_TYPE_MATCON; /* 匹配寄存器值匹配后输出端口的工作模式 */ typedef enum { TIM_Out_Hold = 0x0 , //匹配寄存器值匹配后输出端口的工作模式:保持 TIM_Out_Low = 0x1 , //匹配寄存器值匹配后输出端口的工作模式:清0 TIM_Out_High = 0x2 , //匹配寄存器值匹配后输出端口的工作模式:置1 TIM_Out_Switch = 0x3 , //匹配寄存器值匹配后输出端口的工作模式:取反 }TIM_TYPE_MATOUT; /* 捕捉次数控制 */ typedef enum { TIM_CapTime_1 = 0x0 , //捕捉次数控制:1 TIM_CapTime_2 = 0x1 , //捕捉次数控制:2 TIM_CapTime_3 = 0x2 , //捕捉次数控制:3 TIM_CapTime_4 = 0x3 , //捕捉次数控制:4 TIM_CapTime_5 = 0x4 , //捕捉次数控制:5 TIM_CapTime_6 = 0x5 , //捕捉次数控制:6 TIM_CapTime_7 = 0x6 , //捕捉次数控制:7 TIM_CapTime_8 = 0x7 , //捕捉次数控制:8 TIM_CapTime_9 = 0x8 , //捕捉次数控制:9 TIM_CapTime_10 = 0x9 , //捕捉次数控制:10 TIM_CapTime_11 = 0xA , //捕捉次数控制:11 TIM_CapTime_12 = 0xB , //捕捉次数控制:12 TIM_CapTime_13 = 0xC , //捕捉次数控制:13 TIM_CapTime_14 = 0xD , //捕捉次数控制:14 TIM_CapTime_15 = 0xE , //捕捉次数控制:15 TIM_CapTime_16 = 0xF , //捕捉次数控制:16 }TIM_TYPE_CAPT; /* PWM输出极性类型 */ typedef enum { POSITIVE = 0X00, //正极性 NEGATIVE = 0X01, //负极性 }T16Nx_PWMOUT_POLAR_Type; /* 调制功能初始化结构体定义 */ 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_PWMInitStruType; /* 捕捉功能初始化结构体定义 */ typedef struct { TYPE_FUNCEN TIM_CapRise; //上升沿捕捉使能 TYPE_FUNCEN TIM_CapFall; //下降沿捕捉使能 TYPE_FUNCEN TIM_CapIS0; //输入端口0使能 TYPE_FUNCEN TIM_CapIS1; //输入端口1使能 TIM_TYPE_CAPT TIM_CapTime; //捕捉次数控制 }TIM_CapInitStruType; /* 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 enum { PWMBKPS_PINT0 = 0, PWMBKPS_PINT1 = 1, PWMBKPS_PINT2 = 2, PWMBKPS_PINT3 = 3, PWMBKPS_PINT4 = 4, PWMBKPS_PINT5 = 5, PWMBKPS_PINT6 = 6, PWMBKPS_PINT7 = 7, }T16Nx_PWMBKP_S; /*PWM输出刹车控制*/ typedef struct { T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBKL0; //PWM通道0刹车输出电平选择 T16Nx_PWMBKOUT_LEVEl T16Nx_PWMBKL1; //PWM通道1刹车输出电平选择 T16Nx_PWMBKP_S T16Nx_PWMBKS; //PWM通道信号源选择 T16Nx_PWMBKP_LEVEl T16Nx_PWMBKPS; //PWM通道刹车信号极性选择 TYPE_FUNCEN T16Nx_PWMBKEN; //PWM刹车使能 }T16Nx_PWMBK_Type; /* 中断配置 */ typedef enum { TIM_IT_MAT0 = 0x01 , TIM_IT_MAT1 = 0x02 , TIM_IT_MAT2 = 0x04 , TIM_IT_MAT3 = 0x08 , TIM_IT_N = 0x10 , TIM_IT_CAP0 = 0x20 , TIM_IT_CAP1 = 0x40 , TIM_IT_PBK = 0x80 , }TIM_TYPE_IT; typedef enum { TIM_IF_MAT0 = 0x01 , TIM_IF_MAT1 = 0x02 , TIM_IF_MAT2 = 0x04 , TIM_IF_MAT3 = 0x08 , TIM_IF_N = 0x10 , TIM_IF_CAP0 = 0x20 , TIM_IF_CAP1 = 0x40 , TIM_IF_PBK = 0x80 , }TIM_TYPE_IF; /* 匹配寄存器 */ typedef enum { TIM_MAT0 = 0x00 , TIM_MAT1 = 0x01 , TIM_MAT2 = 0x02 , TIM_MAT3 = 0x03 , }TIM_TYPE_MATX; /*T16N ADC触发使能控制*/ typedef enum { T16Nx_MAT0 = 0x02, //PWM通道0匹配0触发使能 T16Nx_MAT1 = 0x04, //PWM通道0匹配1触发使能 T16Nx_MAT2 = 0x20, //PWM通道1匹配2触发使能 T16Nx_MAT3 = 0x40, //PWM通道1匹配3触发使能 }T16Nx_PWMTRG_type; /*************TIM模块宏定义************/ /* TIM模块使能控制 */ #define T16N0_Enable() (T16N0->CON0.EN = 1) #define T16N1_Enable() (T16N1->CON0.EN = 1) #define T16N2_Enable() (T16N2->CON0.EN = 1) #define T16N3_Enable() (T16N3->CON0.EN = 1) #define T32N0_Enable() (T32N0->CON0.EN = 1) #define T16N0_Disable() (T16N0->CON0.EN = 0) #define T16N1_Disable() (T16N1->CON0.EN = 0) #define T16N2_Disable() (T16N2->CON0.EN = 0) #define T16N3_Disable() (T16N3->CON0.EN = 0) #define T32N0_Disable() (T32N0->CON0.EN = 0) /* 异步写使能控制 */ #define T16N0_ASYNCWR_Enable() (T16N0->CON0.ASYWEN = 1) #define T16N1_ASYNCWR_Enable() (T16N1->CON0.ASYWEN = 1) #define T16N2_ASYNCWR_Enable() (T16N2->CON0.ASYWEN = 1) #define T16N3_ASYNCWR_Enable() (T16N3->CON0.ASYWEN = 1) #define T32N0_ASYNCWR_Enable() (T32N0->CON0.ASYNCWREN = 1) #define T16N0_ASYNCWR_Disable() (T16N0->CON0.ASYWEN= 0) #define T16N1_ASYNCWR_Disable() (T16N1->CON0.ASYWEN = 0) #define T16N2_ASYNCWR_Disable() (T16N2->CON0.ASYWEN = 0) #define T16N3_ASYNCWR_Disable() (T16N3->CON0.ASYWEN = 0) #define T32N0_ASYNCWR_Disable() (T32N0->CON0.ASYNCWREN = 0) /* PWM输出使能控制 */ #define T16N0_PwmOut0_Enable() (T16N0->CON2.MOE0 = 1) #define T16N1_PwmOut0_Enable() (T16N1->CON2.MOE0 = 1) #define T16N2_PwmOut0_Enable() (T16N2->CON2.MOE0 = 1) #define T16N3_PwmOut0_Enable() (T16N3->CON2.MOE0 = 1) #define T32N0_PwmOut0_Enable() (T32N0->CON2.MOE0 = 1) #define T16N0_PwmOut1_Enable() (T16N0->CON2.MOE1 = 1) #define T16N1_PwmOut1_Enable() (T16N1->CON2.MOE1 = 1) #define T16N2_PwmOut1_Enable() (T16N2->CON2.MOE1 = 1) #define T16N3_PwmOut1_Enable() (T16N3->CON2.MOE1 = 1) #define T32N0_PwmOut1_Enable() (T32N0->CON2.MOE1 = 1) #define T16N0_PwmOut0_Disable() (T16N0->CON2.MOE0 = 0) #define T16N1_PwmOut0_Disable() (T16N1->CON2.MOE0 = 0) #define T16N2_PwmOut0_Disable() (T16N2->CON2.MOE0 = 0) #define T16N3_PwmOut0_Disable() (T16N3->CON2.MOE0 = 0) #define T32N0_PwmOut0_Disable() (T32N0->CON2.MOE0 = 0) #define T16N0_PwmOut1_Disable() (T16N0->CON2.MOE1 = 0) #define T16N1_PwmOut1_Disable() (T16N1->CON2.MOE1 = 0) #define T16N2_PwmOut1_Disable() (T16N2->CON2.MOE1 = 0) #define T16N3_PwmOut1_Disable() (T16N3->CON2.MOE1 = 0) #define T32N0_PwmOut1_Disable() (T32N0->CON2.MOE1 = 0) /************T16模块函数声明***********/ void T16Nx_BaseInit(T16N_TypeDef* T16Nx,TIM_BaseInitStruType* TIM_BaseInitStruct); void T16Nx_CapInit(T16N_TypeDef* T16Nx,TIM_CapInitStruType* TIM_CapInitStruct); void T16Nx_MAT0ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type); void T16Nx_MAT1ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type); void T16Nx_MAT2ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type); void T16Nx_MAT3ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type); void T16Nx_MAT0Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type); void T16Nx_MAT1Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type); void T16Nx_MAT2Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type); void T16Nx_MAT3Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type); void T16Nx_ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState); void T16Nx_PWMOutConfig(T16N_TypeDef* T16Nx,T16Nx_PWMInitStruType* T16Nx_PWMInitStruct); void T16Nx_PWMBK_Config(T16N_TypeDef* T16Nx,T16Nx_PWMBK_Type* type); void T16Nx_TRG_Config(T16N_TypeDef* T16Nx,T16Nx_PWMTRG_type Type,TYPE_FUNCEN NewState); FlagStatus T16Nx_GetPWMBKF(T16N_TypeDef* T16Nx); void T16Nx_ResetPWMBKF(T16N_TypeDef* T16Nx); void T16Nx_SetCNT(T16N_TypeDef* T16Nx,uint16_t Value); void T16Nx_SetPRECNT(T16N_TypeDef* T16Nx,uint8_t Value); void T16Nx_SetPREMAT(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); 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_GetCNT(T16N_TypeDef* T16Nx); uint8_t T16Nx_GetPRECNT(T16N_TypeDef* T16Nx); FlagStatus T16Nx_GetFlagStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag); ITStatus T16Nx_GetITStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IT TIM_Flag); void T16Nx_ClearIFPendingBit(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag); /************************************T32模块函数声明********************************************************/ void T32Nx_BaseInit(T32N_TypeDef* T32Nx,TIM_BaseInitStruType* TIM_BaseInitStruct); void T32Nx_CapInit(T32N_TypeDef* T32Nx,TIM_CapInitStruType* TIM_CapInitStruct); void T32Nx_MAT0ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type); void T32Nx_MAT1ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type); void T32Nx_MAT2ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type); void T32Nx_MAT3ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type); void T32Nx_MAT0Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type); void T32Nx_MAT1Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type); void T32Nx_MAT2Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type); void T32Nx_MAT3Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type); void T32Nx_ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState); void T32Nx_SetCNT(T32N_TypeDef* T16Nx,uint32_t Value); void T32Nx_SetPRECNT(T32N_TypeDef* T32Nx,uint8_t Value); void T32Nx_SetPREMAT(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); uint8_t T32Nx_GetPRECNT(T32N_TypeDef* T32Nx); FlagStatus T32Nx_GetFlagStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag); ITStatus T32Nx_GetITStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IT TIM_Flag); void T32Nx_ClearIFPendingBit(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag); #endif /*************************END OF FILE**********************/