📄 eint.c
字号:
/*****************************************
名称:Eint2Int()
功能:外部中断2相应函数
返回值: void
*****************************************/
#include "2410addr.h"
static void __irq Eint2Int(void)
{
//SRCPND EINT2 [2] = 1 : Requested
rSRCPND = BIT_EINT2;
//INTPND EINT2 [2] = 1 : Requested
rINTPND = BIT_EINT2;
rINTPND;
Uart_Printf("EINT2 interrupt is occurred.\n");//完成中断响应功能
}
/*****************************************
名称:Eint3Int()
功能:外部中断3相应函数
返回值: void
*****************************************/
static void __irq Eint3Int(void)
{
//SRCPND EINT3 [3] = 1 : Requested
rSRCPND = BIT_EINT3;
//INTPND EINT3 [3] = 1 : Requested
rINTPND = BIT_EINT3;
rINTPND;
Uart_Printf("EINT3 interrupt is occurred.\n");//完成中断响应功能
}
/*****************************************
名称:Eint1Int()
功能:外部中断1相应函数
返回值: void
*****************************************/
static void __irq Eint1Int(void)
{
//SRCPND EINT7 [7] = 1 : Requested
rSRCPND = BIT_EINT1;
//INTPND EINT7 [7] = 1 : Requested
rINTPND = BIT_EINT1;
rINTPND;
Uart_Printf("EINT1 interrupt is occurred.\n");//完成中断响应功能
}
/*****************************************
名称:Eint4-7Int()
功能:外部中断4-7相应函数
返回值: void
*****************************************/
static void __irq Eint4_7Int(void)
{
if(rEINTPEND==(1<<7))
{
Uart_Printf("EINT7 interrupt is occurred.\n");
rEINTPEND=(1<<7);
}
//SRCPND EINT7 [7] = 1 : Requested
rSRCPND = BIT_EINT4_7;
//INTPND EINT7 [7] = 1 : Requested
rINTPND = BIT_EINT4_7;
}
/*****************************************
EXTERNAL INTERRUPT REQUEST TEST
函数名: Test_Eint
描述: 外部中断测试函数
返回值:void
*****************************************/
void Test_Eint(void)
{
int extintMode;
Uart_Printf("[External Interrupt Test through PF0/2/11/19]\n");
Uart_Printf("1.L-LEVEL 2.H-LEVEL 3.F-EDGE 4.R-EDGE 5.B-EDGE\n");
Uart_Printf("Select the external interrupt type.\n");
extintMode=Uart_Getch();//手工输入选择触发方式
//GPFCON GPF1 [3 : 2] = 10 : EINT1
//GPFCON GPF2 [5 : 4] = 10 : EINT2
//GPFCON GPF3 [7 : 6] = 10 : EINT3
//GPFCON GPF7 [15 : 14] = 10 : EINT7
rGPFCON = (rGPFCON & 0x3103)|(1<<3)|(1<<5)|(1<<15)|(1<<7); //PF0/2 = EINT1/2/3/7
//INTPND EINT3 [3] = 1 : Requested
//INTPND EINT2 [2] = 1 : Requested
//INTPND EINT1 [1] = 1 : Requested
rSRCPND = rSRCPND|0xe;
//GPBCON GPB7 [15:14] = 01 :OUTPUT
//GPBCON GPB8 [17:16] = 01 :OUTPUT
//GPBCON GPB9 [19:18] = 01 :OUTPUT
//GPBCON GPB10 [21:20] = 01 :OUTPUT
rGPBCON = rGPBCON|0x154000;
rGPBCON = rGPBCON&0x157fff;
//GPBDAT [10: 7] = 0000
rGPBDAT = rGPBDAT&0x7f;
switch(extintMode)
{
case '1':
//EXTINT0 EINT1 [6 : 4] = 000 : 低电平触发
//EXTINT0 EINT3 [14:12] = 000 : 低电平触发
//EXTINT0 EINT2 [10: 8] = 000 : 低电平触发
//EXTINT0 EINT7 [30:28] = 000 : 低电平触发
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)| (0x7<<8)|(0x7<<28))) | 0x0<<4 | 0x0<<8| 0x0<<28| 0x0<<12; //EINT1/2/3/7低电平触发
break;
case '2':
//EXTINT0 EINT1 [6 : 4] = 001 : 高电平触发
//EXTINT0 EINT3 [14:12] = 001 : 高电平触发
//EXTINT0 EINT2 [10: 8] = 001 : 高电平触发
//EXTINT0 EINT7 [30:28] = 001 : 高电平触发
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x1<<4 | 0x1<<8| 0x1<<28| 0x1<<12; //EINT1/2/3/7高电平触发
break;
case '3':
//EXTINT0 EINT1 [6 : 4] = 01X : 下降沿触发
//EXTINT0 EINT3 [14:12] = 01X : 下降沿触发
//EXTINT0 EINT2 [10: 8] = 01X : 下降沿触发
//EXTINT0 EINT7 [30:28] = 01X : 下降沿触发
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x2<<4 | 0x2<<8| 0x2<<28| 0x2<<12; //EINT1/2/3/7下降沿触发
break;
case '4':
//EXTINT0 EINT1 [6 : 4] = 10X : 上升沿触发
//EXTINT0 EINT3 [14:12] = 10X : 上升沿触发
//EXTINT0 EINT2 [10: 8] = 10X : 上升沿触发
//EXTINT0 EINT7 [30:28] = 10X : 上升沿触发
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x4<<4 | 0x4<<8| 0x4<<28| 0x4<<12; //EINT1/2/3/7上升沿触发
break;
case '5':
//EXTINT0 EINT1 [6 : 4] = 11X : 双沿触发
//EXTINT0 EINT3 [14:12] = 11X : 双沿触发
//EXTINT0 EINT2 [10: 8] = 11X : 双沿触发
//EXTINT0 EINT7 [30:28] = 11X : 双沿触发
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x6<<4 | 0x6<<8| 0x6<<28| 0x6<<12; //EINT1/2/3/7双沿触发
break;
default:
break;
}
Uart_Printf("==Press the exint buttons or Press any key to exit.==\n");
//EINTPEND [1,2,3,7] = 0,0,0,0 : Requested
rEINTPEND = 0xffffff;
//SRCPND EINT1 [1] = 1 : Requested
//SRCPND EINT2 [2] = 1 : Requested
//SRCPND EINT3 [3] = 1 : Requested
//SRCPND EINT7 [7] = 1 : Requested
rSRCPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7; //清除先前的状态位
//INTPND EINT7 [7] = 1 : Requested
//INTPND EINT3 [3] = 1 : Requested
//INTPND EINT2 [2] = 1 : Requested
//INTPND EINT1 [1] = 1 : Requested
rINTPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7;
//外部中断函数声明
pISR_EINT2=(unsigned)Eint2Int;
pISR_EINT1=(unsigned)Eint1Int;
pISR_EINT4_7=(unsigned)Eint4_7Int;
pISR_EINT3=(unsigned)Eint3Int;
rEINTMASK=~(1<<7) ;
rINTMSK=~(BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7);//中断开始工作
//若有外部输入,种屏蔽中断
Uart_Getch();
Uart_Printf("=TEST FINISHED.=\n");
//EINTMASK EINT7 [7] = 1 : Masked
//EINTMASK EINT9 [9] = 1 : Masked
rEINTMASK=0xffffff;
//INTMSK EINT1 [1] = 1 : Masked
//INTMSK EINT2 [2] = 1 : Masked
//INTMSK EINT3 [3] = 1 : Masked
//INTMSK EINT4_7 [4] = 1 : Masked
rINTMSK=BIT_ALLMSK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -