📄 interrupt.c
字号:
/*****************************************
NAME: eint.c
DESC: External interrupt test
HISTORY:
2005.11.23:cha gyu hwan 2413 ver 0.0
2003.05.xx:DonGo: modifed for 2442 ver 0.1
*****************************************/
#include <string.h>
#include "def.h"
#include "option.h"
#include "2413addr.h"
#include "interrupt.h"
int count0;
int count1;
static void __irq Eint0Int(void)
{
rEINTPEND=(1<<0);
ClearPending(BIT_EINT0);
printf("EINT0 interrupt is occurred %d.\n",count0);
printf("0x%x\n",rINTOFFSET);
count0++;
}
static void __irq Eint8_23Int(void)
{
rEINTPEND=(1<<11);
ClearPending(BIT_EINT8_23);
printf("EINT11 interrupt is occurred. %d\n",count1);
printf("0x%x\n",rINTOFFSET);
count1++;
}
// SMDK2413 EINT S/W
// EINT0/2/11/19
void Ch13_Interrupt(void)
{
U32 extintMode;
int i;
printf("[External Interrupt Test through PF0 PG11]\n");
printf("1.L-LEVEL 2.H-LEVEL 3.F-EDGE 4.R-EDGE 5.B-EDGE\n");
printf("Select the external interrupt type : ");
extintMode=Uart_getc();
printf("%d\n", extintMode-0x30);
rGPFCON = (rGPFCON & 0xfffc)|(2<<0); //PF0 = EINT0
rGPGCON = (rGPGCON & 0xff3f)|(2<<6); //PG3 = EINT11
switch(extintMode)
{
case '1':
count0 = 1;
count1 = 1;
rEXTINT0 = (rEXTINT0 & ~(0x7<<0)) | (0x0<<0) | (0x1<<3); //EINT0/2=low level triggered
rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x0<<12); //EINT11=low level triggered
break;
case '2':
count0 = 1;
count1 = 1;
rEXTINT0 = (rEXTINT0 & ~(0x7<<0)) | (0x1<<0) | (0x1<<3); //EINT0/2=high level triggered
rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x1<<12); //EINT11=high level triggered
break;
case '3':
count0 = 1;
count1 = 1;
rEXTINT0 = (rEXTINT0 & ~(0x7<<0)) | (0x2<<0)| (0x1<<3) ; //EINT0/2=falling edge triggered
rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x2<<12); //EINT11=falling edge triggered
break;
case '4':
count0 = 1;
count1 = 1;
rEXTINT0 = (rEXTINT0 & ~(0x7<<0)) | (0x4<<0)| (0x1<<3); //EINT0/2=rising edge triggered
rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x4<<12); //EINT11=rising edge triggered
break;
case '5':
count0 = 1;
count1 = 1;
rEXTINT0 = (rEXTINT0 & ~(0x7<<0)) | (0x6<<0)| (0x1<<3); //EINT0/2=both edge triggered
rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x6<<12)|(0x1<<15); //EINT11=both edge triggered
break;
default:
break;
}
printf("Press the EINT0/11 buttons or Press any key to exit.\n");
pISR_EINT0=(U32)Eint0Int;
pISR_EINT8_23=(U32)Eint8_23Int;
rEINTPEND = 0xffffff;
rSRCPND = BIT_EINT0|BIT_EINT8_23; //to clear the previous pending states
rINTPND = BIT_EINT0|BIT_EINT8_23;
rEINTMASK=~( (0x1)|(0x1<<11));
rINTMSK=~(BIT_EINT0|BIT_EINT8_23);
Uart_getc();
rEINTMASK=0xffffff;
rINTMSK=BIT_ALLMSK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -