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

📄 eint.c

📁 嵌入式实验 软件:ARM Developer Suite v1.2 Multi-ICE V2.2.5(Build1319)
💻 C
字号:
/*****************************************
 名称:Eint2Int()
 功能:外部中断2相应函数
 返回值: void
 *****************************************/

#include "2410addr.h" 

static void __irq Eint2Int(void)
{
	//SRCPND EINT2 [2] = 1 : Requested
    rSRCPND = BIT_EINT2;  

	//INTPND EINT2 [2] = 1 : Requested
	rINTPND = BIT_EINT2;
    rINTPND;     
    Uart_Printf("EINT2 interrupt is occurred.\n");//完成中断响应功能

}
/*****************************************
 名称:Eint3Int()
 功能:外部中断3相应函数
 返回值: void
 *****************************************/
static void __irq Eint3Int(void)
{
	//SRCPND EINT3 [3] = 1 : Requested
    rSRCPND = BIT_EINT3; 

	//INTPND EINT3 [3] = 1 : Requested
    rINTPND = BIT_EINT3;
    rINTPND;   
	
    Uart_Printf("EINT3 interrupt is occurred.\n");//完成中断响应功能

}

/*****************************************
 名称:Eint1Int()
 功能:外部中断1相应函数
 返回值: void
 *****************************************/
static void __irq Eint1Int(void)
{
	//SRCPND EINT7 [7] = 1 : Requested
	rSRCPND = BIT_EINT1;  

	//INTPND EINT7 [7] = 1 : Requested
    rINTPND = BIT_EINT1;
    rINTPND;     

    Uart_Printf("EINT1 interrupt is occurred.\n");//完成中断响应功能

}
/*****************************************
 名称:Eint4-7Int()
 功能:外部中断4-7相应函数
 返回值: void
 *****************************************/
static void __irq Eint4_7Int(void)
{
    if(rEINTPEND==(1<<7))
    {
	Uart_Printf("EINT7 interrupt is occurred.\n");
	rEINTPEND=(1<<7);
    }

	//SRCPND EINT7 [7] = 1 : Requested
    rSRCPND = BIT_EINT4_7;  

	//INTPND EINT7 [7] = 1 : Requested
    rINTPND = BIT_EINT4_7;
    

}
/*****************************************
  EXTERNAL INTERRUPT REQUEST TEST
  函数名: Test_Eint
  描述: 外部中断测试函数
  返回值:void
 *****************************************/

void Test_Eint(void)
{
    int extintMode;

    Uart_Printf("[External Interrupt Test through PF0/2/11/19]\n");

    Uart_Printf("1.L-LEVEL  2.H-LEVEL  3.F-EDGE  4.R-EDGE  5.B-EDGE\n");
    Uart_Printf("Select the external interrupt type.\n");
    extintMode=Uart_Getch();//手工输入选择触发方式

   	 //GPFCON GPF1 [3  :  2] = 10 : EINT1
	 //GPFCON GPF2 [5  :  4] = 10 : EINT2
	 //GPFCON GPF3 [7  :  6] = 10 : EINT3
	 //GPFCON GPF7 [15 : 14] = 10 : EINT7
    rGPFCON = (rGPFCON & 0x3103)|(1<<3)|(1<<5)|(1<<15)|(1<<7);		//PF0/2 = EINT1/2/3/7

	 //INTPND EINT3 [3] = 1 : Requested
	 //INTPND EINT2 [2] = 1 : Requested
	 //INTPND EINT1 [1] = 1 : Requested
    rSRCPND = rSRCPND|0xe;

	 //GPBCON GPB7  [15:14] = 01 :OUTPUT
	 //GPBCON GPB8  [17:16] = 01 :OUTPUT
	 //GPBCON GPB9  [19:18] = 01 :OUTPUT
	 //GPBCON GPB10 [21:20] = 01 :OUTPUT
    rGPBCON = rGPBCON|0x154000;
    rGPBCON = rGPBCON&0x157fff;

	//GPBDAT [10: 7] = 0000
    rGPBDAT = rGPBDAT&0x7f;

    switch(extintMode)
    {
    case '1':
		 //EXTINT0 EINT1 [6 : 4] = 000 : 低电平触发
		 //EXTINT0 EINT3 [14:12] = 000 : 低电平触发
		 //EXTINT0 EINT2 [10: 8] = 000 : 低电平触发
		 //EXTINT0 EINT7 [30:28] = 000 : 低电平触发
    	rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)| (0x7<<8)|(0x7<<28))) | 0x0<<4 | 0x0<<8| 0x0<<28| 0x0<<12; //EINT1/2/3/7低电平触发
    	break;
		
    case '2':
		 //EXTINT0 EINT1 [6 : 4] = 001 : 高电平触发
		 //EXTINT0 EINT3 [14:12] = 001 : 高电平触发
		 //EXTINT0 EINT2 [10: 8] = 001 : 高电平触发
		 //EXTINT0 EINT7 [30:28] = 001 : 高电平触发
    	rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)  | (0x7<<8)|(0x7<<28))) | 0x1<<4 | 0x1<<8| 0x1<<28| 0x1<<12; //EINT1/2/3/7高电平触发
		break;
		
    case '3':
		 //EXTINT0 EINT1 [6 : 4] = 01X : 下降沿触发
		 //EXTINT0 EINT3 [14:12] = 01X : 下降沿触发
		 //EXTINT0 EINT2 [10: 8] = 01X : 下降沿触发
		 //EXTINT0 EINT7 [30:28] = 01X : 下降沿触发
		rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)  | (0x7<<8)|(0x7<<28))) | 0x2<<4 | 0x2<<8| 0x2<<28| 0x2<<12; //EINT1/2/3/7下降沿触发
    	break;
		
    case '4':
		 //EXTINT0 EINT1 [6 : 4] = 10X : 上升沿触发
		 //EXTINT0 EINT3 [14:12] = 10X : 上升沿触发
		 //EXTINT0 EINT2 [10: 8] = 10X : 上升沿触发
		 //EXTINT0 EINT7 [30:28] = 10X : 上升沿触发
	 	rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)  | (0x7<<8)|(0x7<<28))) | 0x4<<4 | 0x4<<8| 0x4<<28| 0x4<<12; //EINT1/2/3/7上升沿触发
     	break;
		
    case '5':
		 //EXTINT0 EINT1 [6 : 4] = 11X : 双沿触发
		 //EXTINT0 EINT3 [14:12] = 11X : 双沿触发
		 //EXTINT0 EINT2 [10: 8] = 11X : 双沿触发
		 //EXTINT0 EINT7 [30:28] = 11X : 双沿触发
    	rEXTINT0 = (rEXTINT0 & ~((7<<4)|(0x7<<12)  | (0x7<<8)|(0x7<<28))) | 0x6<<4 | 0x6<<8| 0x6<<28| 0x6<<12; //EINT1/2/3/7双沿触发
    	break;
		
    default:
    	break;
    }


    Uart_Printf("==Press the exint buttons or Press any key to exit.==\n");

	//EINTPEND [1,2,3,7] = 0,0,0,0 : Requested
	rEINTPEND = 0xffffff;

	 //SRCPND EINT1 [1] = 1 : Requested
	 //SRCPND EINT2 [2] = 1 : Requested
	 //SRCPND EINT3 [3] = 1 : Requested
	 //SRCPND EINT7 [7] = 1 : Requested
	rSRCPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7; //清除先前的状态位

	 //INTPND EINT7 [7] = 1 : Requested
	 //INTPND EINT3 [3] = 1 : Requested
	 //INTPND EINT2 [2] = 1 : Requested
	 //INTPND EINT1 [1] = 1 : Requested
	rINTPND = BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7;
    
    //外部中断函数声明
    pISR_EINT2=(unsigned)Eint2Int;
    pISR_EINT1=(unsigned)Eint1Int;
    pISR_EINT4_7=(unsigned)Eint4_7Int;
    pISR_EINT3=(unsigned)Eint3Int;

    
    rEINTMASK=~(1<<7) ;
    
    rINTMSK=~(BIT_EINT2|BIT_EINT1|BIT_EINT3|BIT_EINT4_7);//中断开始工作
    
    
    //若有外部输入,种屏蔽中断
      Uart_Getch();
	  Uart_Printf("=TEST FINISHED.=\n");
	 //EINTMASK EINT7 [7] = 1 : Masked	
	 //EINTMASK EINT9 [9] = 1 : Masked	    
    rEINTMASK=0xffffff;

	 //INTMSK EINT1   [1] = 1 : Masked
	 //INTMSK EINT2   [2] = 1 : Masked
	 //INTMSK EINT3   [3] = 1 : Masked
	 //INTMSK EINT4_7 [4] = 1 : Masked 
    rINTMSK=BIT_ALLMSK;
}

⌨️ 快捷键说明

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