📄 time.c
字号:
}
}
T3TCR = 0x03; //在设置之前,先将定时器复位
T3IR = T3IR|(1<<MATn); //清除中断标志位
T3PR = PR_data; //设置预分频器
*(uint32 *)((&T3MR0)+MATn) = time; //设置匹配寄存器
T3MCR = T3MCR&(~(7<<(MATn*3)))|(1<<(MATn*3+1+T_MODE))|(Int_En<<(MATn*3));
// 相关位清零 定时器匹配控制位 中断位
T3EMR = T3EMR&(~(3<<(MATn*2+4)))|(EXT_MODE<<(MATn*2+4));
T3TCR = 0x01; //重新启动定时器
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T0COUNT_Init(uint8 MODE,uint8 CAPn)
** 功能描述: 计数器0初始化
** 输 入: MODE 计数器模式选择
** 0:CAPn的上升沿计数
** 1:CAPn的下降沿计数
** 2:CAPn上升沿和下降沿都计数
** CAPn 计数器输入端0~2
** 输 出: 0 :初始化失败
** 1 :初始化成功
** 说明:程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8 T0COUNT_Init(uint8 MODE,uint8 CAPn)
{
if(MODE>2) return(0); //参数不合理,直接返回
if(CAPn>3) return(0);
switch(CAPn) //设置相关引脚
{
case 0: //CAP0.0--P0.2
PINSEL0 = PINSEL0 & (~(3<<4)) | (2<<4);
break;
case 1: //CAP0.1--P0.4
PINSEL0 = PINSEL0 & (~(3<<8)) | (2<<8);
break;
case 2: //CAP0.2--P0.6
PINSEL0 = PINSEL0 & (~(3<<12)) | (2<<12);
break;
default:
break;
}
T0CTCR = (CAPn<<2)+MODE+1;
T0TCR = 0x03;
T0TCR = 0x01;
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T1COUNT_Init(uint8 MODE,uint8 CAPn)
** 功能描述: 计数器1初始化
** 输 入: MODE 计数器模式选择
** 0:CAPn的上升沿计数
** 1:CAPn的下降沿计数
** 2:CAPn上升沿和下降沿都计数
** CAPn 计数器输入端0~3
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8 T1COUNT_Init(uint8 MODE,uint8 CAPn)
{
if(MODE>2) return(0); //参数不合理,直接返回
if(CAPn>3) return(0);
switch(CAPn) //设置相关引脚
{
case 0: //CAP1.0--P0.10
PINSEL0 = PINSEL0 & (~(3<<20)) | (2<<20);
break;
case 1: //CAP1.1--P0.11
PINSEL0 = PINSEL0 & (~(3<<22)) | (2<<22);
break;
case 2: //CAP1.2--P0.17
PINSEL1 = PINSEL1 & (~(3<<2)) | (2<<2);
break;
case 3: //CAP1.2--P0.18
PINSEL1 = PINSEL1 & (~(3<<4)) | (2<<4);
break;
default:
break;
}
T1CTCR = (CAPn<<2)+MODE+1;
T1TCR = 0x03;
T1TCR = 0x01;
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T2COUNT_Init(uint8 MODE,uint8 CAPn)
** 功能描述: 计数器2初始化
** 输 入: MODE 计数器模式选择
** 0:CAPn的上升沿计数
** 1:CAPn的下降沿计数
** 2:CAPn上升沿和下降沿都计数
** CAPn 计数器输入端0~2
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8 T2COUNT_Init(uint8 MODE,uint8 CAPn)
{
if(MODE>2) return(0); //参数不合理,直接返回
if(CAPn>2) return(0);
switch(CAPn) //设置相关引脚
{
case 0: //CAP2.0--P0.27
PINSEL1 = PINSEL1 & (~(3<<22)) | (2<<22);
break;
case 1: //CAP2.1--P0.28
PINSEL1 = PINSEL1 & (~(3<<24)) | (2<<24);
break;
case 2: //CAP2.2--P0.29
PINSEL1 = PINSEL1 & (~(3<<26)) | (2<<26);
break;
default:
break;
}
T2CTCR = (CAPn<<2)+MODE+1;
T2TCR = 0x03;
T2TCR = 0x01;
return(1);
}
/*********************************************************************************************************
** 函数名称: void Timer0_Init(void)
** 功能描述: 定时器0初始化
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void Timer0_Init(void)
{
T0CTCR = 0x00; //停止定时器
T0TCR = 0x03; //复位定时器
T0TCR = 0x01; //启动定时器
}
/*********************************************************************************************************
** 函数名称: void Timer1_Init(void)
** 功能描述: 定时器1初始化
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void Timer1_Init(void)
{
T1CTCR = 0x00; //停止定时器
T1TCR = 0x03; //复位定时器
T1TCR = 0x01; //启动定时器
}
/*********************************************************************************************************
** 函数名称: void Timer2_Init(void)
** 功能描述: 定时器2初始化
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void Timer2_Init(void)
{
T2CTCR = 0x00; //停止定时器
T2TCR = 0x03; //复位定时器
T2TCR = 0x01; //启动定时器
}
/*********************************************************************************************************
** 函数名称: void Timer3_Init(void)
** 功能描述: 定时器3初始化
** 输 入: 无
** 输 出: 无
********************************************************************************************************/
void Timer3_Init(void)
{
T3CTCR = 0x00; //停止定时器
T3TCR = 0x03; //复位定时器
T3TCR = 0x01; //启动定时器
}
/*********************************************************************************************************
** 函数名称: uint8 T0PWM_Init(uint8 PWMn,uint32 MATn,uint32 PR_data,uint32 PWM_Cyc)
** 功能描述: 定时器0的PWM功能初始化。
** 输 入: PWMn PWM模式使能号
** 0 PWM模式使能于MAT0.0
** 1 PWM模式使能于MAT0.1
** 2 PWM模式使能于MAT0.2
** MATn_Value PWM匹配寄存器,该数值直接写入到MAT0.n中
** PR_data 预分频寄存器的值
** PWM_Cyc PWM的周期控制值,该数值会直接写入到MAT0.3中
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:函数中包含了对相应引脚的初始化。
********************************************************************************************************/
uint8 T0PWM_Init(uint32 PWMn,uint32 MATn_Value,uint32 PR_data,uint32 PWM_Cyc)
{
if(PWMn>3) return(0); //参数不合理,直接返回
switch(PWMn) //设置相关引脚
{
case 0: //设置MAT0.0--P0.3
PINSEL0 = PINSEL0 & (~(3<<6)) | (2<<6);
break;
case 1: //设置MAT0.1--P0.5
PINSEL0 = PINSEL0 & (~(3<<10)) | (2<<10);
break;
case 2: //设置MAT0.2--P0.16
PINSEL1 = PINSEL1 & (~0x03) | 0x02;
break;
default:
break;
}
T0TCR = 0x03; //在设置之前,先将定时器复位
T0IR = T0IR|(1<<PWMn); //清除中断标志位
T0PR = PR_data; //设置预分频器
PWM0CON = PWM0CON | (1<<PWMn); //使能相应PWM模式位
*(uint32 *)((&T0MR0)+PWMn) = MATn_Value; //设置匹配寄存器
T0MR3 = PWM_Cyc;
T0MCR = (1<<10); //MR3匹配时,定时器复位
T0TCR = 0x01; //重新启动定时器
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T1PWM_Init(uint8 PWMn,uint32 MATn,uint32 PR_data,uint32 PWM_Cyc)
** 功能描述: 定时器1的PWM功能初始化。
** 输 入: PWMn PWM模式使能号
** 0 PWM模式使能于MAT1.0
** 1 PWM模式使能于MAT1.1
** 2 PWM模式使能于MAT1.2
** 3 PWM模式使能于MAT1.3
** MATn_Value PWM匹配寄存器,该数值直接写入到MAT1.n中
** PR_data 预分频寄存器的值
** PWM_Cyc PWM的周期控制值,该数值会直接写入到MAT1.3中
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:函数中包含了对相应引脚的初始化。
********************************************************************************************************/
uint8 T1PWM_Init(uint8 PWMn,uint32 MATn_Value,uint32 PR_data,uint32 PWM_Cyc)
{
if(PWMn>3) return(0); //参数不合理,直接返回
switch(PWMn) //设置相关引脚
{
case 0: //设置MAT1.0--P0.12
PINSEL0 = PINSEL0 & (~(3<<24)) | (2<<24);
break;
case 1: //设置MAT1.1--P0.13
PINSEL0 = PINSEL0 & (~(3<<26)) | (2<<26);
break;
case 2: //设置MAT1.2--P0.19
PINSEL1 = PINSEL1 & (~(3<<6)) | (2<<6);
break;
case 3: //设置MAT1.3--P0.20
PINSEL1 = PINSEL1 & (~(3<<8)) | (2<<8);
break;
default:
break;
}
T1TCR = 0x03; //在设置之前,先将定时器复位
T1IR = T1IR|(1<<PWMn); //清除中断标志位
T1PR = PR_data; //设置预分频器
PWM1CON = PWM1CON | (1<<PWMn); //使能相应PWM模式位
*(uint32 *)((&T1MR0)+PWMn) = MATn_Value; //设置匹配寄存器
T1MR3 = PWM_Cyc;
T1MCR = (1<<10); //MR3匹配时,定时器复位
T1TCR = 0x01; //重新启动定时器
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T2PWM_Init(uint8 PWMn,uint16 MATn,uint16 PR_data,uint32 PWM_Cyc)
** 功能描述: 定时器2的PWM功能初始化。
** 输 入: PWMn PWM模式使能号
** 0 PWM模式使能于MAT2.0
** 1 PWM模式使能于MAT2.1
** 2 PWM模式使能于MAT2.2
** MATn_Value PWM匹配寄存器,该数值直接写入到MAT2.n中
** PR_data 预分频寄存器的值
** PWM_Cyc PWM的周期控制值,该数值会直接写入到MAT2.3中
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:函数中包含了对相应引脚的初始化。
********************************************************************************************************/
uint8 T2PWM_Init(uint8 PWMn,uint16 MATn_Value,uint16 PR_data,uint32 PWM_Cyc)
{
if(PWMn>3) return(0); //参数不合理,直接返回
switch(PWMn)
{
case 0: //设置MAT2.0--P0.7
PINSEL0 = PINSEL0 & (~(3<<14)) | (2<<14);
break;
case 1: //设置MAT2.1--P0.8
PINSEL0 = PINSEL0 & (~(3<<16)) | (2<<16);
break;
case 2: //设置MAT2.2--P0.9
PINSEL0 = PINSEL0 & (~(3<<18)) | (2<<18);
break;
default:
break;
}
T2TCR = 0x03; //在设置之前,先将定时器复位
T2IR = T2IR|(1<<PWMn); //清除中断标志位
T2PR = PR_data; //设置预分频器
PWM2CON = PWM2CON | (1<<PWMn); //使能相应PWM模式位
*(uint32 *)((&T2MR0)+PWMn) = MATn_Value; //设置匹配寄存器
T2MR3 = PWM_Cyc;
T2MCR = (1<<10); //MR3匹配时,定时器复位
T2TCR = 0x01; //重新启动定时器
return(1);
}
/*********************************************************************************************************
** 函数名称: uint8 T3PWM_Init(uint8 PWMn,uint16 MATn_Value,uint16 PR_data,uint32 PWM_Cyc)
** 功能描述: 定时器3的PWM功能初始化。
** 输 入: PWMn PWM模式使能号
** 0 PWM模式使能于MAT3.0
** 1 PWM模式使能于MAT3.1
** 2 PWM模式使能于MAT3.2
** 3 PWM模式使能于MAT3.3
** MATn_Value PWM匹配寄存器,该数值直接写入到MAT3.n中
** PR_data 预分频寄存器的值
** PWM_Cyc PWM的周期控制值,该数值会直接写入到MAT3.3中
** 输 出: 0 初始化失败
** 1 初始化成功
** 说明:函数中包含了对相应引脚的初始化。
********************************************************************************************************/
uint8 T3PWM_Init(uint8 PWMn,uint16 MATn_Value,uint16 PR_data,uint32 PWM_Cyc)
{
if(PWMn>3) return(0); //参数不合理,直接返回
switch(PWMn)
{
case 0: //设置MAT3.0--P0.21
PINSEL1 = PINSEL1 & (~(3<<10)) | (2<<10);
break;
case 1: //设置MAT3.1--P0.0
PINSEL0 = PINSEL0 & (~0x03) | 0x02;
break;
case 2: //设置MAT3.2--P0.1
PINSEL0 = PINSEL0 & (~(3<<2)) | (2<<2);
break;
case 3: //设置MAT3.3--P0.30
PINSEL1 = PINSEL1 & (~(3<<28)) | (2<<28);
break;
default:
break;
}
T3TCR = 0x03; //在设置之前,先将定时器复位
T3IR = T3IR|(1<<PWMn); //清除中断标志位
T3PR = PR_data; //设置预分频器
PWM3CON = PWM3CON | (1<<PWMn); //使能相应PWM模式位
*(uint32 *)((&T3MR0)+PWMn) = MATn_Value; //设置匹配寄存器
T3MR3 = PWM_Cyc;
T3MCR = (1<<10); //MR3匹配时,定时器复位
T3TCR = 0x01; //重新启动定时器
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -