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

📄 interrupt.c

📁 三星2413芯片的测试代码,对进行驱动开发很有帮助.
💻 C
字号:
/*****************************************
  NAME: eint.c
  DESC: External interrupt test
  HISTORY:
  2005.11.23:cha gyu hwan 2413 ver 0.0
  2003.05.xx:DonGo: modifed for 2442 ver 0.1
  
 *****************************************/

#include <string.h>
#include "def.h"
#include "option.h"
#include "2413addr.h"
#include "interrupt.h"

int count0;
int count1;

static void __irq Eint0Int(void)
{

    rEINTPEND=(1<<0);
    ClearPending(BIT_EINT0);
    
    printf("EINT0 interrupt is occurred %d.\n",count0);
    printf("0x%x\n",rINTOFFSET);
    count0++;
    
}

static void __irq Eint8_23Int(void)
{
	rEINTPEND=(1<<11);
       ClearPending(BIT_EINT8_23);
	   
	printf("EINT11 interrupt is occurred. %d\n",count1);
	printf("0x%x\n",rINTOFFSET);
	count1++;
}

// SMDK2413 EINT S/W
// EINT0/2/11/19
void Ch13_Interrupt(void)
{
    U32 extintMode;
    int i;

    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 : ");
    extintMode=Uart_getc();
    printf("%d\n", extintMode-0x30);
	
    rGPFCON = (rGPFCON & 0xfffc)|(2<<0);		//PF0 = EINT0
    rGPGCON = (rGPGCON & 0xff3f)|(2<<6);		//PG3 = EINT11
     
    switch(extintMode)
    {
    	    case '1':
			count0 = 1;
			count1 = 1;
		    	rEXTINT0 = (rEXTINT0 & ~(0x7<<0))  | (0x0<<0) | (0x1<<3); //EINT0/2=low level triggered
			rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x0<<12); 	//EINT11=low level triggered
			break;
			
	    case '2':
			count0 = 1;
			count1 = 1;
	    		rEXTINT0 = (rEXTINT0 & ~(0x7<<0))  | (0x1<<0) | (0x1<<3); //EINT0/2=high level triggered
			rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x1<<12); //EINT11=high level triggered
			break;
			
	    case '3':
			count0 = 1;
			count1 = 1;
		    	rEXTINT0 = (rEXTINT0 & ~(0x7<<0))  | (0x2<<0)| (0x1<<3) ; //EINT0/2=falling edge triggered
			rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x2<<12); //EINT11=falling edge triggered
			break;
			
	    case '4':
			count0 = 1;
			count1 = 1;
	 	   	rEXTINT0 = (rEXTINT0 & ~(0x7<<0))  | (0x4<<0)| (0x1<<3); //EINT0/2=rising edge triggered
			rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x4<<12); //EINT11=rising edge triggered
			break;
			
	    case '5':
			count0 = 1;
			count1 = 1;
	 	   	rEXTINT0 = (rEXTINT0 & ~(0x7<<0))  | (0x6<<0)| (0x1<<3); //EINT0/2=both edge triggered
			rEXTINT1 = (rEXTINT1 & ~(0x7<<12)) | (0x6<<12)|(0x1<<15); //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_23Int;

    rEINTPEND = 0xffffff;
    
    rSRCPND = BIT_EINT0|BIT_EINT8_23; //to clear the previous pending states
    rINTPND = BIT_EINT0|BIT_EINT8_23;
       
    rEINTMASK=~( (0x1)|(0x1<<11));
    rINTMSK=~(BIT_EINT0|BIT_EINT8_23);
		
    Uart_getc();
    
    rEINTMASK=0xffffff;
    rINTMSK=BIT_ALLMSK;
}

⌨️ 快捷键说明

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