RTEMS 6.1-rc5
Loading...
Searching...
No Matches
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
12extern "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. */
19enum {
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. */
32typedef 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 */
44typedef void (*ExtIsrHandler) (void);
45
46/* Initialization. Must be called once after RTEMS interrupts sybsystem
47 is initiailized. 'predriver_hook' is one of such places. */
48extern void extIsrInit( void );
49
50/* Set interrupt handler 'handler' for external interrupt number
51 'interrupt'. */
52extern 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 */