⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt.c

📁 一个基于MMU的操作系统
💻 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 + -