irq.c

来自「linux下三星4510的BSP驱动程序!已经试验成功」· C语言 代码 · 共 99 行

C
99
字号
#include "../inc/irq.h"
#include "../inc/def.h"
#include "../inc/utils.h"
#include "../inc/config.h"
#include "../inc/board.h"
#include "../inc/s3c4510b.h"

static void DummyIsr(void) {puts("\n into dummy \n");}
void (*InterruptHandlers[MAXHNDLRS])(void);
void InitIntHandlerTable(void);

void SwiHandler(void)
{
	puts("Swi Interrupt detected\n");
	while(1);
}
void DataAbortHandler(void) 
{
	puts("Data Abort detected\n");
	while (1);
}

void FetchAbortHandler(void)
{
	puts("Prefetch Abort detected\n");
	while (1);
}

void UndefHandler() 
{
	puts("Halt on Undefined instruction\n");
	while (1);
}

void FiqHandler(void)
{
	puts("Halt on FIQ!\n");
	while(1);
}
/*为相应的中断向量地址分配相应
处理程序的响应入口*/

void ClrIntStatus(void)

{   
    outl(0x3ffffff,INTMSK);
}
/*********************************************************/
/* InitInterrupt: Initialize Interrupt		 */
/*********************************************************/
void InitInterrupt(void) 
{
      ClrIntStatus();         // Clear All interrupt 
      InitIntHandlerTable() ;
      SetIntMode();
      
}

void SetIntMode(void)
{
    
    outl(0x0,INTMOD);
    outl(0x1fffff,INTPND);  
    //puts("\rAll interrupt pending cleared!!!\r\r");
}

void ISR_IrqHandler(void)
{      
     unsigned int IntOffSet;
     //puts("\n into irq \n");     
     IntOffSet = (unsigned int)inl(INTOFFSET);
     Clear_PendingBit(IntOffSet>>2) ;
     (*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
}


/*********************************************************/
/* SysSetInterrupt: Setup Interrupt Handler Vector Table */
/*********************************************************/

void SysSetInterrupt(unsigned int vector, void (*handler)())
{
	InterruptHandlers[vector] = handler;

}


/***********************************************************************/
/* InitIntHandlerTable: Initialize the interrupt handler table         */
/*     NOTE(S): This should be called during system initialization     */
/***********************************************************************/
void InitIntHandlerTable(void)
{
	int i;
 
	for (i = 0; i < MAXHNDLRS; i++)
    		InterruptHandlers[i] = DummyIsr;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?