#include<s3c2440.h>
#include"isrservice.h"
#include"led.h"
void delay(void);
/****************************************************
* 函数名称:void __irq IRQ_Handler(void)
* 全局变量:无
* 参数说明:无
* 返 回 值;无
* 功 能:中断服务函数,必须加__irq
*****************************************************/
void __irq IRQ_Handler(void)
{
unsigned long oft=INTOFFSET;
unsigned long val;
val=EINTPEND; //EINT寄存器,它的位x为1时,表示EINT已经发生(x为4——23)。
if(val&(1<<8)) //K1被按下,LED1被点亮
{
Led1_On();delay();Led1_Off();
}
if(val&(1<<11)) //K2被按下,LED2被点亮
{
Led2_On();delay();Led2_Off();
}
if(val&(1<<13)) //K3被按下,LED3被点亮
{
Led3_On();delay();Led3_Off();
}
if(val&(1<<14)) //K4被按下,LED4被点亮
{
Led4_On();delay();Led4_Off();
}
//清除中断
if(oft==5)
EINTPEND=(1<<8)|(1<<11)|(1<<13)|(1<<14); //清除EINTPEND寄存器,往某位写入1即可清楚此位
SRCPND=1<<oft; //清除SRCPND寄存器,往某位写入1即可清楚此位
INTPND=1<<oft; //清除INTPND寄存器,往某位写入1即可清楚此位
//注意:清除顺序很重要:先是EINTPEND,然后是SRCPND,最后是INTPND
}
/****************************************************
* 函数名称:static void delay(void)
* 全局变量:无
* 参数说明:无
* 返 回 值;无
* 功 能:延时函数,前边加static是为了限制该函数只在
* 本文件中使用
*****************************************************/
static void delay(void)
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<10;j++);
}
- 1
- 2
- 3
- 4
前往页