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

📄 irq.c

📁 nxp的LPC2888处理器的示例代码.
💻 C
字号:
/*****************************************************************************
 *   irq.c: Interrupt handler C file for Philips LPC288x Family Microprocessors
 *
 *   Copyright(C) 2006, Philips Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2007.02.01  ver 1.00    Prelimnary version, first Release
 *
******************************************************************************/
#include "LPC288x.h"			/* LPC310X Peripheral Registers	*/
#include "type.h"
#include "irq.h"

volatile DWORD irqIndex;

/******************************************************************************
** Function name:		_IRQ_Handler
**
** Descriptions:		Interrupt handler, called in the startup.s file.
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void IRQ_Handler( void ) __irq
{
  void (* fptr )();
  volatile DWORD *funcptr;
  volatile DWORD regVal;

  while ( (regVal=INT_PENDING) & 0x3FFFFFFE )
  { 		
	funcptr=(volatile DWORD *)INT_VECTOR0;
	irqIndex = (DWORD)((DWORD)funcptr & 0xFF) >> 3;
	/* fptr would now point to that ISR location */
	if ( regVal & (0x01 << irqIndex) )
	{
	  if ( funcptr != NULL )
	  {
  		fptr=(void (*)(void))(* funcptr);
		fptr();
	  }
	}
  }
  return;
}

/******************************************************************************
** Function name:		FIQ_Exception
**
** Descriptions:		Fast interrupt handler, called in the startup.s.
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void FIQ_Handler( void ) __irq
{
    while ( 1 );				   
}

/******************************************************************************
** Function name:		init_interrupt
**
** Descriptions:		Initialize interrupt controller.
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void init_interrupt(void) 
{
  DWORD i;
  DWORD *vect_handler, *vect_priority;


  /* set all the vector and vector control register to 0 */
  for ( i = 0; i < IRQ_SIZE * 2; i+=2 )
  {
	vect_handler = (DWORD *)(IRQ_TABLE_BASE + i*4);
	vect_priority = (DWORD *)(IRQ_TABLE_BASE + (i+1)*4);
	*vect_handler = 0x0;	
	*vect_priority = 0x0;
  }
  return;
}

/******************************************************************************
** Function name:		Install_IRQ
**
** Descriptions:		Install interrupt handler
** parameters:			Interrupt number, priority, and interrupt handler
** Returned value:		TRUE or FALSE
** 
******************************************************************************/
DWORD install_IRQ(BYTE IntNum, BYTE Priority, HandlerAddr IRQHandler )
{
  DWORD *vect_addr;
  if ( (IntNum < 32) && (IRQHandler != (HandlerAddr)NULL) ) 
  {                            
	/* Use the Interrupt source number to index to the ISR address 
	entry from base address*/
	vect_addr=(DWORD *)(IRQ_TABLE_BASE |(IntNum<<3));
	*vect_addr = (DWORD)IRQHandler;
	vect_addr++;
	*vect_addr = Priority;
	return( TRUE );
  }
  else
  {
	return( FALSE );
  }
}

/******************************************************************************
**                            End Of File
******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -