📄 eint.c
字号:
#include <stdio.h>
#include <string.h>
#include "option.h"
#include "2460addr.h"
#include "2460lib.h"
#include "2460slib.h"
#include "eint.h"
#include "int.h"
void * int_func[][2]=
{
(void *)Test_Eint, "External Interrupt test",
(void *)Test_Fiq, "FIQ Interrupt test",
(void *)Change_IntPriorities, "Change Priority test",
0,0
};
void Ch6_INTERRUPT_CONTROLLER(void)
{
while(1)
{
int i =0;
while(1)
{ //display menu
printf("%2d:%s ",i,int_func[i][1]);
i++;
if((int)(int_func[i][0])==0)
{
printf("\n");
break;
}
if((i%4)==0)
printf("\n");
}
printf("\nSelect (\"-1\" to exit) : ");
i = GetIntNum();
printf("\n");
if(i==-1) break;
if(i>=0 && (i<(sizeof(int_func)/8)) )
( (void (*)(void)) (int_func[i][0]) )();
}
}
static void __irq Eint0(void)
{
if(rEINTPEND&(1<<0))
{
rEINTPEND=(1<<0);
printf("EINT0 interrupt is occured.\n");
}
else
{
printf("rEINTPEND=%x\n",rEINTPEND);
rEINTPEND=((1<<0)|(1<<1));
}
ClearPending(BIT_EXT0_3);
}
static void __irq Eint14_15(void)
{
if (rEINTPEND&(1<<14))
{
rEINTPEND=(1<<14);
printf("EINT14 interrupt is occured.\n");
}
else if (rEINTPEND&(1<<15))
{
rEINTPEND=(1<<15);
printf("EINT15 interrupt is occured.\n");
}
else
{
printf("rEINTPEND=%x\n",rEINTPEND);
}
ClearPending(BIT_EXT12_15);
}
void Test_Eint(void)
{
// int i;
char extintMode;
printf("External interrupt test is EINT0/14/15\n");
printf("1.L-evel 2.H-evel 3.F-edge 4.R-edge 5.B-edge\n");
printf("Select the external interrupt type.\n");
extintMode=getchar();
printf(" is selected.\n");
rGPJCON = rGPJCON & ~((3<<30)|(3<<28)|(3<<0))|(2<<30)|(2<<28)|(2<<0);
switch(extintMode)
{
case '1':
rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x0<<0);
rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x0<<28)|(0x0<<27)|(0x0<<24);
break;
case '2':
rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x1<<0);
rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x1<<28)|(0x0<<27)|(0x1<<24);
break;
case '3':
rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x2<<0);
rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x2<<28)|(0x0<<27)|(0x2<<24);
break;
case '4':
rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x4<<0);
rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x4<<28)|(0x0<<27)|(0x4<<24);
break;
case '5':
rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x6<<0);
rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x6<<28)|(0x0<<27)|(0x6<<24);
break;
default:
break;
}
rEINTFLT1=rEINTFLT1 & ~(0x7f<<0)|(0x1<<31)|(0x3f<<24);
pISR_EXT0_3=(unsigned int)Eint0;
pISR_EXT12_15=(unsigned int)Eint14_15;
rEINTPEND = 0xffffff;
rSRCPND = BIT_EXT0_3|BIT_EXT12_15; //to clear the previous pending states
rINTPND = BIT_EXT0_3|BIT_EXT12_15;
rEINTMASK &= ~( (1<<0)|(1<<14)|(1<<15) );
rINTMSK &= ~(BIT_EXT0_3|BIT_EXT12_15);
getchar();
rEINTMASK=0xffffff;
rINTMSK=BIT_ALLMSK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -