?? 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 + -