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

📄 eint.c

📁 嵌入式系统设计与开发实例详解--基于ARM的应用(采用ARM7TDMI内核的、三星公司推出的S3C44B0X) 第一部分包含:ADCtest,ARPscan,ColorLCDtest,EINTtes
💻 C
字号:
#include <string.h>
#include "..\Target\44b.h"
#include "..\Target\44blib.h"
#include "eint.h"

void __irq Eint4567Isr(void);

volatile char which_int=0;

void Test_Eint(void)
{
    unsigned int save_G,save_PG;

    Uart_Printf("\n[External Interrupt Test]\n");
    Uart_Printf("Note:Because Keyboard's pressing exist shake,many times\n");
    Uart_Printf("of interrupt maybe triggered.\n");
/***Vectored interrupt test***/
    rINTCON=0x1;//disable fiq, enable irq

    pISR_EINT4567=(int)Eint4567Isr;
    
//    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");
	    break;
	default :
	    Uart_Printf("which_int=%d\n",which_int);
	    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=rEXTINTPND;
    rEXTINTPND=0x0f;		//clear EXTINTPND reg.		
    rI_ISPC=BIT_EINT4567;	//clear pending_bit
}


⌨️ 快捷键说明

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