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

📄 eint.c

📁 S3C44b0X 的中断程序代码................
💻 C
字号:
//44BTEST : eint.c
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\eint.h"
void __irq Eint4567Isr(void);
void __irq Eint2Isr(void);
volatile char which_int=0;
void Test_Eint(void)
{
	unsigned int save_G,save_PG;
	/*test
	save_G=rPCONG;
	save_PG=rPUPG;
	rPCONG=0xffff; //EINT7~0
	rPUPG=0x0; //pull up enable
	Uart_Printf("1.Read test!!!\nPress EINT2 key and press any key\n");
	rINTMSK=BIT_GLOBAL;
	rI_ISPC=0x3ffffff;
	Uart_Getch();
	Uart_Printf("rINTPND=0x%x\n", rINTPND);
	rI_ISPC=BIT_EINT2;
	Uart_Printf("rINTPND=0x%x\n", rINTPND);
	while(1);
	test*/
	Uart_Printf("[External Interrupt Test]\n");
	/***Vectored interrupt test***/
	rINTCON=0x1;
	/***Vectored interrupt test***/
	pISR_EINT4567=(int)Eint4567Isr;
	pISR_EINT2=(int)Eint2Isr;
	// rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);
	Uart_Printf("...Select the trigger:\n"
	" 1. Falling trigger\n"
	" 2. Rising trigger\n"
	" 3. Both Edge trigger\n"
	" 4. Low level trigger\n"
	" 5. High level trigger\n");
	save_G=rPCONG;
	save_PG=rPUPG;
	rPCONG=0xffff; //EINT7~0
	rPUPG=0x0; //pull up enable
	switch(Uart_Getch())
	{
	case '1':
		rEXTINT=0x22222222; //Falling edge mode
		break;
	case '2':
		rEXTINT=0x44444444; //Rising edge mode
		break;
	case '3':
		rEXTINT=0x77777777; //Both edge mode
		break;
	case '4':
		rEXTINT=0x0; //"0" level mode
		break;
	case '5':
		Uart_Printf("In this board EINT2 and EINT5 are pulled up\n");//rEXTINT=0x11111111;
		//"1" level mode
		which_int=10;
		break;
	default:
		rPCONG=save_G;
		rPUPG=save_PG;
		return;
	}
	// Uart_Printf("\nDEMO B/D push buttons may have glitch noise problem.\n");
	Uart_Printf("Press the EINT buttons!!!\n");
	rINTMSK=~(BIT_GLOBAL|BIT_EINT2|BIT_EINT4567);
	while(!which_int);
	switch(which_int)
	{
	case 1:
		Uart_Printf("EINT4 had been occured...\n");
		break;
	case 2:
		Uart_Printf("EINT5 had been occured...\n");
		break;
	case 4:
		Uart_Printf("EINT6 had been occured...\n");
		break;
	case 8:
		Uart_Printf("EINT7 had been occured...\n");
		break;
	case 9:
		Uart_Printf("EINT2 had been occured...\n");
		default :
	break;
	}
	rINTMSK=BIT_GLOBAL;
	rPCONG=save_G;
	rPUPG=save_PG;
	which_int=0;
	Uart_Printf("\nrINTCON=0x%x\n",rINTCON);
	rINTCON=0x5;
}
void __irq Eint4567Isr(void)
{
	which_int=rEXTINPND;
	rEXTINPND=0xf; //clear EXTINPND reg.
	rI_ISPC=BIT_EINT4567; //clear pending_bit
}
void __irq Eint2Isr(void)
{
	rI_ISPC=BIT_EINT2; //clear pending_bit
	which_int=9;
}

⌨️ 快捷键说明

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