📄 key_eint.c
字号:
/*
*********************************************************
* Copyright (c)
* All rights reserved.
*
* 文件名称:key_Eint.c
* 文件标识:
* 摘 要:S3C2410 External interrupt test Test Program
* 当前版本:1.0
* 作 者:刘征
* 完成日期:2005.4.3
*
* 取代版本:
* 作 者:
* 完成日期:
*********************************************************
*/
/*
*********************************************************
* 头文件
*********************************************************
*/
#include <string.h>
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
/*
*********************************************************
* 函数介绍:本函数是Eint0中断处理程序。
* 输入参数:无
* 输出参数:无
* 返回值 :无
*********************************************************
*/
static void __irq Eint0Int(void)
{
ClearPending(BIT_EINT0);
Uart_Printf("EINT0 interrupt is occurred.\n");
}
/*
*********************************************************
* 函数介绍:本函数是Eint1中断处理程序。
* 输入参数:无
* 输出参数:无
* 返回值 :无
*********************************************************
*/
static void __irq Eint1Int(void)
{
ClearPending(BIT_EINT1);
Uart_Printf("EINT1 interrupt is occurred.\n");
}
/*
*********************************************************
* 函数介绍:本函数是Eint2中断处理程序。
* 输入参数:无
* 输出参数:无
* 返回值 :无
*********************************************************
*/
static void __irq Eint2Int(void)
{
ClearPending(BIT_EINT2);
Uart_Printf("EINT2 interrupt is occurred.\n");
}
/*
*********************************************************
* 函数介绍:本函数是Eint3中断处理程序。
* 输入参数:无
* 输出参数:无
* 返回值 :无
*********************************************************
*/
static void __irq Eint3Int(void)
{
ClearPending(BIT_EINT3);
Uart_Printf("EINT3 interrupt is occurred.\n");
}
/*
*********************************************************
* 函数介绍:本函数是测试Eint程序。
* 输入参数:无
* 输出参数:无
* 返回值 :无
*********************************************************
*/
void Test_Eint(void)
{
volatile unsigned int save_gpf;
int i;
int extintMode;
save_gpf = rGPFCON;//保存GPF口原设置
Uart_Printf("[External Interrupt Test through PF 0/1/2/3]\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();
Uart_Printf("The external interrupt type is : =%c\n",extintMode);
rGPFCON = (rGPFCON & 0xff00)|(1<<7)|(1<<5)|(1<<3)|(1<<1); //PF0/1/2/3 = EINT0/1/2/3
switch(extintMode)
{
case '1':
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x0<<12 | 0x0<<8 | 0x0<<4 | 0x0<<0; //EINT0/1/2/3=low level triggered
break;
case '2':
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x1<<12 | 0x1<<8 | 0x1<<4 | 0x1<<0; //EINT0/1/2/3=high level triggered
break;
case '3':
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x2<<12 | 0x2<<8 | 0x2<<4 | 0x2<<0; //EINT0/1/2/3=falling edge triggered
break;
case '4':
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x4<<12 | 0x4<<8 | 0x4<<4 | 0x4<<0; //EINT0/1/2/3=rising edge triggered
break;
case '5':
rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x6<<12 | 0x6<<8 | 0x6<<4 | 0x6<<0; //EINT0/1/2/3=both edge triggered
break;
default:
Uart_Printf("you are not select extintMode !/n");
break;
}
//如果选择的是高电平中断模式,因为电路设计时KEY是上拉了电阻的。所以会造成中断立即不断产生,难以停下的情况(这种现象正常)。
Uart_Printf("Press the EINT0/1/2/3 buttons or Press any key to exit.\n");
//设置中断入口函数
pISR_EINT0=(U32)Eint0Int;
pISR_EINT1=(U32)Eint1Int;
pISR_EINT2=(U32)Eint2Int;
pISR_EINT3=(U32)Eint3Int;
rEINTPEND = 0xffffff;
rSRCPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3; //to clear the previous pending states
rINTPND = BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3;
rINTMSK=~(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT3);//开中断
Uart_Getch();
Uart_Printf("
rINTMSK=BIT_ALLMSK; //关中断
rGPFCON = save_gpf;//还原GPF口设置
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -