📄 isr.c
字号:
/**************************************************************************************************
*
* Copyright (c) 2001 - 2003 Winbond Electronics Corp. All rights reserved.
*
* FILENAME
* isr.c
*
* VERSION
* 1.0
*
* DESCRIPTION
* This file contains the IRQ exception handler
*
* DATA STRUCTURES
* 1. IRQ_HandlerTable[]
*
* FUNCTIONS
* 1. SetIntISR()
* 2. IRQ_IntHandler()
*
* HISTORY
* 04/10/2003 Ver 1.0 Created by PC30 MNCheng
*
* REMARK
* None
*
*************************************************************************************************/
//#include <stdio.h>
#include "740defs.h"
/* Define HW_VECTOR_NUMBER when using AIC hardware priority encoding mechanism */
#define HW_VECTOR_NUMBER
typedef void (*fptr)(); /* function pointer */
fptr IRQ_HandlerTable[19]; /* Interrupt Handler Table */
void SetIntISR(int vector, void (*handler)())
{
IRQ_HandlerTable[vector] = handler; /* install interrupt service routine */
}
#ifdef HW_VECTOR_NUMBER
/* IRQ handler for using IPER/EOSCR - hardware priority mechanism */
__irq void IRQ_IntHandler()
{
uint32 irqVect, irqNum;
irqVect= AIC_IPER; /* MUST read the IPER */
//irqNum = AIC_ISNR; /* read the interrupt source number */
irqNum = inpw(AIC_ISNR);
//UART_printf("irqNum = %d\n", irqNum);
(*IRQ_HandlerTable[irqNum])();
AIC_EOSCR = 0; /* acknowledge AIC to report next interrupt request */
}
#else
/* IRQ handler for using ISR - software priority mechanism */
__irq void IRQ_IntHandler()
{
int irqNum, mask, irq_status;
irq_status = AIC_ISR; /* read interrupt status */
mask = 0x00000002;
for (irqNum=1; irqNum <= 18; irqNum++) /* search sequence 1, 2,.., 18 */
{
if (mask & irq_status) /* is interrupt request asked ? */
{
//UART_printf("irqNum = %d\n", irqNum);
(*IRQ_HandlerTable[irqNum])(); /* jump to the interrupt service routine */
}
mask <<= 1; /* continue search the INT source */
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -