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

📄 eint.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
字号:

#include <stdio.h>
#include <string.h>
#include "option.h"
#include "2460addr.h"
#include "2460lib.h"
#include "2460slib.h" 
#include "eint.h" 
#include "int.h" 


void * int_func[][2]=
{
	(void *)Test_Eint,				"External Interrupt test",
	(void *)Test_Fiq,				"FIQ Interrupt test",
	(void *)Change_IntPriorities, 	"Change Priority test",
	0,0
};

void Ch6_INTERRUPT_CONTROLLER(void)
{
	while(1)
	{
		int i =0;
  
		while(1)
		{	//display menu
			printf("%2d:%s  ",i,int_func[i][1]);
			i++;
			if((int)(int_func[i][0])==0)
			{
				printf("\n");
				break;
			}
			if((i%4)==0)
			printf("\n");
		}
		
		printf("\nSelect (\"-1\" to exit) : ");
		i = GetIntNum();
		printf("\n");
		if(i==-1) break;	 	
		if(i>=0 && (i<(sizeof(int_func)/8)) ) 
		( (void (*)(void)) (int_func[i][0]) )();			
}
}

static void __irq Eint0(void)
{
	if(rEINTPEND&(1<<0))
		{
		rEINTPEND=(1<<0);
		printf("EINT0 interrupt is occured.\n");
		}
	else
		{
		printf("rEINTPEND=%x\n",rEINTPEND);
		rEINTPEND=((1<<0)|(1<<1));
		}
	ClearPending(BIT_EXT0_3);
}

static void __irq Eint14_15(void)
{
	if (rEINTPEND&(1<<14))
		{
		rEINTPEND=(1<<14);
		printf("EINT14 interrupt is occured.\n");
		}
	else if (rEINTPEND&(1<<15))
		{
		rEINTPEND=(1<<15);
		printf("EINT15 interrupt is occured.\n");
		}
	else
		{
		printf("rEINTPEND=%x\n",rEINTPEND);
		}
	ClearPending(BIT_EXT12_15);
}

void Test_Eint(void)
{
//    int i;
    char extintMode;

    printf("External interrupt test is EINT0/14/15\n");
    printf("1.L-evel   2.H-evel   3.F-edge   4.R-edge 5.B-edge\n");
    printf("Select the external interrupt type.\n");
    extintMode=getchar();
    printf(" is selected.\n");

    rGPJCON = rGPJCON & ~((3<<30)|(3<<28)|(3<<0))|(2<<30)|(2<<28)|(2<<0);

	switch(extintMode)
	{
		case '1':
			rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x0<<0);
			rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x0<<28)|(0x0<<27)|(0x0<<24);
			break;
		case '2':
			rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x1<<0);
			rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x1<<28)|(0x0<<27)|(0x1<<24);
			break;
		case '3':
			rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x2<<0);
			rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x2<<28)|(0x0<<27)|(0x2<<24);
			break;    
        case '4':
			rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x4<<0);
			rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x4<<28)|(0x0<<27)|(0x4<<24);
			break;
        case '5':
			rEINTCON0=rEINTCON0 & ~(0xf<<0)|(0x0<<3)|(0x6<<0);
			rEINTCON1=rEINTCON1 & ~((0xf<<28)|(0xf<<24))|(0x1<<31)|(0x6<<28)|(0x0<<27)|(0x6<<24);
			break;
		default:
			break;
	}

	rEINTFLT1=rEINTFLT1 & ~(0x7f<<0)|(0x1<<31)|(0x3f<<24);

	pISR_EXT0_3=(unsigned int)Eint0;
	pISR_EXT12_15=(unsigned int)Eint14_15;

	rEINTPEND = 0xffffff;
    rSRCPND = BIT_EXT0_3|BIT_EXT12_15; //to clear the previous pending states
    rINTPND = BIT_EXT0_3|BIT_EXT12_15;

    rEINTMASK &= ~( (1<<0)|(1<<14)|(1<<15) );
    rINTMSK &= ~(BIT_EXT0_3|BIT_EXT12_15);

    getchar();

    rEINTMASK=0xffffff;
    rINTMSK=BIT_ALLMSK;
}

⌨️ 快捷键说明

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