www.pudn.com > LPC2148_IAR_LPC2148.zip > lpc_vic.h
/************************************************************************* * * Used with ICCARM and AARM. * * (c) Copyright IAR Systems 2003 * * File name : LPC_Vic.h * Description : * * History : * 1. Data: July 8th, 2004 * Author: Wilson Liu * Description: Create the basic function * * 2. Data: August 4th, 2004 * Author: Shawn Zhang * Description: Clean up the functions. Support nonvector interrupt at first. * * 3. Data : Oct 11, 2004 * Author : Stanimir Bonev * Description : Modify some function and interface * * $Revision: 1.1.2.1 $ **************************************************************************/ #include#ifndef __LPC_VIC_H #define __LPC_VIC_H #define IRQ_FLAG 0x80 #define FIQ_FLAG 0x40 // Interrupt protection type typedef enum { UserandPrivilegedMode=0, PrivilegedMode }LPC_Vic_ProtectionMode_t; typedef enum { VIC_Slot0 = 0, // high priority VIC_Slot1,VIC_Slot2,VIC_Slot3,VIC_Slot4,VIC_Slot5,VIC_Slot6,VIC_Slot7,VIC_Slot8, VIC_Slot9,VIC_Slot10,VIC_Slot11,VIC_Slot12,VIC_Slot13,VIC_Slot14,VIC_Slot15 }LPC_VicIrqSlots_t; /* Declare API functions */ void VIC_SetProtectionMode(LPC_Vic_ProtectionMode_t ProtectionType); LPC_Vic_ProtectionMode_t VIC_GetProtectionMode(void); void VIC_Init(void); void VIC_EnableInt(unsigned int IntType); void VIC_DisableInt(unsigned int IntType); unsigned int VIC_GetIRQStatus(void); unsigned int VIC_GetFIQStatus(void); void VIC_EnableNonVectoredIRQ(void(*pIRQSub)()); void VIC_DisableNonVectoredIRQ(void); void VIC_SetVectoredIRQ(void(*pIRQSub)(), LPC_VicIrqSlots_t VicIrqSlot, unsigned int VicIntSouce); void VIC_EnaFastInt(unsigned int FastIntMask); void VIC_DisFastInt(unsigned int FastIntMask); /************************************************************************* * Function Name: restore_IRQ * Parameters: unsigned long IFlag * Return: void * Description: Restore I flag state * *************************************************************************/ inline __arm void restore_IRQ(unsigned long IFlag) { unsigned long tmp; tmp=__get_CPSR(); __set_CPSR(tmp & (IFlag | ~IRQ_FLAG)); } /************************************************************************* * Function Name: disable_IRQ * Parameters: * Return: unsigned long * Description: Disable IRQ and return previous state state of flgas I * *************************************************************************/ inline __arm unsigned long disable_IRQ(void) { unsigned long tmp; tmp=__get_CPSR(); __set_CPSR(tmp | IRQ_FLAG); return tmp & IRQ_FLAG; } /************************************************************************* * Function Name: restore_interrupts * Parameters: unsigned long IFlag * Return: void * Description: Restore F,I flag state * *************************************************************************/ inline __arm void restore_interrupts(unsigned long IFlag) { unsigned long tmp; tmp=__get_CPSR(); __set_CPSR(tmp & (IFlag | ~(IRQ_FLAG | FIQ_FLAG))); } /************************************************************************* * Function Name: disable_interrupts * Parameters: * Return: unsigned long * Description: Disable interrupts and return previous state state of flgas I * *************************************************************************/ inline __arm unsigned long disable_interrupts(void) { unsigned long tmp; tmp=__get_CPSR(); __set_CPSR(tmp | IRQ_FLAG | FIQ_FLAG); return tmp; } #endif // __LPC_VIC_H