⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int_test.c

📁 基于ARM9芯片的一个简单的GPRS测试程序
💻 C
字号:
/*********************************************************************************************
* File:		eint.c
* Author:	embest
* Descript: External interrupt test 
* History:	
*			EINT0 --- SB1202   EINT11 --- SB1203
*			H.T.Zhang, Programming modify, September 14, 2005
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*	 								include files						 				    */
/*------------------------------------------------------------------------------------------*/
#include "2410lib.h"
#include "demo.h"
/*------------------------------------------------------------------------------------------*/
/*                                     function declare                                     */
/*------------------------------------------------------------------------------------------*/
void int0_int(void);// __attribute__ ((interrupt ("IRQ")));
void 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 int0_int(void)
{
    uart_printf(" EINT0 interrupt occurred.\n");
    lcd_clr_rect(40,108,248,124,WHITE);
    lcd_disp_ascii8x16(40,108,RED,"EINT0 interrupt occurred.");
    ClearPending(BIT_EINT0);
}

/*********************************************************************************************
* name:		int11_int
* func:		EXTINT11 interrupt service routine
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
void int11_int(void)
{
	char buf[20];
    if(rEINTPEND==(1<<11))
	{
		uart_printf(" EINT11 interrupt occurred.\n");
		lcd_clr_rect(40,108,248,124,WHITE);
		lcd_disp_ascii8x16(40,108,RED,"EINT11 interrupt occurred.");
		rEINTPEND=(1<<11);
	}
	else if(rEINTPEND==(1<<19))
	{
		uart_printf(" EINT19 interrupt occurred.\n");
		lcd_clr_rect(40,108,248,124,WHITE);
		lcd_disp_ascii8x16(40,108,RED,"EINT19 interrupt occurred.");
		rEINTPEND=(1<<19);
	}
	else
	{
		uart_printf(" rEINTPEND=0x%x\n",rEINTPEND);
		sprintf(buf,"rEINTPEND=0x%x",rEINTPEND);
		lcd_clr_rect(40,108,240,124,WHITE);
		lcd_disp_ascii8x16(40,108,RED,(UINT8T *)buf);	
		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)isrEINT0;//int0_int;							//isrEINT0;
	pISR_EINT8_23=(UINT32T)isrEINT11_19;//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)
{
	uart_printf("\n External Interrupt Test Example\n");	
	int_init();
	lcd_disp_ascii8x16(40,60,BLUE,"External Interrupt Test!");
	lcd_disp_ascii8x16(40,84,BLUE,"Press button SB1202 or SB1203:");
	f_nKeyPress = 0;
   	while(!f_nKeyPress)// any key to exit.
	{
		// 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;
	}
	uart_printf(" end.\n");	
	rINTMSK   |= (BIT_EINT0 | BIT_EINT8_23);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -