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

📄 intdocument.c

📁 1 系统简介 与本文档配套的超声波测距模组为 V2.0 版本。 1.1 基本特性与参数指标 超声波传感器谐振频率:40KHz; 模组传感器工作电压:4.5V~9V 模组接口电压:4
💻 C
字号:
//=============================================================
//  文件名称: IntDocument.c
//  实现功能: 各中断服务程序
//  完成日期:  2004,7,20
//==============================================================

#define P_INT_Ctrl				(volatile unsigned int *)0x7010   
#define P_INT_Clear				(volatile unsigned int *)0x7011 
#define P_INT_Ctrl_New			(volatile unsigned int *)0x702d
#define P_Watchdog_Clear		(volatile unsigned int *)0x7012   
#define P_TimerB_Data			(volatile unsigned int *)0x700C   
#define P_TimerB_Ctrl			(volatile unsigned int *)0x700D  

#define M_TIMERA_EN       0x0001	//使能TimerA的配置,计数频率为96KHz
#define M_TIMERA_STOP	  0x0006	//停止TimerA的配置,计数器停止工作

extern unsigned int uiIOB_20Hz_flag;	//IOB01口(即20Hz方波输出口)的状态标识
extern unsigned int uiEXT_EN_flag;		//外部中断使能标识位

extern unsigned int uiMeasure_Index;	//当前测量的次数
extern unsigned int uiResult[4];		//保存测四次测量结果的缓存区

//============================================================= 
// 函数名称:    IRQ6()
// 功能描述:	TMB1/2中断服务程序    程序中设TMB1为16Hz 
//				每62.5ms进行一次测量   每次查询共进行四次测量
// 语法格式:    void IRQ6(void)
// 入口参数:    无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================
void IRQ6(void)__attribute__((ISR));
void IRQ6(void)
{
	int iTemp;				//中量变量
	iTemp = *P_INT_Ctrl;
	if(iTemp&0x0002)
	{
		*P_INT_Clear=0x0002;
		if(uiEXT_EN_flag)
		{//假如上次测量还没有接收到回波信号    出错管理
			*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);	//关掉外部中断
			uiEXT_EN_flag = 0;							//标识位清零
			*P_TimerB_Ctrl = M_TIMERA_STOP;				//同时计数器停止工作
		}
		uiMeasure_Index++;								//自加一
		if(uiMeasure_Index>4)
		{//单次查询已测够四次,可以进行数据处理了
			*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);	//关掉外部中断
			*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0002);	//关掉TMB1的时基中断
			uiEXT_EN_flag = 0;							//标识位清零
			uiIOB_20Hz_flag = 0;
			*P_TimerB_Ctrl = M_TIMERA_STOP;				//同时计数器停止工作
		}
		else
		{
			US_Send200us();								//符合条件,可以进行查询
		}	
	}
}
//============================================================= 
// 函数名称:    IRQ3()
// 功能描述:	外部中断服务程序 
//				得到结果(时间差)并进行初步处理
// 语法格式:    void IRQ3(void)
// 入口参数:    无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================
void IRQ3(void)__attribute__((ISR));
void IRQ3(void)
{
	unsigned int uiTemp;
	unsigned int uiResult1;					//结果的暂存
	unsigned int i;
	
	uiTemp=*P_INT_Ctrl;
	if(uiTemp&0x0100)
	{
		if(uiEXT_EN_flag)
		{
			*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);	//关掉外部中断
			uiEXT_EN_flag = 0;
			uiResult1 = *P_TimerB_Data;					//读取结果
			*P_TimerB_Ctrl = M_TIMERA_STOP;				//同时计数器停止工作
			//对测得的时间差进行初步处理.......
			if(uiMeasure_Index == 1)
			{
				uiResult[0] = uiResult1;	
			}
			else
			{
				i = uiMeasure_Index-1;
				while(i)
				{
					if(uiResult1>uiResult[i-1])
					{
						uiResult[i] = uiResult[i-1];
						uiResult[i-1] = uiResult1;	
					}
					else
					{
						uiResult[i] = uiResult1;
					}
					i--;
				}
			}//end.......
		}
		*P_INT_Clear = 0x0100;
	}
}
//============================================================================================================//
//Program: IRQ45 2Hz中断入口程序   用来清WatchDog
//InPut:   
//OutPut:  
//Date:    2004年6月4日
//			
//============================================================================================================//
void IRQ5(void)__attribute__((ISR));
void IRQ5(void)
{
	unsigned int Int_Temp;
	Int_Temp=*P_INT_Ctrl;
	if((Int_Temp&0x0008)==0x0008)
	{
		*P_Watchdog_Clear=0x0001;
		*P_INT_Clear=0x0008;
	}
}

⌨️ 快捷键说明

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