ARM系统中断产生流程
#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 &= (1
}
包含主函数和延时函数,主要实现字符串的循环打印。
#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;
}
ARM系统中断产生流 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)