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

📄 isr.c

📁 arm嵌入式开发实例
💻 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 + -