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

📄 eint.c

📁 samsung 最新芯片2450 的测试程序.
💻 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);
}




static void __irq IsrExtInterrupt(void)
{
	unsigned int uPendReg, uPendReg0_3;
	uPendReg = (rSRCPND & 0x3F);
	uPendReg0_3 = uPendReg & 0xF;
	if(uPendReg0_3) //EINT0~3
	{
		printf("EINT%d interrupt is occurred.\n",uPendReg0_3-1);		
	}
	else//EINT4~23
	{
		printf("EINTPND: 0x%x interrupt is occurred.\n",rEINTPEND);		
	}
	
	rEINTPEND |= 0xFFFFFFFF;
	
	ClearPending(BIT_EINT0);
	ClearPending(BIT_EINT1);
	ClearPending(BIT_EINT2);
	ClearPending(BIT_EINT3);
	ClearPending(BIT_EINT4_7);
	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	

	rGPFUDP= (rGPFUDP & ~0x3);			//GPF0 up down disable
	rGPGUDP= (rGPGUDP & ~0xc0);		//GPG3 = EINT11	up down disable
	
	rEXTINT0 = (rEXTINT0 | (1<<3)); //EINT0 filter enable
	rEXTINT1 = (rEXTINT1 | (1<<15));

	switch(extintMode)
	{
	case '1':
		rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x0<<0) ; //EINT0=low level triggered
		rEXTINT1 = (rEXTINT1 & ~(7<<12)) | (0x0<<12);//EINT11=low level triggered		
		break;
	case '2':
		rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x1<<0) ; //EINT0=high level triggered
		rEXTINT1 = (rEXTINT1 & ~(7<<12)) | (0x1<<12); //EINT11=high level triggered
		break;
	case '3':
		rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x2<<0) ; //EINT0=falling edge triggered
		rEXTINT1 = (rEXTINT1 & ~(7<<12)) | (0x2<<12); //EINT11=falling edge triggered
		break;
	case '4':
		rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x4<<0); //EINT0=rising edge triggered
		rEXTINT1 = (rEXTINT1 & ~(7<<12)) | (0x4<<12); //EINT11=rising edge triggered
		break;
	case '5':
		rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x6<<0); //EINT0=both edge triggered
		rEXTINT1 = (rEXTINT1 & ~(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;
}



#define		SET_EXT_INT			0x2


void Test_New_Eint(void)
{
	int extintMode;
	unsigned int uNumOfExt, uFilterStatus;

	printf("[External Interrupt Test through PF0 PG11]\n");

	printf("0.L-LEVEL  1.H-LEVEL  2.F-EDGE  4.R-EDGE  6.B-EDGE\n");
	printf("Select the external interrupt type.\n");
	extintMode=GetIntNum();
		
	printf("Select Ext Interrupt Number : ");
	uNumOfExt = GetIntNum();
	
	printf("Select Filter Status : Enable(0), Disable(1) \n");
	uFilterStatus = GetIntNum();
	
		
	if(uNumOfExt < 8)
	{
		rGPFCON = (rGPFCON & ~(0x3<< (2*uNumOfExt)))|(SET_EXT_INT<< (2*uNumOfExt));			//EXT0~7
		rGPFUDP = (rGPFUDP & ~(0x3<< (2*uNumOfExt)));
		
		rEXTINT0 = (rEXTINT0 & ~(0x3<< (4*uNumOfExt))) | (extintMode<<(4*uNumOfExt)) ;		
		rEXTINT0 = (rEXTINT0 & ~(0x1<<(4*uNumOfExt + 3) ) | ( uFilterStatus << (4*uNumOfExt + 3)));
		
	}
	else
	{
		rGPGCON = (rGPGCON & ~(0x3<< (2*(uNumOfExt-8))))|(SET_EXT_INT<< (2*(uNumOfExt-8)));			//EXT8~23
		rGPGUDP = (rGPGUDP & ~(0x3<< (2*(uNumOfExt-8))));
		if(uNumOfExt < 16)
		{
			rEXTINT1 = (rEXTINT1 & ~(0x1<<(4*(uNumOfExt-8) ) ) | ( extintMode << (4*(uNumOfExt-8) )));			
			rEXTINT1 = (rEXTINT1 & ~(0x1<<(4*(uNumOfExt-8) + 3) ) | ( uFilterStatus << (4*(uNumOfExt-8) + 3)));
		}			
		else
		{			
			rEXTINT2 = (rEXTINT2 & ~(0x1<<(4*(uNumOfExt-16)) ) | ( extintMode << (4*(uNumOfExt-16))));			
			rEXTINT2 = (rEXTINT2 & ~(0x1<<(4*(uNumOfExt-16) + 3) ) | ( uFilterStatus << (4*(uNumOfExt-16) + 3)));
		}
	}

	pISR_EINT0 = 	(U32)IsrExtInterrupt;
	pISR_EINT1 = 	(U32)IsrExtInterrupt;	
	pISR_EINT2 =	(U32)IsrExtInterrupt;		
	pISR_EINT3 = 	(U32)IsrExtInterrupt;		
	pISR_EINT4_7= 	(U32)IsrExtInterrupt;	
	pISR_EINT8_23 = (U32)IsrExtInterrupt;	
	
	printf("Press the EINT0/11 buttons or Press any key to exit.\n");
		
	rEINTPEND = 0xffffff;

	rSRCPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3|BIT_EINT4_7|BIT_EINT8_23; //to clear the previous pending states
	rINTPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3|BIT_EINT4_7|BIT_EINT8_23;

	rEINTMASK &= ~(1<<uNumOfExt);//enable(0)/disable(1) interrupt
	rINTMSK &= ~(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3|BIT_EINT4_7|BIT_EINT8_23);

	Uart_getc();

	rEINTMASK=0xffffff;
	rINTMSK=BIT_ALLMSK;
}

⌨️ 快捷键说明

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