📄 int_test.c
字号:
/*********************************************************************************************
* File: eint.c
* Author: embest
* Descript: External interrupt test
* History:
* EINT0 --- SB1202 EINT11 --- SB1203
W.W.Zhang, Programming start, April 15, 2005
*********************************************************************************************/
/*------------------------------------------------------------------------------------------*/
/* include files */
/*------------------------------------------------------------------------------------------*/
#include "2410lib.h"
UINT32T g_nKeyPress=0; // the SB1202/SB1203 press signal
/*------------------------------------------------------------------------------------------*/
/* function declare */
/*------------------------------------------------------------------------------------------*/
void __irq int0_int(void);// __attribute__ ((interrupt ("IRQ")));
void __irq int11_int(void);// __attribute__ ((interrupt ("IRQ")));
//extern void isrEINT0(void);
//extern void isrEINT11_19(void);
/*********************************************************************************************
* name: int0_int
* func: EXTINT0 interrupt service routine
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void __irq int0_int(void)
{
uart_printf(" EINT0 interrupt occurred.\n");
ClearPending(BIT_EINT0);
if(g_nKeyPress) g_nKeyPress-=1; // decrease for boar test
}
/*********************************************************************************************
* name: int11_int
* func: EXTINT11 interrupt service routine
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void __irq int11_int(void)
{
if(rEINTPEND==(1<<11))
{
uart_printf(" EINT11 interrupt occurred.\n");
rEINTPEND=(1<<11);
if(g_nKeyPress<20)
g_nKeyPress+=1; // increase for boar test
else
g_nKeyPress=0;
}
else if(rEINTPEND==(1<<19))
{
uart_printf(" EINT19 interrupt occurred.\n");
rEINTPEND=(1<<19);
}
else
{
uart_printf(" rEINTPEND=0x%x\n",rEINTPEND);
rEINTPEND=(1<<19)|(1<<11);
}
ClearPending(BIT_EINT8_23);
}
/*********************************************************************************************
* name: int_init
* func: Interrupt initialize
* para: none
* ret: none
* modify:
* comment:
* EINT0 --- SB202 EINT11 --- SB203
*********************************************************************************************/
void int_init(void)
{
rSRCPND = rSRCPND; // clear all interrupt
rINTPND = rINTPND; // clear all interrupt
// nIntMode='3';
rGPFCON = (rGPFCON & 0xffcc) | (1<<5) | (1<<1); // PF0/2 = EINT0/2
rGPGCON = (rGPGCON & 0xff3fff3f) | (1<<23) | (1<<7); // PG3/11 = EINT11/19
pISR_EINT0=(UINT32T)int0_int;//int0_int; //isrEINT0;
pISR_EINT8_23=(UINT32T)int11_int;//int11_int; //isrEINT11_19;
rEINTPEND = 0xffffff;
rSRCPND = BIT_EINT0 | BIT_EINT8_23; //to clear the previous pending states
rINTPND = BIT_EINT0 | BIT_EINT8_23;
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x2<<8 | 0x2<<0; // EINT0/2=falling edge triggered
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12; //EINT11=falling edge triggered
rEINTMASK &= ~(1<<11);
rINTMSK &= ~(BIT_EINT0 | BIT_EINT8_23);
}
/*********************************************************************************************
* name: int_test
* func: Extern interrupt test
* para: none
* ret: none
* modify:
* comment:
* EINT0 --- SB202 EINT11 --- SB203
*********************************************************************************************/
void int_test(void)
{
int nIntMode;
uart_printf("\n External Interrupt Test Example\n");
uart_printf(" 1.L-LEVEL 2.H-LEVEL 3.F-EDGE(default here) 4.R-EDGE 5.B-EDGE\n");
uart_printf(" Select number to change the external interrupt type:");
uart_printf(" \n Press the Buttons (SB1202/SB1203) to test...\n");
uart_printf(" Press SPACE(PC) to exit...\n");
int_init();
g_nKeyPress = 3; // only 3 times test (for board test)
while(g_nKeyPress&(g_nKeyPress<6)) // SB1202/SB1203 to exit board test
{
nIntMode = uart_getkey();
switch(nIntMode)
{
case '1':
uart_printf(" 1.L-LEVEL\n");
// EINT0/2=low level triggered,EINT11=low level triggered
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x0<<8 | 0x0<<0;
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x0<<12;
break;
case '2':
uart_printf(" 2.H-LEVEL\n");
// EINT0/2=high level triggered,EINT11=high level triggered
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x1<<8 | 0x1<<0;
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x1<<12;
break;
case '3':
uart_printf(" 3.F-EDGE\n");
// EINT0/2=falling edge triggered, EINT11=falling edge triggered
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x2<<8 | 0x2<<0;
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12;
break;
case '4':
uart_printf(" 4.R-EDGE\n");
// EINT0/2=rising edge triggered,EINT11=rising edge triggered
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x4<<8 | 0x4<<0;
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x4<<12;
break;
case '5':
uart_printf(" 5.B-EDGE\n");
// EINT0/2=both edge triggered,EINT11=both edge triggered
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x6<<8 | 0x6<<0;
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x6<<12;
break;
case ' ':
return;
default:
break;
}
delay(10000);
}
uart_printf(" end.\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -