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

📄 eint.c

📁 三星2443芯片
💻 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;
}

⌨️ 快捷键说明

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