inth.h

来自「OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI」· C头文件 代码 · 共 517 行 · 第 1/2 页

H
517
字号

/*
----------------------------------------------------
INTH_InterruptKind_t                               -
  Identify the kind of interrupt: either FIQ/IRQ   -
----------------------------------------------------
*/
typedef  enum { 
  INTH_IRQ = 0,
  INTH_FIQ = 1
} INTH_InterruptKind_t;

/*
-----------------------------------------------------
INTH_Priority_t: Priority level of the interrupt    -
  0=highest priority                                -
-----------------------------------------------------
*/
typedef UWORD8 INTH_Priority_t;

/*
-------------------------------------------------------------------
     INTH_SensitiveEdge_t: Sensitivity of the incoming interrupt  -
-------------------------------------------------------------------
*/
typedef enum { 
  INTH_FALLING_EDGE_SENSITIVE = 0,
  INTH_LOW_LEVEL_SENSITIVE    = 1
} INTH_SensitiveEdge_t;

/*
-----------------------------------------------------
     INTH_LevelRegister_t: Define an Interruption   -
-----------------------------------------------------
*/
typedef struct {
  INTH_InterruptNumber_t OrderedITNumber;  
  INTH_InterruptKind_t   InterruptKind;
  INTH_Priority_t        Priority;
  INTH_SensitiveEdge_t   SensitiveEdge;
} INTH_LevelRegister_t;


typedef struct 
{
  /* Total number of IT Level Register */
  UWORD8 Count;   
  /* IT Level Registers */
  INTH_LevelRegister_t Item[INTH_NUMBER_OF_INTERRUPTS];            
} INTH_LevelRegisterStruct_t;


/*
-------------------------------------------------------------------
 NAME        : INTH_InitDefaultIT                                 -
 DESCRIPTION : Initialize all the satustar incoming interrupts    -
               defined in the top level satustar specification    -
 PARAMETERS  : None                                               -
 RETURN VALUE: None                                               -
 LIMITATIONS : Must be invoked at once before using the Interrupt -
               handler                                            -
-------------------------------------------------------------------
*/
void INTH_InitDefaultIT(void);



/*
---------------------------------------------------------------------------
 NAME        : INTH_InitLevel                                             -
 DESCRIPTION : Initialize the given interrupt either FIQ or IRQ           -
               into the Interrupt Level Registers at the position defined -
               by OrderedITNumber setting its SensitiveEdge and priority  -
 PARAMETERS  :                                                            -
   OrderedITNumber = predefined order number is the IT position           -
                     into the Interrupt Level Register  range 0 .. 31     -
   InterruptKind   = IRQ of FIQ interrupt                                 -
   SensEdge        = Define the edge triggered interrupt                  -
   Priority        = Priority level of the interrupt                      -
                     0=highest priority                                   -
 RETURN VALUE: None                                                       -
 LIMITATIONS : None                                                       -
---------------------------------------------------------------------------
*/
void INTH_InitLevel (UWORD8                 OrderedITNumber, 
                     INTH_InterruptKind_t InterruptKind ,
                     INTH_Priority_t      Priority,
                     INTH_SensitiveEdge_t SensitiveEdge);


/*
----------------------------------------------------------------------------
 NAME        : INTH_Init                                                   -
 DESCRIPTION : Initialize the whole given interrupt Level Registers        -
 PARAMETERS  : ITLevelRegister: Define the whole Interrupt Level Registers -
 RETURN VALUE: None                                                        -
 LIMITATIONS : None                                                        -
----------------------------------------------------------------------------
*/
void INTH_Init(INTH_LevelRegisterStruct_t ITLevelReg);



/*
---------------------------------------------------------------------------
 NAME        : INTH_ResetIT                                               -
 DESCRIPTION : Reset all the pending IT                                   -
 PARAMETERS  : None                                                       -
 RETURN VALUE: None                                                       -
 LIMITATIONS : None                                                       -
---------------------------------------------------------------------------
*/
UWORD32 INTH_ResetIT(void);



/*
--------------------------------------------------------------------------
 MACRO       : INT_MASK                                                  -
 DESCRIPTION : Compute the mask value corresponding                      -
               to the input argument interruption number                 -
 PARAMETERS  :                                                           -
   Interrupt = Interrupt number (range 0..31) corresponding to the IT    -
               See Interrupt Configuration above                         -
 RETURN VALUE: Mask Value of the interrupt argument                      -
 LIMITATIONS : None                                                      -
--------------------------------------------------------------------------
*/
#define INTH_MASK(Interrupt) (1 << Interrupt )

/*
--------------------------------------------------------------------------
 MACRO       : PENDING_INT                                               -
 DESCRIPTION : Determines whether this interrupt is pending.             -
 PARAMETERS  :                                                           -
   Interrupt = Interrupt number (range 0..31) corresponding to the IT    -
               See Interrupt Configuration above.                        -
 RETURN VALUE: Interrupt number if the interrupt is pending; 0 otherwise -
 LIMITATIONS : None                                                      -
--------------------------------------------------------------------------
*/
#define INTH_PENDING_INT(interrupt) \
          ( *(UWORD32*)INTH_IT_REG_USER_ADDR & INT_MASK(interrupt) )


/*
-----------------------------------------------------------------------
 MACRO       : INTH_EnableOneIt                                       -
 DESCRIPTION : Unmask the given Interrupt to enable its catching      -
 PARAMETERS  :                                                        -
   Interrupt = Interrupt number (range 0..31) corresponding to the IT -
               See Interrupt Configuration above.                     -
 RETURN VALUE: None                                                   -
 LIMITATIONS : None                                                   -
-----------------------------------------------------------------------
*/
void INTH_EnableOneIt(UWORD32 Interrupt);

/*
-----------------------------------------------------------------------
 MACRO       : INTH_DisableOneIt                                      -
 DESCRIPTION : Mask the given Interrupt to prevent its catching       -
 PARAMETERS  :                                                        -
   Interrupt = Interrupt number (range 0..31) corresponding to the IT -
               See Interrupt Configuration above.                     -
 RETURN VALUE: None                                                   -
 LIMITATIONS : None                                                   -
-----------------------------------------------------------------------
*/
void INTH_DisableOneIt(UWORD32 Interrupt);

/*
-----------------------------------------------------------------------
 MACRO       : INTH_EnableAllIt                                       -
 DESCRIPTION : Unmask i.e enable all the interrupts                   -
 PARAMETERS  : None                                                   -
 RETURN VALUE: None                                                   -
 LIMITATIONS : None                                                   -
-----------------------------------------------------------------------
*/
void INTH_EnableAllIt(void);

/*
-----------------------------------------------------------------------
 MACRO       : INTH_DisableAllIt                                      -
 DESCRIPTION : Mask i.e disable all the interrupts                    -
 PARAMETERS  : None                                                   -
 RETURN VALUE: None                                                   -
 LIMITATIONS : None                                                   -
-----------------------------------------------------------------------
*/
void INTH_DisableAllIt(void);




/*
-------------------------------------------------------------------------
 MACRO       : INTH_Ack                                                 -
 DESCRIPTION : Acknowledge the active interrupt and                     -
               return the origin of the interrupt (binary format)       -
               by reading the Source IRQ/FIQ register.                  -
               In case of sensitive edge Interrupt, the IT register bit -
               is deactivated when reading the Source IRQ/FIQ register  -
               otherwise, it's reset when the corresponding interrupt   -
               becomes inactive.                                        -
 PARAMETERS  : Fiq_nIrq: Identify the kind of interrupt: either FIQ/IRQ -
 RETURN VALUE: Number of the active and acknowledged Interrupt          -
 LIMITATIONS : Must be called on Incoming IT                            -
-------------------------------------------------------------------------
*/

UWORD16 INTH_Ack (INTH_InterruptKind_t Fiq_nIrq);


/*
-------------------------------------------------------------------------
 MACRO       : INTH_ValidNext                                           -
 DESCRIPTION : After processing the Interrupt FIQ/IRQ sequence,         -
   Set the dedicated bit NEW_IQ_AGR/NEW_FIQ/AGR of Control Register     -
   in order to reset IRQ Output and Source IRQ/FIQ register and thus,   -
   to allow a new IRQ/FIQ catching.                                     -
 PARAMETERS  : Fiq_nIrq: Identify the kind of interrupt: either FIQ/IRQ -
 RETURN VALUE: None                                                     -
 LIMITATIONS : Must be called after the end of IT treatment to enable   -
               a new interrupt catching                                 -
-------------------------------------------------------------------------
*/
void INTH_ValidNext (INTH_InterruptKind_t Fiq_nIrq);



/*
-------------------------------------------------------------------------
 MACRO       : INTH_GetPending                                          -
 DESCRIPTION : Return the pending interrupts 
 PARAMETERS  : None
 RETURN VALUE: Number of the active and acknowledged Interrupt          -
 LIMITATIONS : Must be called on Incoming IT                            -
-------------------------------------------------------------------------
*/
UWORD32 INTH_GetPending (void);

//----------------------------------------------------------
// NAME         : INTH_GetAndTestResetInth
// DESCRIPTION  : Test all the register at reset and store the result
//                                       
// PARAMETERS   : None
// RETURN VALUE : None
//               
// LIMITATIONS  : Result must be initialized
// ----------------------------------------------------------
BOOL INTH_GetAndTestResetInth(void);

#endif


⌨️ 快捷键说明

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