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

📄 int_test.c

📁 基于周立功arm开发板的实验程序
💻 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 + -