4.104.114.84.95
Last change
on this file since 73b5bd5d was
f0f1641,
checked in by Ralf Corsepius <ralf.corsepius@…>, on 04/13/04 at 10:03:32
|
2004-04-13 Ralf Corsepius <ralf_corsepius@…>
- mpc505/ictrl/ictrl.c, mpc505/vectors/vectors.S,
mpc6xx/exceptions/raw_exception.c,
mpc8260/exceptions/raw_exception.c,
mpc8xx/exceptions/raw_exception.c, rtems/powerpc/cache.h,
mpc5xx/ictrl/ictrl.c, mpc5xx/exceptions/raw_exception.c: Include
<rtems/score/powerpc.h> instead of <rtems/score/ppc.h>.
|
-
Property mode set to
100644
|
File size:
1.2 KB
|
Line | |
---|
1 | /* |
---|
2 | * mpc505/509 external interrupt controller management. |
---|
3 | */ |
---|
4 | |
---|
5 | #include "ictrl.h" |
---|
6 | |
---|
7 | #include <rtems.h> |
---|
8 | #include <rtems/score/powerpc.h> |
---|
9 | |
---|
10 | /* |
---|
11 | * Internal routines. |
---|
12 | */ |
---|
13 | |
---|
14 | static unsigned long volatile *const IRQAND = |
---|
15 | (unsigned long volatile *const)0x8007EFA4; |
---|
16 | |
---|
17 | static void nullHandler() |
---|
18 | { |
---|
19 | } |
---|
20 | |
---|
21 | /* Interrupt dispatch table. */ |
---|
22 | static ExtIsrHandler extIrqHandlers[NUM_IRQS] = |
---|
23 | { |
---|
24 | nullHandler, |
---|
25 | nullHandler, |
---|
26 | nullHandler, |
---|
27 | nullHandler, |
---|
28 | nullHandler, |
---|
29 | nullHandler, |
---|
30 | nullHandler |
---|
31 | }; |
---|
32 | |
---|
33 | |
---|
34 | /* RTEMS external interrupt handler. Calls installed external interrupt |
---|
35 | handlers for every pending external interrupt in turn. */ |
---|
36 | static rtems_isr extIsr_( rtems_vector_number i ) |
---|
37 | { |
---|
38 | #define BIT_NUMBER(val, bit) \ |
---|
39 | asm volatile ( "cntlzw %0, %1; srawi %0, %0, 1": "=r" (bit) : "r" (val) ); |
---|
40 | |
---|
41 | int bit; |
---|
42 | (void)i; |
---|
43 | |
---|
44 | BIT_NUMBER(*IRQAND & IMASK_ALL, bit); |
---|
45 | while ( bit < NUM_IRQS ) { |
---|
46 | extIrqHandlers[bit](); |
---|
47 | BIT_NUMBER(*IRQAND & IMASK_ALL, bit); |
---|
48 | } |
---|
49 | } |
---|
50 | |
---|
51 | /* |
---|
52 | * Public routines |
---|
53 | */ |
---|
54 | |
---|
55 | void extIrqSetHandler(ExtInt interrupt,ExtIsrHandler handler) |
---|
56 | { |
---|
57 | extIrqHandlers[interrupt] = handler; |
---|
58 | } |
---|
59 | |
---|
60 | void extIsrInit( void ) |
---|
61 | { |
---|
62 | int i = 0; |
---|
63 | |
---|
64 | extIrqDisable(IMASK_ALL); |
---|
65 | for( i = 0; i < NUM_IRQS; i++) |
---|
66 | extIrqHandlers[i] = nullHandler; |
---|
67 | set_vector(extIsr_,PPC_IRQ_EXTERNAL,1); |
---|
68 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.