⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 周立功2103开发板CD资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************************
** 文件名称: Time.c
** 文件描述: LPC2103 定时器操作软件包。
******************************************************************************************/
#include "config.h"

/*********************************************************************************************************
** 函数名称: uint8	T0CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
** 功能描述: 定时器0捕获模式初始化
** 输 入: 	CAP_MODE	捕获方式,按位操作方式。
**						bit0:1--CAP上跳沿捕获
**						bit1:1--CAP下降沿捕获
**			CAPn		捕获通道选择,0~2
**			Int_En		中断使能
**						0:发生捕获事件时,不产生中断
**						1:发生捕获事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:函数中已经包含了引脚设置。
********************************************************************************************************/
uint8	T0CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
{
	if(CAP_MODE>3)	return(0);	//参数不合理,直接返回
	if(CAPn>3)		return(0);
	if(Int_En>1)	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;
	}
	T0TCR = 0x03;				//在设置之前,先将定时器复位
	T0IR = T0IR|(1<<(CAPn+4));	//清除中断标志位
	//设置捕获控制寄存器,不会影响其它位
	T0CCR = (T0CCR&(~(3<<(CAPn*3))))|(CAP_MODE<<(CAPn*3))|(Int_En<<(CAPn*3+2));	
	//           相关位清零               捕获方式位              中断位
	T0TCR = 0x01;				//启动定时器
	return(1); 	
}
/*********************************************************************************************************
** 函数名称: uint8	T1CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
** 功能描述: 定时器1捕获模式初始化
** 输 入: 	CAP_MODE	捕获方式,按位操作方式。
**						bit0:1--CAP上跳沿捕获
**						bit1:1--CAP下降沿捕获
**			CAPn		捕获通道选择,0~3
**			Int_En		中断使能
**						0:发生捕获事件时,不产生中断
**						1:发生捕获事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:函数中已经包含了引脚设置。
********************************************************************************************************/
uint8	T1CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
{
	if(CAP_MODE>3)	return(0);	//参数不合理,直接返回
	if(CAPn>3)		return(0);
	if(Int_En>1)	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;
	}
	T1TCR = 0x03;				//在设置之前,先将定时器复位
	T1IR = T1IR|(1<<(CAPn+4));	//清除中断标志位
	//设置捕获控制寄存器,不会影响其它位
	T1CCR = (T1CCR&(~(3<<(CAPn*3))))|(CAP_MODE<<(CAPn*3))|(Int_En<<(CAPn*3+2));	
	//           相关位清零               捕获方式位              中断位
	T1TCR = 0x01;				//启动定时器
	return(1); 
}
/*********************************************************************************************************
** 函数名称: uint8	T2CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
** 功能描述: 定时器1捕获模式初始化
** 输 入: 	CAP_MODE	捕获方式,按位操作方式。
**						bit0:1--CAP上跳沿捕获
**						bit1:1--CAP下降沿捕获
**			CAPn		捕获通道选择,0~2
**			Int_En		中断使能
**						0:发生捕获事件时,不产生中断
**						1:发生捕获事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:函数中已经包含了引脚设置。
********************************************************************************************************/
uint8	T2CAP_Init(uint8 CAP_MODE,uint8 CAPn,uint8 Int_En)
{
	if(CAP_MODE>3)	return(0);	//参数不合理,直接返回
	if(CAPn>2)		return(0);
	if(Int_En>1)	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;
	}
	T2TCR = 0x03;				//在设置之前,先将定时器复位
	T2IR = T2IR|(1<<(CAPn+4));	//清除中断标志位
	//设置捕获控制寄存器,不会影响其它位
	T2CCR = (T2CCR&(~(3<<(CAPn*3))))|(CAP_MODE<<(CAPn*3))|(Int_En<<(CAPn*3+2));	
	//           相关位清零               捕获方式位              中断位
	T2TCR = 0x01;				//启动定时器
	return(1); 
}
/*********************************************************************************************************
** 函数名称: uint8	T0MAT_Init(uint32 time,uint32 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
** 功能描述: 定时器0匹配模式初始化
** 输 入: 	time		匹配时间,该值会直接写入到匹配寄存器中
**			PR_data		预分频寄存器的值
**			T_MODE		匹配控制模式
**						0:匹配时,定时器复位
**						1:匹配时,定时器停止
**			EXT_MODE	匹配时,外部输出控制
**						0:不执行任何动作
**						1:外部匹配输出0
**						2:外部匹配输出1
**						3:外部匹配输出翻转
**			MATn		匹配通道选择,0~2
**			Int_En		中断使能
**						0:发生匹配事件时,不产生中断
**						1:发生匹配事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:使用中,如果匹配时,匹配引脚有动作,那么,程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8	T0MAT_Init(uint32 time,uint32 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
{
	if(T_MODE>1)	return(0);	//参数不合理,直接返回
	if(EXT_MODE>3)	return(0);
	if(MATn>3)		return(0);
	if(Int_En>1)	return(0);
	if(EXT_MODE)					//设置相关引脚
	{
		switch(MATn)					
		{
			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<<MATn);				//清除中断标志位
	T0PR = PR_data;						//设置预分频器 
	*(uint32 *)((&T0MR0)+MATn) = time;	//设置匹配寄存器
	T0MCR = T0MCR&(~(7<<(MATn*3)))|(1<<(MATn*3+1+T_MODE))|(Int_En<<(MATn*3));
	//          相关位清零           定时器匹配控制位          中断位
	T0EMR = T0EMR&(~(3<<(MATn*2+4)))|(EXT_MODE<<(MATn*2+4));
	T0TCR = 0x01;						//重新启动定时器
	return(1);
}
/*********************************************************************************************************
** 函数名称: uint8	T1MAT_Init(uint32 time,uint32 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
** 功能描述: 定时器1匹配模式初始化
** 输 入: 	time		匹配时间,该值会直接写入到匹配寄存器中
**			PR_data		预分频寄存器的值
**			T_MODE		匹配控制模式
**						0:匹配时,定时器复位
**						1:匹配时,定时器停止
**			EXT_MODE	匹配时,外部输出控制
**						0:不执行任何动作
**						1:外部匹配输出0
**						2:外部匹配输出1
**						3:外部匹配输出翻转
**			MATn		匹配通道选择,0~3
**			Int_En		中断使能
**						0:发生匹配事件时,不产生中断
**						1:发生匹配事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:使用中,如果匹配时,匹配引脚有动作,那么,程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8	T1MAT_Init(uint32 time,uint32 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
{
	if(T_MODE>1)	return(0);	//参数不合理,直接返回
	if(EXT_MODE>3)	return(0);
	if(MATn>3)		return(0);
	if(Int_En>1)	return(0);	
	if(EXT_MODE)				//设置相关引脚
	{
		switch(MATn)					
		{
			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<<MATn);				//清除中断标志位
	T1PR = PR_data;						//设置预分频器
	*(uint32 *)((&T1MR0)+MATn) = time;	//设置匹配寄存器
	T1MCR = T1MCR&(~(7<<(MATn*3)))|(1<<(MATn*3+1+T_MODE))|(Int_En<<(MATn*3));
	//          相关位清零           定时器匹配控制位          中断位
	T1EMR = T1EMR&(~(3<<(MATn*2+4)))|(EXT_MODE<<(MATn*2+4));
	T1TCR = 0x01;						//启动定时器
	return(1);
}
/*********************************************************************************************************
** 函数名称: uint8	T2MAT_Init(uint16 time,uint16 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
** 功能描述: 定时器0匹配模式初始化
** 输 入: 	time		匹配时间,该值会直接写入到匹配寄存器中
**			PR_data		预分频寄存器的值
**			T_MODE		匹配控制模式
**						0:匹配时,定时器复位
**						1:匹配时,定时器停止
**			EXT_MODE	匹配时,外部输出控制
**						0:不执行任何动作
**						1:外部匹配输出0
**						2:外部匹配输出1
**						3:外部匹配输出翻转
**			MATn		匹配通道选择,0~2
**			Int_En		中断使能
**						0:发生匹配事件时,不产生中断
**						1:发生匹配事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:使用中,如果匹配时,匹配引脚有动作,那么,程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8	T2MAT_Init(uint16 time,uint16 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
{
	if(T_MODE>1)	return(0);		//参数不合理,直接返回
	if(EXT_MODE>3)	return(0);
	if(MATn>3)		return(0);
	if(Int_En>1)	return(0);
	if(EXT_MODE)					//设置相关引脚
	{
		switch(MATn)					
		{
			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<<MATn);				//清除中断标志位
	T2PR = PR_data;						//设置预分频器
	*(uint32 *)((&T2MR0)+MATn) = time;	//设置匹配寄存器
	T2MCR = T2MCR&(~(7<<(MATn*3)))|(1<<(MATn*3+1+T_MODE))|(Int_En<<(MATn*3));
	//          相关位清零           定时器匹配控制位          中断位
	T2EMR = T2EMR&(~(3<<(MATn*2+4)))|(EXT_MODE<<(MATn*2+4));
	T2TCR = 0x01;						//重新启动定时器
	return(1);
}
/*********************************************************************************************************
** 函数名称: uint8	T3MAT_Init(uint16 time,uint16 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
** 功能描述: 定时器0匹配模式初始化
** 输 入: 	time		匹配时间,该值会直接写入到匹配寄存器中
**			PR_data		预分频寄存器的值
**			T_MODE		匹配控制模式
**						0:匹配时,定时器复位
**						1:匹配时,定时器停止
**			EXT_MODE	匹配时,外部输出控制
**						0:不执行任何动作
**						1:外部匹配输出0
**						2:外部匹配输出1
**						3:外部匹配输出翻转
**			MATn		匹配通道选择,0~3
**			Int_En		中断使能
**						0:发生匹配事件时,不产生中断
**						1:发生匹配事件时,产生中断
** 输 出: 0 :初始化失败
**         1 :初始化成功
** 说明:使用中,如果匹配时,匹配引脚有动作,那么,程序中已经将相关引脚进行了初始化
********************************************************************************************************/
uint8	T3MAT_Init(uint16 time,uint16 PR_data,uint8 T_MODE,uint8 EXT_MODE,uint8 MATn,uint8 Int_En)
{
	if(T_MODE>1)	return(0);		//参数不合理,直接返回
	if(EXT_MODE>3)	return(0);
	if(MATn>3)		return(0);
	if(Int_En>1)	return(0);
	if(EXT_MODE)					//设置相关引脚
	{
		switch(MATn)					
		{
			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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -