blob: 303ece825d1927d08bc7fed2ba455f968afc19bb (
plain) (
tree)
|
|
#ifndef _ICTRL_H
#define _ICTRL_H
/*
* mpc505/509 external interrupt controller management.
*
* FIXME: should be somehow merged into general RTEMS interrupt
* management code.
*/
#ifdef __cplusplus
extern "C" {
#endif
#define _SIU_IRQENABLE ((unsigned long volatile *const)0x8007EFA8)
#define _SIU_IRQPEND ((unsigned long volatile *const)0x8007EFA0)
/* Interrupt masks. */
enum {
IMASK_EXT0 = 0x80000000,
IMASK_EXT1 = 0x20000000,
IMASK_EXT2 = 0x08000000,
IMASK_EXT3 = 0x02000000,
IMASK_EXT4 = 0x00800000,
IMASK_EXT5 = 0x00200000,
IMASK_EXT6 = 0x00080000,
IMASK_ALL = IMASK_EXT0 | IMASK_EXT1 | IMASK_EXT2 | IMASK_EXT3 |
IMASK_EXT4 | IMASK_EXT5 | IMASK_EXT6
};
/* Interrupt numbers. */
typedef enum {
IRQ_EXT0,
IRQ_EXT1,
IRQ_EXT2,
IRQ_EXT3,
IRQ_EXT4,
IRQ_EXT5,
IRQ_EXT6,
NUM_IRQS
} ExtInt;
/* Type of external interrupt handlers */
typedef void (*ExtIsrHandler) (void);
/* Initialization. Must be called once after RTEMS interrupts sybsystem
is initiailized. 'predriver_hook' is one of such places. */
extern void extIsrInit( void );
/* Set interrupt handler 'handler' for external interrupt number
'interrupt'. */
extern void extIrqSetHandler(ExtInt interrupt, ExtIsrHandler handler);
/* Check is external interrupt 'irq' (IMASK_XXXX) is pended. */
#define extIrqIsSet(irq) \
(*_SIU_IRQPEND & (irq))
/* Enable external interrupt 'irq' (IMASK_XXXX) processing. */
#define extIrqEnable(irq) \
(*_SIU_IRQENABLE |= (irq))
/* Disable external interrupt 'irq' (IMASK_XXXX) processing. */
#define extIrqDisable(irq) \
(*_SIU_IRQENABLE &= ~(irq))
/* Check if external interrupt 'irq' (IMASK_XXXX) processing is
enabled. */
#define extIrqGetEnable \
(*_SIU_IRQENABLE)
#ifdef __cplusplus
}
#endif
#endif /* _ICTRL_H */
|