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 + -
显示快捷键?