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

📄 irq.c

📁 linux下三星4510的BSP驱动程序!已经试验成功
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -