📄 isr.c
字号:
#include "isr.h"
#include "typDef.h"
#include "head.h"
volatile UINT32 IntOffSet;
void (*InterruptHandlers[MAXHNDLRS])(void);
static void DummyIsr(void) {}
void ClrIntStatus(void)
{
INTMASK = 0x3fffff; // All interrupt disabled include global bit
INTPEND = 0x1fffff; // All clear pending
INTMODE = 0x0; // All IRQ mode
// INTMODE = 0x1fffff; // All FIQ mode
/*
* Interrupt Priority Reset value. Need to be changed priority,
* Set interrupt priority register. In this case, Global interrupt
* mask bit must be disabled.
*
*/
//INTPRI0 = 0x03020100;
//INTPRI1 = 0x07060504;
//INTPRI2 = 0x0b0a0908;
//INTPRI3 = 0x0f0e0d0c;
//INTPRI4 = 0x13121110;
//INTPRI5 = 0x00000014;
//INTOFFSET = Read Only Register
}
void ISR_UndefHandler(void)
{
}
void ISR_PrefetchHandler(void)
{
}
void ISR_AbortHandler(void)
{
}
void ISR_IrqHandler(void)
{
IntOffSet = INTOFFSET;
Clear_PendingBit(IntOffSet>>2) ;
(*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
}
void ISR_FiqHandler(void)
{
IntOffSet =INTOFFSET;
Clear_PendingBit(IntOffSet>>2) ;
(*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
}
/***********************************************************************/
/* InitIntHandlerTable: Initialize the interrupt handler table */
/* NOTE(S): This should be called during system initialization */
/***********************************************************************/
void InitIntHandlerTable(void)
{
REG32 i;
for (i = 0; i < MAXHNDLRS; i++)
InterruptHandlers[i] = DummyIsr;
}
/*********************************************************/
/* SysSetInterrupt: Setup Interrupt Handler Vector Table */
/*********************************************************/
void SysSetInterrupt(REG32 vector, void (*handler)())
{
InterruptHandlers[vector] = handler;
}
/*********************************************************/
/* InitInterrupt: Initialize Interrupt */
/*********************************************************/
void InitInterrupt(void)
{
ClrIntStatus(); // Clear All interrupt
InitIntHandlerTable() ;
}
void ARMDisableInt(void)
{
Disable_Int(nGLOBAL_INT);
}
void ARMEnableInt(void)
{
Enable_Int(nGLOBAL_INT);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -