rt-thread-official/bsp/essemi/es8p508x/libraries/Library/Source/lib_timer.c

570 lines
18 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***************************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
*文件名: lib_timer.c
*作 者: Liut
*版 本: V1.00
*日 期: 2017/07/14
*描 述: 定时器模块库函数
*备 注: 适用于 ES8P508x芯片
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
***************************************************************/
#include "lib_timer.h"
/***************************************************************
函数名T16Nx_BaseInit
描 述T16Nx基本初始化
输入值T16Nx可以是T16N0/1/2/3 、TIM_BaseInitStruct初始化配置结构体地址
输出值:无
返回值:无
***************************************************************/
void T16Nx_BaseInit(T16N_TypeDef* T16Nx,TIM_BaseInitStruType* TIM_BaseInitStruct)
{
T16Nx->CON0.CS = TIM_BaseInitStruct->TIM_ClkS;
T16Nx->CON0.SYNC = TIM_BaseInitStruct->TIM_SYNC;
T16Nx->CON0.EDGE = TIM_BaseInitStruct->TIM_EDGE;
T16Nx->CON0.MOD = TIM_BaseInitStruct->TIM_Mode;
}
/***************************************************************
函数名T32Nx_BaseInit
描 述T32Nx基本初始化
输入值T32Nx可以是T32N0 、TIM_BaseInitStruct初始化配置结构体地址
输出值:无
返回值:无
***************************************************************/
void T32Nx_BaseInit(T32N_TypeDef* T32Nx,TIM_BaseInitStruType* TIM_BaseInitStruct)
{
T32Nx->CON0.CS = TIM_BaseInitStruct->TIM_ClkS;
T32Nx->CON0.SYNC = TIM_BaseInitStruct->TIM_SYNC;
T32Nx->CON0.EDGE = TIM_BaseInitStruct->TIM_EDGE;
T32Nx->CON0.MOD = TIM_BaseInitStruct->TIM_Mode;
}
/***************************************************************
函数名T16Nx_CapInit
描 述T16Nx捕捉初始化
输入值T16Nx可以是T16N0/1/2/3、 TIM_CapInitStruct初始化配置结构体地址
输出值:无
返回值:无
***************************************************************/
void T16Nx_CapInit(T16N_TypeDef* T16Nx,TIM_CapInitStruType* TIM_CapInitStruct)
{
T16Nx->CON1.CAPPE = TIM_CapInitStruct->TIM_CapRise;
T16Nx->CON1.CAPNE = TIM_CapInitStruct->TIM_CapFall;
T16Nx->CON1.CAPIS0 = TIM_CapInitStruct->TIM_CapIS0;
T16Nx->CON1.CAPIS1 = TIM_CapInitStruct->TIM_CapIS1;
T16Nx->CON1.CAPT = TIM_CapInitStruct->TIM_CapTime;
}
/***************************************************************
函数名T32Nx_CapInit
描 述T32Nx捕捉初始化
输入值T32Nx可以是T32N0、 TIM_CapInitStruct初始化配置结构体地址
输出值:无
返回值:无
***************************************************************/
void T32Nx_CapInit(T32N_TypeDef* T32Nx,TIM_CapInitStruType* TIM_CapInitStruct)
{
T32Nx->CON1.CAPPE = TIM_CapInitStruct->TIM_CapRise;
T32Nx->CON1.CAPNE = TIM_CapInitStruct->TIM_CapFall;
T32Nx->CON1.CAPIS0 = TIM_CapInitStruct->TIM_CapIS0;
T32Nx->CON1.CAPIS1 = TIM_CapInitStruct->TIM_CapIS1;
T32Nx->CON1.CAPT = TIM_CapInitStruct->TIM_CapTime;
}
/***************************************************************
函数名T16Nx_MATxITConfig
描 述T16Nx匹配后的工作模式配置
输入值T16Nx可以是T16N0/1/2/3、 Type匹配后的工作模式
输出值:无
返回值:无
***************************************************************/
void T16Nx_MAT0ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type)
{
T16Nx->CON0.MAT0S = Type;
}
void T16Nx_MAT1ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type)
{
T16Nx->CON0.MAT1S = Type;
}
void T16Nx_MAT2ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type)
{
T16Nx->CON0.MAT2S = Type;
}
void T16Nx_MAT3ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_MATCON Type)
{
T16Nx->CON0.MAT3S = Type;
}
/***************************************************************
函数名T32Nx_MATxITConfig
描 述T32Nx匹配后的工作模式配置
输入值T32Nx可以是T32N0、 Type匹配后的工作模式
输出值:无
返回值:无
***************************************************************/
void T32Nx_MAT0ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type)
{
T32Nx->CON0.MAT0S = Type;
}
void T32Nx_MAT1ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type)
{
T32Nx->CON0.MAT1S = Type;
}
void T32Nx_MAT2ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type)
{
T32Nx->CON0.MAT2S = Type;
}
void T32Nx_MAT3ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_MATCON Type)
{
T32Nx->CON0.MAT3S = Type;
}
/***************************************************************
函数名T16Nx_MATxOutxConfig
描 述T16Nx匹配后的输出端口的模式配置
输入值T16Nx可以是T16N0/1/2/3 、 Type匹配后端口的工作模式
输出值:无
返回值:无
***************************************************************/
void T16Nx_MAT0Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type)
{
T16Nx->CON2.MOM0 = Type;
}
void T16Nx_MAT1Out0Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type)
{
T16Nx->CON2.MOM1 = Type;
}
void T16Nx_MAT2Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type)
{
T16Nx->CON2.MOM2 = Type;
}
void T16Nx_MAT3Out1Config(T16N_TypeDef* T16Nx,TIM_TYPE_MATOUT Type)
{
T16Nx->CON2.MOM3 = Type;
}
/***************************************************************
函数名T32Nx_MATxOutxConfig
描 述T32Nx匹配后的输出端口的模式配置
输入值T32Nx可以是T32N0 、 Type匹配后端口的工作模式
输出值:无
返回值:无
***************************************************************/
void T32Nx_MAT0Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type)
{
T32Nx->CON2.MOM0 = Type;
}
void T32Nx_MAT1Out0Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type)
{
T32Nx->CON2.MOM1 = Type;
}
void T32Nx_MAT2Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type)
{
T32Nx->CON2.MOM2 = Type;
}
void T32Nx_MAT3Out1Config(T32N_TypeDef* T32Nx,TIM_TYPE_MATOUT Type)
{
T32Nx->CON2.MOM3 = Type;
}
/***************************************************************
函数名T16Nx_ITConfig
描 述T16N中断配置
输入值T16Nx可以是T16N0/1/2/3、 Type中断类型 、 NewState使能/失能
输出值:无
返回值:无
***************************************************************/
void T16Nx_ITConfig(T16N_TypeDef* T16Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState)
{
if (NewState != DISABLE)
T16Nx->IE.Word |= (uint32_t)Type;
else
T16Nx->IE.Word &= (~(uint32_t)Type);
}
/***************************************************************
函数名T32Nx_ITConfig
描 述T32N中断配置
输入值T32Nx可以是T32N0、 Type中断类型 、 NewState使能/失能
输出值:无
返回值:无
***************************************************************/
void T32Nx_ITConfig(T32N_TypeDef* T32Nx,TIM_TYPE_IT Type,TYPE_FUNCEN NewState)
{
if (NewState != DISABLE)
T32Nx->IE.Word|= (uint32_t)Type;
else
T32Nx->IE.Word &= (~(uint32_t)Type);
}
/***************************************************************
函数名T16Nx_PWMOutConfig
描 述T16N0OUT0,T16N1OUT0、T16N2OUT0、T16N3OUT0 输出配置。原理为使用uart的脉宽调制因此不能与uart同时使用。
输入值:
输出值:无
返回值:无
***************************************************************/
void T16Nx_PWMOutConfig(T16N_TypeDef* T16Nx,T16Nx_PWMInitStruType* T16Nx_PWMInitStruct)
{
T16Nx->CON2.MOE0 = T16Nx_PWMInitStruct->T16Nx_MOE0; //配置输出端口0是否使能
T16Nx->CON2.MOE1 = T16Nx_PWMInitStruct->T16Nx_MOE1; //配置输出端口1是否使能
T16Nx->CON2.POL0 = T16Nx_PWMInitStruct->T16Nx_POL0; //配置T16NxOut0输出极性
T16Nx->CON2.POL1 = T16Nx_PWMInitStruct->T16Nx_POL1; //配置T16NxOut1输出极性
}
/***************************************************************
函数名T16Nx_PWMBK_Config
描 述配置PWM刹车功能
输入值T16Nx可以是T16N0/1/2/3 ,Type 配置PWM刹车结构体
输出值:无
返回值:无
***************************************************************/
void T16Nx_PWMBK_Config(T16N_TypeDef* T16Nx,T16Nx_PWMBK_Type* type)
{
T16Nx->CON2.PBKL0 = type->T16Nx_PWMBKL0; //PWM通道0刹车输出电平选择
T16Nx->CON2.PBKL1 = type->T16Nx_PWMBKL1; //PWM通道1刹车输出电平选择
T16Nx->CON2.PBKS = type->T16Nx_PWMBKS; //PWM信号源选择
T16Nx->CON2.PBKPS = type->T16Nx_PWMBKPS; //PWM通道刹车信号极性选择
T16Nx->CON2.PBKEN = type->T16Nx_PWMBKEN; //PWM通道刹车使能
}
/***************************************************************
函数名T16Nx_TRG_Config
描 述: 配置T16N ADC触发使能
输入值T16Nx可以是T16N0/1/2/3
输出值:无
返回值:无
***************************************************************/
void T16Nx_TRG_Config(T16N_TypeDef* T16Nx,T16Nx_PWMTRG_type Type,TYPE_FUNCEN NewState)
{
if(Type == T16Nx_MAT0)
T16Nx->TRG.MAT0TAR = 1;
else if(Type == T16Nx_MAT1)
T16Nx->TRG.MAT1TAR = 1;
else if(Type == T16Nx_MAT2)
T16Nx->TRG.MAT2TAR = 1;
else if(Type == T16Nx_MAT3)
T16Nx->TRG.MAT3TAR = 1;
T16Nx->TRG.OVTAR = NewState;
}
/***************************************************************
函数名T16Nx_GetPWMBKF
描 述获取PWMBKF刹车标志位
输入值T16Nx可以是T16N0/1/2/3
输出值PWMBKF标志位的值。SET发生刹车事件RESET未发生刹车事件
返回值:无
***************************************************************/
FlagStatus T16Nx_GetPWMBKF(T16N_TypeDef* T16Nx)
{
if(T16Nx->CON2.PBKF == 1)
return SET;
else
return RESET;
}
/***************************************************************
函数名T16Nx_ResetPWMBKF
描 述: 清除PWMBKF标志标志清除后PWM端口恢复正常shuc
输入值T16Nx可以是T16N0/1/2/3
输出值:无
返回值:无
***************************************************************/
void T16Nx_ResetPWMBKF(T16N_TypeDef* T16Nx)
{
T16Nx->CON2.PBKF = 1;
}
/***************************************************************
函数名T16Nx_SetCNT
描 述:设置计数值
输入值T16Nx可以是T16N0/1/2/3、 Value16位数值
输出值:无
返回值:无
***************************************************************/
void T16Nx_SetCNT(T16N_TypeDef* T16Nx,uint16_t Value)
{
T16Nx->CNT.CNT = Value;
}
/***************************************************************
函数名T32Nx_SetCNT
描 述:设置计数值
输入值T32Nx可以是T32N0、 Value32位数值16位时右对齐
输出值:无
返回值:无
***************************************************************/
void T32Nx_SetCNT(T32N_TypeDef* T32Nx,uint32_t Value)
{
T32Nx->CNT.CNT = Value;
}
/***************************************************************
函数名T16Nx_SetPRECNT
描 述:设置预分频计数寄存器值
输入值T16Nx可以是T16N0/1/2/3 、 Value8位数值
输出值:无
返回值:无
***************************************************************/
void T16Nx_SetPRECNT(T16N_TypeDef* T16Nx,uint8_t Value)
{
T16Nx->PRECNT.PRECNT = Value;
}
/***************************************************************
函数名T32Nx_SetPRECNT
描 述:设置预分频计数寄存器值
输入值T32Nx可以是T32N0、 Value8位数值
输出值:无
返回值:无
***************************************************************/
void T32Nx_SetPRECNT(T32N_TypeDef* T32Nx,uint8_t Value)
{
T32Nx->PRECNT.PRECNT = Value - 1;
}
/***************************************************************
函数名T16Nx_SetPREMAT
描 述:设置预分频计数匹配寄存器值
输入值T16Nx可以是T16N0/1/2/3、 Value8位数值
输出值:无
返回值:无
***************************************************************/
void T16Nx_SetPREMAT(T16N_TypeDef* T16Nx,uint8_t Value)
{
T16Nx->PREMAT.PREMAT = Value - 1;
}
/***************************************************************
函数名T32Nx_SetPREMAT
描 述:设置预分频计数匹配寄存器值
输入值T32Nx可以是T32N0、 、 Value8位数值
输出值:无
返回值:无
***************************************************************/
void T32Nx_SetPREMAT(T32N_TypeDef* T32Nx,uint8_t Value)
{
T32Nx->PREMAT.PREMAT = Value - 1;
}
/***************************************************************
函数名T16Nx_SetMATx
描 述:设置匹配寄存器
输入值T16Nx可以是T16N0/1/2/3、 MATx可以是TIM_MAT0/1/2/3 、 Value16位数值
输出值:无
返回值:无
***************************************************************/
void T16Nx_SetMAT0(T16N_TypeDef* T16Nx,uint16_t Value)
{
T16Nx->MAT0.MAT0 = Value;
}
void T16Nx_SetMAT1(T16N_TypeDef* T16Nx,uint16_t Value)
{
T16Nx->MAT1.MAT1 = Value;
}
void T16Nx_SetMAT2(T16N_TypeDef* T16Nx,uint16_t Value)
{
T16Nx->MAT2.MAT2 = Value;
}
void T16Nx_SetMAT3(T16N_TypeDef* T16Nx,uint16_t Value)
{
T16Nx->MAT3.MAT3 = Value;
}
/***************************************************************
函数名T32Nx_SetMATx
描 述:设置匹配寄存器
输入值T32Nx可以是T32N0、 MATx可以是TIM_MAT0/1/2/3 、 Value32位数值
输出值:无
返回值:无
***************************************************************/
void T32Nx_SetMAT0(T32N_TypeDef* T32Nx,uint32_t Value)
{
T32Nx->MAT0.MAT0 = Value;
}
void T32Nx_SetMAT1(T32N_TypeDef* T32Nx,uint32_t Value)
{
T32Nx->MAT1.MAT1 = Value;
}
void T32Nx_SetMAT2(T32N_TypeDef* T32Nx,uint32_t Value)
{
T32Nx->MAT2.MAT2 = Value;
}
void T32Nx_SetMAT3(T32N_TypeDef* T32Nx,uint32_t Value)
{
T32Nx->MAT3.MAT3 = Value;
}
/***************************************************************
函数名T16Nx_GetMATx
描 述:读取匹配寄存器值
输入值T16Nx可以是T16N0/1/2/3
输出值:无
返回值16位数值
***************************************************************/
uint16_t T16Nx_GetMAT0(T16N_TypeDef* T16Nx)
{
return (T16Nx->MAT0.MAT0);
}
uint16_t T16Nx_GetMAT1(T16N_TypeDef* T16Nx)
{
return (T16Nx->MAT1.MAT1);
}
uint16_t T16Nx_GetMAT2(T16N_TypeDef* T16Nx)
{
return (T16Nx->MAT2.MAT2);
}
uint16_t T16Nx_GetMAT3(T16N_TypeDef* T16Nx)
{
return (T16Nx->MAT3.MAT3);
}
/***************************************************************
函数名T32Nx_GetMATx
描 述:读取匹配寄存器值
输入值T32Nx可以是T32N0/3 MATx可以是TIM_MAT0/1/2/3
输出值:无
返回值32位数值
***************************************************************/
uint32_t T32Nx_GetMAT0(T32N_TypeDef* T32Nx)
{
return (T32Nx->MAT0.MAT0);
}
uint32_t T32Nx_GetMAT1(T32N_TypeDef* T32Nx)
{
return (T32Nx->MAT1.MAT1);
}
uint32_t T32Nx_GetMAT2(T32N_TypeDef* T32Nx)
{
return (T32Nx->MAT2.MAT2);
}
uint32_t T32Nx_GetMAT3(T32N_TypeDef* T32Nx)
{
return (T32Nx->MAT3.MAT3);
}
/***************************************************************
函数名T16Nx_GetCNT
描 述:读取计数寄存器值
输入值T16Nx可以是T16N0/1/2/3、
返回值16位数值
***************************************************************/
uint16_t T16Nx_GetCNT(T16N_TypeDef* T16Nx)
{
return (T16Nx->CNT.CNT);
}
/***************************************************************
函数名T32Nx_GetCNT
描 述:读取计数寄存器值
输入值T32Nx可以是T32N0/3、
返回值16/32位数值
***************************************************************/
uint32_t T32Nx_GetCNT(T32N_TypeDef* T32Nx)
{
return (T32Nx->CNT.CNT);
}
/***************************************************************
函数名T16Nx_GetPRECNT
描 述:读取预分频计数寄存器值
输入值T16Nx可以是T16N0/1/2/3
输出值:无
返回值8位数值
***************************************************************/
uint8_t T16Nx_GetPRECNT(T16N_TypeDef* T16Nx)
{
return (uint8_t)(T16Nx->PRECNT.PRECNT);
}
/***************************************************************
函数名T32Nx_GetPRECNT
描 述:读取预分频计数寄存器值
输入值T32Nx可以是T32N0
输出值:无
返回值8位数值
***************************************************************/
uint8_t T32Nx_GetPRECNT(T32N_TypeDef* T32Nx)
{
return (uint8_t)(T32Nx->PRECNT.PRECNT);
}
/***************************************************************
函数名T16Nx_GetFlagStatus
描 述:读取指定标志位
输入值T16Nx可以是T16N0/1/2/3、 TIM_Flag中断标志位
输出值:无
返回值RESET/SET
***************************************************************/
FlagStatus T16Nx_GetFlagStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag)
{
FlagStatus bitstatus = RESET;
if((T16Nx->IF.Word & (uint32_t)TIM_Flag) != (uint32_t)RESET)
bitstatus = SET;
else
bitstatus = RESET;
return bitstatus;
}
/***************************************************************
函数名T32Nx_GetFlagStatus
描 述:读取指定标志位
输入值T32Nx可以是T32N0、、 TIM_Flag中断标志位
输出值:无
返回值RESET/SET
***************************************************************/
FlagStatus T32Nx_GetFlagStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag)
{
FlagStatus bitstatus = RESET;
if((T32Nx->IF.Word & (uint32_t)TIM_Flag) != (uint32_t)RESET)
bitstatus = SET;
else
bitstatus = RESET;
return bitstatus;
}
/***************************************************************
函数名T16Nx_GetITStatus
描 述:读取指定中断标志位,未使能相应中断时不会返回SET
输入值T16Nx可以是T16N0/1/2/3、 TIM_Flag中断标志位
输出值:无
返回值RESET/SET
***************************************************************/
ITStatus T16Nx_GetITStatus(T16N_TypeDef* T16Nx,TIM_TYPE_IT TIM_Flag)
{
ITStatus bitstatus = RESET;
uint32_t itstatus = 0x0, itenable = 0x0;
itstatus = T16Nx->IF.Word & (uint32_t)TIM_Flag;
itenable = T16Nx->IE.Word & (uint32_t)TIM_Flag;
if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET))
bitstatus = SET;
else
bitstatus = RESET;
return bitstatus;
}
/***************************************************************
函数名T32Nx_GetITStatus
描 述:读取指定中断标志位,未使能相应中断时不会返回SET
输入值T32Nx可以是T32N0、 TIM_Flag中断标志位
输出值:无
返回值RESET/SET
***************************************************************/
ITStatus T32Nx_GetITStatus(T32N_TypeDef* T32Nx,TIM_TYPE_IT TIM_Flag)
{
ITStatus bitstatus = RESET;
uint32_t itstatus = 0x0, itenable = 0x0;
itstatus = T32Nx->IF.Word & (uint32_t)TIM_Flag;
itenable = T32Nx->IE.Word & (uint32_t)TIM_Flag;
if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET))
bitstatus = SET;
else
bitstatus = RESET;
return bitstatus;
}
/***************************************************************
函数名T16Nx_ClearIFPendingBit
描 述:清除指定的中断标志位
输入值T16Nx可以是T16N0/1/2/3、 TIM_Flag中断标志位
输出值:无
返回值:无
***************************************************************/
void T16Nx_ClearIFPendingBit(T16N_TypeDef* T16Nx,TIM_TYPE_IF TIM_Flag)
{
T16Nx->IF.Word = (uint32_t)TIM_Flag;
}
/***************************************************************
函数名T32Nx_ClearIFPendingBit
描 述:清除指定的中断标志位
输入值T32Nx可以是T32N0、 TIM_Flag中断标志位
输出值:无
返回值:无
***************************************************************/
void T32Nx_ClearIFPendingBit(T32N_TypeDef* T32Nx,TIM_TYPE_IF TIM_Flag)
{
T32Nx->IF.Word = (uint32_t)TIM_Flag;
}
/*************************END OF FILE**********************/