微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM系统中断产生流程

ARM系统中断产生流程

时间:11-20 来源:互联网 点击:

#include "register.h"
#include "comm_fun.h"

#define EINT_Key_REQUEST5// Key中断源中断号(6个按键全部使用外部子中断)
#define K1_EINT_BIT(1<8)// K1外部子中断位
#define K2_EINT_BIT(1<11)// K2外部子中断位
#define K3_EINT_BIT(1<13)// K3外部子中断位
#define K4_EINT_BIT(1<14)// K4外部子中断位
#define K5_EINT_BIT(1<15)// K5外部子中断位
#define K6_EINT_BIT(1<19)// K6外部子中断位
/*系统中断处理函数*/
void handle_irq()
{
unsigned long irqOffSet = INTOFFSET;//取得中断号
all_led_off();//关闭全部Led灯
if(EINT_Key_REQUEST==irqOffSet){// Key中断产生(6个按键使用一个总中断号)
if(K1_EINT_BIT & EINTPEND){
led_on(1);//点亮Led1
printk("Key1 pressed/r/n");
EINTPEND &= K1_EINT_BIT;//清除外部子中断源
}else if(K2_EINT_BIT & EINTPEND){
led_on(2);//点亮Led2
printk("Key2 pressed/r/n");
EINTPEND &= K2_EINT_BIT;//清除外部子中断源
}else if(K3_EINT_BIT & EINTPEND){
led_on(3);//点亮Led3
printk("Key3 pressed/r/n");
EINTPEND &= K3_EINT_BIT;//清除外部子中断源
}else if(K4_EINT_BIT & EINTPEND){
led_on(4);//点亮Led4
printk("Key4 pressed/r/n");
EINTPEND &= K4_EINT_BIT;//清除外部子中断源
}else if(K5_EINT_BIT & EINTPEND){
all_led_off(1);//熄灭全部Led
printk("Key5 pressed/r/n");
EINTPEND &= K5_EINT_BIT;//清除外部子中断源
}else if(K6_EINT_BIT & EINTPEND){
all_led_on();//点亮全部Led
printk("Key6 pressed/r/n");
EINTPEND &= K6_EINT_BIT;//清除外部子中断源
}
}
SRCPND &= (1INTPND = INTPND;//清除中断结果
}

main.c:
包含主函数和延时函数,主要实现字符串的循环打印。
#include "register.h"
#include "comm_fun.h"

/*延时*/
void delay(int msec)
{
int i, j;
for(i = 1000; i > 0; i--)
for(j = msec*10; j > 0; j--)
/* do nothing */;
}

/*主函数*/
int main()
{
while(1)
{
printk("main函数在运行.../r/n");
delay(5);//delay
}
return 0;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top