📄 eint.c
字号:
/*****************************************
NAME: eint.c
DESC: External interrupt test
HISTORY:
2001.04.03:purnnamu: draft ver 0.0
*****************************************/
#include "2410addr.h"
static void __irq Eint2Int(void)
{
rSRCPND = BIT_EINT2; //Clear pending bit
rINTPND = BIT_EINT2;
rINTPND;
Uart_Printf("EINT2 interrupt is occurred.\n");
}
static void __irq Eint3Int(void)
{
rSRCPND = BIT_EINT3; //Clear pending bit
rINTPND = BIT_EINT3;
rINTPND;
Uart_Printf("EINT3 interrupt is occurred.\n");
}
static void __irq Eint1Int(void)
{
rSRCPND = BIT_EINT1; //Clear pending bit
rINTPND = BIT_EINT1;
rINTPND;
Uart_Printf("EINT1 interrupt is occurred.\n");
}
static void __irq Eint7_9Int(void)
{
if(rEINTPEND==(1<<7))
{
Uart_Printf("EINT7 interrupt is occurred.\n");
rEINTPEND=(1<<7);
}
rSRCPND = BIT_EINT4_7; //Clear pending bit
rINTPND = BIT_EINT4_7;
}
/*****************************************
EXTERNAL INTERRUPT REQUEST TEST
函数名: Test_Eint
描述: 外部中断测试函数
返回值:void
*****************************************/
// SMDK2410 EINT S/W
// EINT1/2/3/7
void Test_Eint(void)
{
//int i;
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();
//设置相关中断的I/O口寄存器
rGPFCON = (rGPFCON & 0x3103)|(1<<3)|(1<<5)|(1<<15)|(1<<7); //PF0/2 = EINT1/2/3/7
rGPGCON = (rGPGCON & 0xfffffff3)|(1<<3); //PG3/11 = EINT9
//选择外部中断触发方式
rSRCPND = rSRCPND|0xe;
rGPBCON=rGPBCON|0x154000;
rGPBCON=rGPBCON&0x157fff;//pb789/10=output
rGPBDAT=rGPBDAT&0x7f;
switch(extintMode)
{
case '1':
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)| (0x7<<8)|(0x7<<28))) | 0x0<<4 | 0x0<<8| 0x0<<28| 0x0<<12; //EINT1/2/3/7=low level triggered
break;
case '2':
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x1<<4 | 0x1<<8| 0x1<<28| 0x1<<12; //EINT1/2/3/7=high level triggered
break;
case '3':
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x2<<4 | 0x2<<8| 0x2<<28| 0x2<<12; //EINT1/2/3/7=falling edge triggered
break;
case '4':
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x4<<4 | 0x4<<8| 0x4<<28| 0x4<<12; //EINT1/2/3/7=rising edge triggered
break;
case '5':
rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12) | (0x7<<8)|(0x7<<28))) | 0x6<<4 | 0x6<<8| 0x6<<28| 0x6<<12; //EINT1/2/3/7=both edge triggered
break;
default:
break;
}
Uart_Printf("==Press the exint buttons or Press any key to exit.==\n");
rEINTPEND = 0xffffff;
rSRCPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7; //to clear the previous pending states
rINTPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7;
//外部中断函数声明
pISR_EINT2=(unsigned)Eint2Int;
pISR_EINT1=(unsigned)Eint1Int;
pISR_EINT4_7=(unsigned)Eint7_9Int;
pISR_EINT3=(unsigned)Eint3Int;
rEINTMASK=~( (1<<7)|(1<<9) );
rINTMSK=~(BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7);
//若有外部输入,种屏蔽中断
Uart_Getch();
rEINTMASK=0xffffff;
rINTMSK=BIT_ALLMSK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -