📄 int.c
字号:
#include "def.h"
#include "option.h"
#include <string.h>
#include "k44.h"
#include "k44lib.h"
void MakeHwInt(void)
{
Uart_Printf("[]HW vector interrupt mode is enabled.\n");
// for only test, the order of interrupt priority is reversed
// in comparision with the default settings.
/*rINTPRI0=0xef101112;
rINTPRI1=0x0b0c0d0e;
rINTPRI2=0x0708090a;
rINTPRI3=0x03040506;
rINTPRI4=0x13000102;*/
//To test whether or not h/w vector interrupt works,use HandlerIRQ in k44init2.s
pISR_IRQ=0x0;
pISR_FIQ=0x0;
rINTPRI0=0xe3020100;
rINTPRI1=0x07060504;
rINTPRI2=0x0b0a0908;
rINTPRI3=0x0f0e0d0c;
rINTPRI4=0x13121110;
}
volatile int cntEint0;
volatile int cntEint1;
volatile int cntEint2;
void __irq IsrEint0(void)
{
rINTPEND=~BIT_EINT0;
cntEint0++;
}
void __irq IsrEint1(void)
{
rINTPEND=~BIT_EINT1;
cntEint1++;
}
void __irq IsrEint2(void)
{
rINTPEND=~BIT_EINT2;
cntEint2++;
}
void Test_Eint(void)
{
int i;
rP0=rP0|0x1; //GPIO0=H
rP0CON|=0x1; //GPIO0=output
pISR_EINT0=(unsigned)IsrEint0;
pISR_EINT1=(unsigned)IsrEint1;
pISR_EINT2=(unsigned)IsrEint2;
rINTPEND=~(BIT_EINT0|BIT_EINT1|BIT_EINT2); //to clear rINTPEND
rINTMASK=BIT_EINT0|BIT_EINT1|BIT_EINT2;
cntEint0=0;
cntEint1=0;
cntEint2=0;
rEINTMOD=(0<<4)|(0<<2)|(0);//falling edge
rEINTCON=0x7; //EINT0,1,2 interrupt is enabled.
rP0=rP0&(~0x1); //GPIO0=L;
for(i=0;i<10;i++); //wait until the eint012 interrupt occurs.
Uart_Printf("Falling Eint test.\n");
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",1,1,1);
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",cntEint0,cntEint1,cntEint2);
cntEint0=0;
cntEint1=0;
cntEint2=0;
rEINTMOD=(1<<4)|(1<<2)|(1);//rising edge
rP0=rP0|0x1; //GPIO0=H
for(i=0;i<10;i++); //wait until the eint012 interrupt occurs.
Uart_Printf("Rising Eint test.\n");
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",1,1,1);
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",cntEint0,cntEint1,cntEint2);
/*
cntEint0=0;
cntEint1=0;
cntEint2=0;
rEINTMOD=(3<<4)|(3<<2)|(3);//low level
rP0=rP0&(~0x1); //GPIO0=L;
for(i=0;i<10;i++); //wait until the eint012 interrupt occurs.
rP0=rP0&(~0x1); //GPIO0=H;
//may be pended here???
Uart_Printf("Low level Eint test.\n");
Uart_Printf("cntEint0>%d, cntEint1>%d,cntEint2>%d\n",2,2,2);
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",cntEint0,cntEint1,cntEint2);
cntEint0=0;
cntEint1=0;
cntEint2=0;
rEINTCON=0x7; //EINT0,1,2 interrupt is enabled.
rP0=rP0&(~0x1); //GPIO0=L;
rEINTMOD=(2<<4)|(2<<2)|(2);//High level
rEINTCON=0x7; //EINT0,1,2 interrupt is enabled.
rP0=rP0|0x1; //GPIO0=H
for(i=0;i<10;i++); //wait until the eint012 interrupt occurs.
rP0=rP0&(~0x1); //GPIO0=L;
//may be pended here???
Uart_Printf("High level Eint test.\n");
Uart_Printf("cntEint0>%d, cntEint1>%d,cntEint2>%d\n",2,2,2);
Uart_Printf("cntEint0=%d, cntEint1=%d,cntEint2=%d\n",cntEint0,cntEint1,cntEint2);
*/
rINTMASK=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -