📄 int.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 + -