www.pudn.com > s3c2443_test_code.zip > Eint.c


/***************************************** 
  NAME: Eint.c 
  DESC: External Interrupt test 
  HISTORY: 
  2006.12.18:GOM: draft ver 1.0 
 *****************************************/ 
 
#include "system.h" 
#include "eint.h" 
 
static void __irq Eint0Int(void) 
{ 
	printf("EINT0 interrupt is occurred.\n"); 
	ClearPending(BIT_EINT0); 
	rEINTPEND=(1<<0); 
} 
 
static void __irq Eint8_23(void) 
{	 
	if (rEINTPEND & (1<<11)) 
		printf("EINT11 interrupt is occurred.\n"); 
	rEINTPEND |= (1<<11); 
	ClearPending(BIT_EINT8_23); 
} 
 
void Test_Eint(void) 
{ 
	int extintMode; 
 
	printf("[External Interrupt Test through PF0 PG11]\n"); 
 
	printf("1.L-LEVEL  2.H-LEVEL  3.F-EDGE  4.R-EDGE  5.B-EDGE\n"); 
	printf("Select the external interrupt type.\n"); 
	extintMode=Uart_getc(); 
 
	rGPFCON = (rGPFCON & ~0x3)|(2<<0);			//GPF0 = EINT0 
	rGPGCON = (rGPGCON & ~0xc0)|(2<<6);		//GPG3 = EINT11	 
 
	rEXTINT0 = (rdEXTINT0 | (1<<3)); 
	rEXTINT1 = (rdEXTINT0 | (1<<15)); 
 
	switch(extintMode) 
	{ 
	case '1': 
		rEXTINT0 = (rdEXTINT0 & ~(7<<0))  | (0x0<<0) ; //EINT0=low level triggered 
		rEXTINT1 = (rdEXTINT1 & ~(7<<12)) | (0x0<<12);//EINT11=low level triggered		 
		break; 
	case '2': 
		rEXTINT0 = (rdEXTINT0 & ~(7<<0))  | (0x1<<0) ; //EINT0=high level triggered 
		rEXTINT1 = (rdEXTINT1 & ~(7<<12)) | (0x1<<12); //EINT11=high level triggered 
		break; 
	case '3': 
		rEXTINT0 = (rdEXTINT0 & ~(7<<0))  | (0x2<<0) ; //EINT0=falling edge triggered 
		rEXTINT1 = (rdEXTINT1 & ~(7<<12)) | (0x2<<12); //EINT11=falling edge triggered 
		break; 
	case '4': 
		rEXTINT0 = (rdEXTINT0 & ~(7<<0))  | (0x4<<0); //EINT0=rising edge triggered 
		rEXTINT1 = (rdEXTINT1 & ~(7<<12)) | (0x4<<12); //EINT11=rising edge triggered 
		break; 
	case '5': 
		rEXTINT0 = (rdEXTINT0 & ~(7<<0))  | (0x6<<0); //EINT0=both edge triggered 
		rEXTINT1 = (rdEXTINT1 & ~(7<<12)) | (0x6<<12); //EINT11=both edge triggered 
		break; 
	default: 
		break; 
	} 
 
	printf("Press the EINT0/11 buttons or Press any key to exit.\n"); 
 
	pISR_EINT0 = (U32)Eint0Int; 
	pISR_EINT8_23 = (U32)Eint8_23; 
 
	rEINTPEND = 0xffffff; 
 
	rSRCPND = BIT_EINT0|BIT_EINT8_23; //to clear the previous pending states 
	rINTPND = BIT_EINT0|BIT_EINT8_23; 
 
	rEINTMASK &= ~((1<<11)|(1<<0)); 
	rINTMSK &= ~(BIT_EINT0|BIT_EINT8_23); 
 
	Uart_getc(); 
 
	rEINTMASK=0xffffff; 
	rINTMSK=BIT_ALLMSK; 
}