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

📄 int.h

📁 LF2407的各个模块的测试程序,包含2407里面的所有模块,均已经调试通过,心血所致,希望对大家有所帮助.
💻 H
字号:
void XINT1_INT()//D12中断
{
/*	static UINT i = 0;
	i++;
	Set_LED(i);*/
	
	*XINT1CR = *XINT1CR | 0x8000;//清中断标志
	*IFR = 0x0020;	
	asm(" clrc INTM");//开总中断
	return;
}

void XINT2_INT()
{	
	*XINT2CR = *XINT2CR | 0x8000;//清中断标志
	*IFR = 0x0020;
	asm(" clrc INTM");//开总中断
	return;
}

void Timer2_PINT()
{
/*	int flag;
	static unsigned char PE_data = 1;
	
	flag = *EVAIFRB & 0x0001;
	
	if(flag != 0x0001)
	{
		asm(" clrc INTM");//开总中断
		return;
	}
	
	*T2CNT = 0x00;
	*EVAIFRB &= 0x0001;

	//*********************************************
	Set_LED(PE_data);
	
	PE_data = PE_data << 1;
	if(PE_data == 0x0100)
		PE_data = 1;
	
	//*********************************************		
		*/
	asm(" clrc INTM");//开总中断
	return;
}

void Timer1_UFINT()
{
	*EVAIFRA |= 0x0200;//Page 133
	
	Next_Loop = 1;
	
	asm(" clrc INTM");//开总中断
	return;
}


void Timer2_UFINT()
{
	Timer2_UFINT_count++;
	
	*T2CNT = 0xFFFE;//注意,不要设置成0xFFFF,否则,上下溢出中断都不停的进入
	*EVAIFRB &= 0x000C;
	asm(" clrc INTM");//开总中断
	return;
}
void Timer2_OFINT()
{	
	Timer2_OFINT_count++;
	
	*T2CNT = 0x0001;//注意,不要设置成0x0000,否则,上下溢出中断都不停的进入
	*EVAIFRB &= 0x000C;
	asm(" clrc INTM");//开总中断
	return;
}

void Timer3_PINT()
{
	int flag;
	static unsigned char PE_data = 1;
	static ULONG count = 0;
	
	static UINT T2CNT_temp = 0;
	static UINT T2CNT_temp_PRE = 0;
	static UINT SPDU_TX_Flag = 0;
	
	flag = *EVBIFRA & 0x0080;
	
	if(flag != 0x0080)
	{
		asm(" clrc INTM");//开总中断
		return;
	}
	
	*T3CNT = 0x00;
	*EVBIFRA &= 0x0080;

	//--------------------    QEP    ------------------------
	T2CNT_temp_PRE = T2CNT_temp;
	T2CNT_temp = *T2CNT;
	
	if(Timer2_OFINT_count > Timer2_UFINT_count)
		QEP_count = T2CNT_temp + ( (Timer2_OFINT_count-Timer2_UFINT_count)*0xFFFF ) -T2CNT_temp_PRE;
	else if(Timer2_OFINT_count < Timer2_UFINT_count)
		QEP_count = T2CNT_temp_PRE + ( (Timer2_UFINT_count-Timer2_OFINT_count)*0xFFFF ) -T2CNT_temp;
	else
	{
		if(T2CNT_temp > T2CNT_temp_PRE)
			QEP_count = T2CNT_temp - T2CNT_temp_PRE;
		else
			QEP_count = T2CNT_temp_PRE - T2CNT_temp;
	}
	
	Timer2_OFINT_count = 0;
	Timer2_UFINT_count = 0;
	
	//--------------------------------------------------------
	
	
	
	//*********************************************
	
	count++;
	if(Get_Group_Key() != 0x01)
	{
		if(count == 5)//200->1秒钟
		{/*
			Set_LED(PE_data);
			
			PE_data = PE_data << 1;
			if(PE_data == 0x0100)
				PE_data = 1;
			*/
			
			Load_SPDU();
			SCI_Send_SPDU(SPDU_TX_Flag);
			SPDU_TX_Flag++;
			if(SPDU_TX_Flag >= 2)
				SPDU_TX_Flag = 0;
				
			Set_LED(QEP_count);
		//	Set_LED(AD_BRK>>2);
			Write_DAC(0,(0x0FFF & (AD_BRK<<2)));
			count = 0;
		}		
	}
	else
	{
		if(count >= 20)//200->1秒钟
		{
			SCI_Send_String("AD-ACC = 0x");
			SCI_Send_DATA(AD_ACC);
			SCI_Send_String("     AD-BRK = 0x");
			SCI_Send_DATA(AD_BRK);
			SCI_Send_String("\n");
			
			Set_LED(AD_BRK>>2);
			
			count = 0;
		}
	}
	//*********************************************		
	
		
	asm(" clrc INTM");//开总中断
	return;
}

void Timer4_PINT()
{
/*	int flag;
	static unsigned int PE_data = 1;
	
	flag = *EVBIFRB & 0x0001;
	
	if(flag != 0x0001)
	{
		asm(" clrc INTM");//开总中断
		return;
	}
	
	*T1CNT = 0x00;
	*EVBIFRB &= 0x0001;
	
	//*********************************************
	*PEDATDIR = ~PE_data;
	
	PE_data = PE_data << 1;
	if(PE_data == 0x0100)
		PE_data = 1;
		
	//*********************************************		
		*/
	asm(" clrc INTM");//开总中断
	return;
}

void CAN_Err_INT()
{
	asm(" clrc INTM");//开总中断
}

void CAN_MailBox_INT()
{
	UCHAR MailBox_Index = 0;
	UINT offset = 0;
	UCHAR i ,j = 0;
	ULONG ID_temp,ID_temp2 = 0;
	
	static UCHAR RX_count = 0;
	
	RX_count++;
	Set_LED(RX_count);
	
	for(i=0;i<3;i++)//查询三个接收邮箱。
	{
		if(*CANIFR & (0x0100<<i))
			MailBox_Index = i;
		else
			continue;
		
		offset = MailBox_Index<<3;		
		
		*CANMDER &= ~(0x0001<<MailBox_Index);  	 //禁止邮箱	
		*CANMCR |= 0x0100;	//改变数据域请求:CDR = 1;
		
		ID_temp = *(CANMSGID0H + offset);
		ID_temp = ID_temp<<16;
		ID_temp &= 0x1FFF0000;
		ID_temp2 = *(CANMSGID0L + offset);
		ID_temp2 &= 0x0000FFFF;		

		RecvFrame.ID = ID_temp + ID_temp2;
		
		RecvFrame.DataLen = *(CANMSGCTRL0 + offset);
		
		for(j=0;j<RecvFrame.DataLen;j=j+2)
		{
			RecvFrame.Data[j] = (UCHAR)(*(CANMBX0A + offset + j/2));
			RecvFrame.Data[j+1] = (UCHAR)(   (   *(CANMBX0A + offset + j/2)>>8   )    );
		}
		
		*CANMCR &= ~0x0100;
		*CANMDER |= 0x0001<<MailBox_Index;		 //使能邮箱		
		
		*CANRCR = 0x0010<<MailBox_Index;
		RX_FLG = 0x01;		
		
		//注意:这条语句测试使用。作用是将收到的数据原样发送回去。
	/*	if(RX_count % 2)
			CAN_Send_Data(4,ID,8,data);
		else
			CAN_Send_Data(3,ID,8,data);*/
	}	
	
	asm(" clrc INTM");//开总中断
}

////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
void interrupt INT_ALL()
{
	switch( *PVIR )
	{
		case 0x04:
			ADC_INT();
			break;
			
		case 0x40:
			CAN_MailBox_INT();//CAN邮箱中断
		case 0x41:
			CAN_Err_INT();//CAN错误中断			
			
		case 0x29:
			Timer1_UFINT();//Timer1 下溢中断
			break;
			
		case 0x2B:
			Timer2_PINT();//Timer2 周期中断
			break;
		case 0x2D:
			Timer2_UFINT();//Timer2 下溢中断
			break;
		case 0x2E:
			Timer2_OFINT();//Timer2 上溢中断
			break;
			
		
		case 0x2F:
			Timer3_PINT();//Timer3 周期中断
			break;
		
		case 0x39:
			Timer4_PINT();//Timer4 周期中断
			break;
		
		case 0x01:
			XINT1_INT();//XINT1
			break;
		case 0x11:
			XINT2_INT();//XINT2
			break;
			
		default :
			asm(" clrc INTM");//开总中断
	}	
}

⌨️ 快捷键说明

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