Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:53

0001 #ifndef _ICTRL_H
0002 #define _ICTRL_H
0003 
0004 /*
0005  * mpc505/509 external interrupt controller management.
0006  *
0007  * FIXME: should be somehow merged into general RTEMS interrupt
0008  * management code.
0009  */
0010 
0011 #ifdef __cplusplus
0012 extern "C" {
0013 #endif
0014 
0015 #define _SIU_IRQENABLE  ((unsigned long volatile *const)0x8007EFA8)
0016 #define _SIU_IRQPEND    ((unsigned long volatile *const)0x8007EFA0)
0017 
0018 /* Interrupt masks. */
0019 enum {
0020   IMASK_EXT0  = 0x80000000,
0021   IMASK_EXT1  = 0x20000000,
0022   IMASK_EXT2  = 0x08000000,
0023   IMASK_EXT3  = 0x02000000,
0024   IMASK_EXT4  = 0x00800000,
0025   IMASK_EXT5  = 0x00200000,
0026   IMASK_EXT6  = 0x00080000,
0027   IMASK_ALL   = IMASK_EXT0 | IMASK_EXT1 | IMASK_EXT2 | IMASK_EXT3 |
0028                 IMASK_EXT4 | IMASK_EXT5 | IMASK_EXT6
0029 };
0030 
0031 /* Interrupt numbers. */
0032 typedef enum {
0033   IRQ_EXT0,
0034   IRQ_EXT1,
0035   IRQ_EXT2,
0036   IRQ_EXT3,
0037   IRQ_EXT4,
0038   IRQ_EXT5,
0039   IRQ_EXT6,
0040   NUM_IRQS
0041 } ExtInt;
0042 
0043 /* Type of external interrupt handlers */
0044 typedef void (*ExtIsrHandler) (void);
0045 
0046 /* Initialization. Must be called once after RTEMS interrupts sybsystem
0047    is initiailized. 'predriver_hook' is one of such places. */
0048 extern void extIsrInit( void );
0049 
0050 /* Set interrupt handler 'handler' for external interrupt number
0051    'interrupt'. */
0052 extern void extIrqSetHandler(ExtInt interrupt, ExtIsrHandler handler);
0053 
0054 /* Check is external interrupt 'irq' (IMASK_XXXX) is pended. */
0055 #define extIrqIsSet(irq) \
0056   (*_SIU_IRQPEND & (irq))
0057 
0058 /* Enable external interrupt 'irq' (IMASK_XXXX) processing. */
0059 #define extIrqEnable(irq) \
0060   (*_SIU_IRQENABLE |= (irq))
0061 
0062 /* Disable external interrupt 'irq' (IMASK_XXXX) processing. */
0063 #define extIrqDisable(irq) \
0064   (*_SIU_IRQENABLE &= ~(irq))
0065 
0066 /* Check if external interrupt 'irq' (IMASK_XXXX) processing is
0067    enabled. */
0068 #define extIrqGetEnable \
0069   (*_SIU_IRQENABLE)
0070 
0071 #ifdef __cplusplus
0072 }
0073 #endif
0074 
0075 #endif /* _ICTRL_H */