📄 interrupt.c
字号:
#include <s3c2410.h>
#include <interrupt.h>
#include <serial.h>
#include <sched.h>
void IRQ_Handle()
{
unsigned long oft = INTOFFSET;
switch( oft )
{
case EINT1_OFT: printk("EINT1, K1 pressed!\n\r"); break;
case EINT2_OFT: printk("EINT2, K2 pressed!\n\r"); break;
case EINT3_OFT: printk("EINT3, K3 pressed!\n\r"); break;
case EINT4_7_OFT: printk("EINT7, K4 pressed!\n\r"); break;
case INT_TIMER0_OFT: do_timer(); break;
default: printk("Interrupt unknown!\n\r"); break;
}
DPRINTK(KERNEL_DEBUG,"kernel:clean the irq\n\r");
//清中断
if( oft == 4 ) EINTPEND = 1<<7; //EINT4-7合用IRQ4,注意EINTPEND[3:0]保留未用,向这些位写入1可能导致未知结果
SRCPND = 1<<oft;
INTPND = INTPND;
}
/********************************************************************
* 2006.6.20:添加保存原中断状态代码,并修改为inline
* 需要修改编译选项支持inline关键字
********************************************************************/
//inline void OS_ENTER_CRITICAL(void)
//{
//__asm__(
// "mrs r0, cpsr\n" /*读cpsr*/
// "stmdb sp!, {r0}\n" /*保存原中断状态*/
// "orr r0, r0, #0x80\n" /*I-bit=1*/
// "msr cpsr_c, r0\n" /*设置I-bit=1,禁止IRQ中断*/
// :::"r0"
// );
//}
/********************************************************************
* 2006.6.20:添加恢复原中断状态代码,并修改为inline
********************************************************************/
//inline void OS_EXIT_CRITICAL(void)
//{
//__asm__(
// "mrs r0, cpsr\n" /*读cpsr*/
// "ldmia sp!, {r1}\n"
// "tst r1, #0x80\n"
// "biceq r0, r0, #0x80\n" /*I-bit=0*/
// "msr cpsr_c, r0\n" /*设置I-bit=0,开IRQ中断*/
// :::"r0","r1"
// );
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -