RTEMS  5.1
ictrl.h
1 #ifndef _ICTRL_H
2 #define _ICTRL_H
3 
4 /*
5  * mpc505/509 external interrupt controller management.
6  *
7  * FIXME: should be somehow merged into general RTEMS interrupt
8  * management code.
9  */
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #define _SIU_IRQENABLE ((unsigned long volatile *const)0x8007EFA8)
16 #define _SIU_IRQPEND ((unsigned long volatile *const)0x8007EFA0)
17 
18 /* Interrupt masks. */
19 enum {
20  IMASK_EXT0 = 0x80000000,
21  IMASK_EXT1 = 0x20000000,
22  IMASK_EXT2 = 0x08000000,
23  IMASK_EXT3 = 0x02000000,
24  IMASK_EXT4 = 0x00800000,
25  IMASK_EXT5 = 0x00200000,
26  IMASK_EXT6 = 0x00080000,
27  IMASK_ALL = IMASK_EXT0 | IMASK_EXT1 | IMASK_EXT2 | IMASK_EXT3 |
28  IMASK_EXT4 | IMASK_EXT5 | IMASK_EXT6
29 };
30 
31 /* Interrupt numbers. */
32 typedef enum {
33  IRQ_EXT0,
34  IRQ_EXT1,
35  IRQ_EXT2,
36  IRQ_EXT3,
37  IRQ_EXT4,
38  IRQ_EXT5,
39  IRQ_EXT6,
40  NUM_IRQS
41 } ExtInt;
42 
43 /* Type of external interrupt handlers */
44 typedef void (*ExtIsrHandler) (void);
45 
46 /* Initialization. Must be called once after RTEMS interrupts sybsystem
47  is initiailized. 'predriver_hook' is one of such places. */
48 extern void extIsrInit( void );
49 
50 /* Set interrupt handler 'handler' for external interrupt number
51  'interrupt'. */
52 extern void extIrqSetHandler(ExtInt interrupt, ExtIsrHandler handler);
53 
54 /* Check is external interrupt 'irq' (IMASK_XXXX) is pended. */
55 #define extIrqIsSet(irq) \
56  (*_SIU_IRQPEND & (irq))
57 
58 /* Enable external interrupt 'irq' (IMASK_XXXX) processing. */
59 #define extIrqEnable(irq) \
60  (*_SIU_IRQENABLE |= (irq))
61 
62 /* Disable external interrupt 'irq' (IMASK_XXXX) processing. */
63 #define extIrqDisable(irq) \
64  (*_SIU_IRQENABLE &= ~(irq))
65 
66 /* Check if external interrupt 'irq' (IMASK_XXXX) processing is
67  enabled. */
68 #define extIrqGetEnable \
69  (*_SIU_IRQENABLE)
70 
71 #ifdef __cplusplus
72 }
73 #endif
74 
75 #endif /* _ICTRL_H */