lpc_vic.h
上传用户:sourcesun
上传日期:2013-09-23
资源大小:362k
文件大小:4k
源码类别:

DNA

开发平台:

Asm

  1. /*************************************************************************
  2.  *
  3.  *    Used with ICCARM and AARM.
  4.  *
  5.  *    (c) Copyright IAR Systems 2003
  6.  *
  7.  *    File name   : LPC_Vic.h
  8.  *    Description :
  9.  *
  10.  *    History :
  11.  *    1. Data: July 8th, 2004
  12.  *       Author: Wilson Liu
  13.  *       Description: Create the basic function
  14.  *
  15.  *    2. Data: August 4th, 2004
  16.  *       Author: Shawn Zhang
  17.  *       Description: Clean up the functions. Support nonvector interrupt at first.
  18.  *
  19.  *    3. Data        : Oct 11, 2004
  20.  *       Author      : Stanimir Bonev
  21.  *       Description : Modify some function and interface
  22.  *
  23.  *    $Revision: 1.1.2.1 $
  24.  **************************************************************************/
  25. #include <includes.h>
  26. #ifndef __LPC_VIC_H
  27. #define __LPC_VIC_H
  28. #define IRQ_FLAG        0x80
  29. #define FIQ_FLAG        0x40
  30. // Interrupt protection type
  31. typedef enum {
  32.   UserandPrivilegedMode=0,
  33.   PrivilegedMode
  34. }LPC_Vic_ProtectionMode_t;
  35. typedef enum {
  36.   VIC_Slot0 = 0,  // high priority
  37.   VIC_Slot1,VIC_Slot2,VIC_Slot3,VIC_Slot4,VIC_Slot5,VIC_Slot6,VIC_Slot7,VIC_Slot8,
  38.   VIC_Slot9,VIC_Slot10,VIC_Slot11,VIC_Slot12,VIC_Slot13,VIC_Slot14,VIC_Slot15
  39. }LPC_VicIrqSlots_t;
  40. /* Declare API functions */
  41. void VIC_SetProtectionMode(LPC_Vic_ProtectionMode_t ProtectionType);
  42. LPC_Vic_ProtectionMode_t VIC_GetProtectionMode(void);
  43. void VIC_Init(void);
  44. void VIC_EnableInt(unsigned int IntType);
  45. void VIC_DisableInt(unsigned int IntType);
  46. unsigned int VIC_GetIRQStatus(void);
  47. unsigned int VIC_GetFIQStatus(void);
  48. void VIC_EnableNonVectoredIRQ(void(*pIRQSub)());
  49. void VIC_DisableNonVectoredIRQ(void);
  50. void VIC_SetVectoredIRQ(void(*pIRQSub)(), LPC_VicIrqSlots_t VicIrqSlot, unsigned int VicIntSouce);
  51. void VIC_EnaFastInt(unsigned int FastIntMask);
  52. void VIC_DisFastInt(unsigned int FastIntMask);
  53.  /*************************************************************************
  54.  * Function Name: restore_IRQ
  55.  * Parameters: unsigned long IFlag
  56.  * Return: void
  57.  * Description: Restore I flag state
  58.  *
  59.  *************************************************************************/
  60. inline
  61. __arm void restore_IRQ(unsigned long IFlag)
  62. {
  63. unsigned long tmp;
  64.   tmp=__get_CPSR();
  65.   __set_CPSR(tmp & (IFlag | ~IRQ_FLAG));
  66. }
  67.  /*************************************************************************
  68.  * Function Name: disable_IRQ
  69.  * Parameters:
  70.  * Return: unsigned long
  71.  * Description: Disable IRQ and return previous state state of flgas I
  72.  *
  73.  *************************************************************************/
  74. inline
  75. __arm unsigned long disable_IRQ(void)
  76. {
  77. unsigned long tmp;
  78.   tmp=__get_CPSR();
  79.   __set_CPSR(tmp | IRQ_FLAG);
  80.   return tmp & IRQ_FLAG;
  81. }
  82.  /*************************************************************************
  83.  * Function Name: restore_interrupts
  84.  * Parameters: unsigned long IFlag
  85.  * Return: void
  86.  * Description: Restore F,I flag state
  87.  *
  88.  *************************************************************************/
  89. inline
  90. __arm void restore_interrupts(unsigned long IFlag)
  91. {
  92. unsigned long tmp;
  93.   tmp=__get_CPSR();
  94.   __set_CPSR(tmp & (IFlag | ~(IRQ_FLAG | FIQ_FLAG)));
  95. }
  96.  /*************************************************************************
  97.  * Function Name: disable_interrupts
  98.  * Parameters:
  99.  * Return: unsigned long
  100.  * Description: Disable interrupts and return previous state state of flgas I
  101.  *
  102.  *************************************************************************/
  103. inline
  104. __arm unsigned long disable_interrupts(void)
  105. {
  106. unsigned long tmp;
  107.   tmp=__get_CPSR();
  108.   __set_CPSR(tmp | IRQ_FLAG | FIQ_FLAG);
  109.   return tmp;
  110. }
  111. #endif // __LPC_VIC_H