Mercurial > ecos
annotate packages/hal/v85x/arch/current/src/vectors.S @ 3292:7f8e529b4d82 default tip
Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
| author | vae |
|---|---|
| date | Wed, 29 Apr 2015 23:31:48 +0000 |
| parents | 74dbf4c3f2e1 |
| children |
| rev | line source |
|---|---|
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
1 // #======================================================================== |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
2 // # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
3 // # vectors.S |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
4 // # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
5 // # NEC/V85x exception/interrupt vectors |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
6 // # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
7 // #======================================================================== |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
8 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
9 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
158
diff
changeset
|
12 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
13 // eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
14 // the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
15 // Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
16 // version. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
158
diff
changeset
|
17 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
18 // eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
21 // for more details. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
158
diff
changeset
|
22 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
23 // You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
24 // along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
158
diff
changeset
|
26 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
27 // As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
28 // macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
29 // and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
30 // this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
31 // the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
32 // must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
33 // General Public License v2. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
158
diff
changeset
|
34 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
35 // This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
36 // on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
37 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
38 // ####ECOSGPLCOPYRIGHTEND#### |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
39 // #======================================================================== |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
40 // ######DESCRIPTIONBEGIN#### |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
41 // # |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
42 // # Author(s): gthomas, jlarmour |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
43 // # Contributors: gthomas, jlarmour |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
44 // # Date: 2001-03-21 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
45 // # Purpose: NEC/V85x exception vectors |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
46 // # Description: This file defines the code placed into the exception |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
47 // # vectors. It also contains the first level default VSRs |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
48 // # that save and restore state for both exceptions and |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
49 // # interrupts. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
50 // # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
51 // #####DESCRIPTIONEND#### |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
52 // # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
53 // #======================================================================== |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
54 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
55 #include <pkgconf/system.h> |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
56 #include <pkgconf/hal.h> |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
57 #include <pkgconf/hal_v85x.h> |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
58 #ifdef CYGPKG_KERNEL |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
59 #include <pkgconf/kernel.h> |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
60 #else |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
61 # undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
62 # undef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
63 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
64 #include <cyg/hal/hal_platform_setup.h> |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
65 #include CYGHWR_MEMORY_LAYOUT_H |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
66 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
67 #include <cyg/hal/nec_offsets.inc> |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
68 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
69 // Two different macros in case we ever decide to differentiate |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
70 // between exceptions and interrupts. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
71 .macro EXCEPTION |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
72 .org reset_vector+(0x0010*VECTOR) |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
73 addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
74 st.w r8,CYGARC_REG_R8[sp] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
75 movea VECTOR,r0,r8 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
76 jr exception |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
77 .set VECTOR, VECTOR+1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
78 .endm |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
79 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
80 .macro INTERRUPT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
81 .org reset_vector+(0x0010*VECTOR) |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
82 addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
83 st.w r8,CYGARC_REG_R8[sp] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
84 movea VECTOR,r0,r8 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
85 jr exception |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
86 .set VECTOR, VECTOR+1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
87 .endm |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
88 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
89 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
90 .section ".vectors","ax" |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
91 .globl reset_vector |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
92 reset_vector: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
93 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
94 // |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
95 // These are the hardware exception vectors. |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
96 // |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
97 __ROM_vsr: |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
98 // start of ROM |
|
158
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
99 mov r0,sp // needed for platforms that have NMI 2 insns after reset |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
100 // This jump works even for ROMRAM because it is PC relative |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
101 jr start |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
102 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
103 .set VECTOR, 1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
104 .rept CYGNUM_HAL_EXCEPTION_COUNT-1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
105 EXCEPTION |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
106 .endr |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
107 .set VECTOR, CYGNUM_HAL_ISR_MIN |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
108 .rept CYGNUM_HAL_ISR_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
109 INTERRUPT |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
110 .endr |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
111 #endif |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
112 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
113 .text |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
114 .globl start |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
115 start: |
|
158
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
116 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
117 // Before anything else, *carefully* check if this was actually an NMI |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
118 // The assumption is that the stack pointer can only be 0 on reset |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
119 // as set above at __ROM_vsr |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
120 cmp r0,sp |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
121 be 1f |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
122 addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
123 movea 1,r0,r8 |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
124 jr exception |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
125 1: |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
126 #endif |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
127 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
128 // Perform hardware initialization |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
129 PLATFORM_SETUP1 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
130 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
131 // Copy everything to the proper VMA base and jump to it. |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
132 #if defined(CYG_HAL_STARTUP_ROMRAM) |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
133 lea CYGMEM_REGION_rom,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
134 lea CYGMEM_REGION_ram,r7 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
135 lea ___rom_data_end,r8 // Assume end of .data == end of ROM |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
136 1: ld.w 0[r6],r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
137 st.w r1,0[r7] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
138 addi 4,r6,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
139 addi 4,r7,r7 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
140 cmp r6,r8 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
141 bne 1b |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
142 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
143 // now jump to RAM |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
144 lea ___romram_jump_vector,r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
145 jmp [r1] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
146 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
147 ___romram_jump_vector: |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
148 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
149 #elif defined( CYG_HAL_STARTUP_ROM ) |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
150 // Relocate [copy] data from ROM to RAM |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
151 lea ___rom_data_start,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
152 lea ___ram_data_start,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
153 lea ___ram_data_end,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
154 1: ld.w 0[r6],r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
155 st.w r1,0[r7] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
156 addi 4,r6,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
157 addi 4,r7,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
158 cmp r7,r8 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
159 bne 1b |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
160 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
161 // Initialize RAM vectors |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
162 lea ___ram_vectors_loadaddr,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
163 lea ___ram_vectors_start,r7 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
164 lea ___ram_vectors_end,r8 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
165 1: ld.w 0[r6],r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
166 st.w r1,0[r7] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
167 addi 4,r6,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
168 addi 4,r7,r7 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
169 cmp r7,r8 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
170 bne 1b |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
171 #endif |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
172 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
173 // Initialize stack |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
174 lea __startup_stack-16,r1 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
175 mov r1,sp |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
176 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
177 // Clear BSS |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
178 lea ___bss_start,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
179 lea ___bss_end,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
180 1: st.w r0,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
181 addi 4,r6,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
182 cmp r6,r7 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
183 bne 1b |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
184 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
185 #if defined(CYG_HAL_STARTUP_RAM) |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
186 // Set up VSR pointers into this application/image |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
187 lea _hal_vsr_table+(CYGNUM_HAL_ISR_MIN*4),r6 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
188 movea CYGNUM_HAL_ISR_COUNT,r0,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
189 lea do_interrupt,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
190 10: st.w r8,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
191 addi 4,r6,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
192 addi -1,r7,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
193 bne 10b |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
194 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
195 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
196 // Initialize hardware |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
197 jarl _cyg_hal_hardware_init,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
198 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
199 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
200 # ifdef CYG_HAL_STARTUP_RAM |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
201 // Need to handle exceptions as well |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
202 lea _hal_vsr_table,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
203 movea CYGNUM_HAL_EXCEPTION_COUNT,r0,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
204 lea do_exception,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
205 10: st.w r8,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
206 addi 4,r6,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
207 addi -1,r7,r7 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
208 bne 10b |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
209 # endif |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
210 jarl _initialize_stub,r31 |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
211 #else // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
212 // All programs need to provide for NMI handlers |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
213 lea _hal_vsr_table+4,r6 |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
214 lea do_exception,r8 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
215 st.w r8,0[r6] // NMI pin |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
216 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
217 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
218 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
219 // we can process NMIs now |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
220 lea __allow_nmi,r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
221 addi 1,r0,r2 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
222 st.w r2,0[r1] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
223 #endif |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
224 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
225 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
226 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
227 .extern hal_ctrlc_isr_init |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
228 jarl _hal_ctrlc_isr_init,r31 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
229 #endif |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
230 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
231 // Run through static constructors |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
232 jarl _cyg_hal_invoke_constructors,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
233 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
234 // Ready to start the eCos kernel |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
235 jarl _cyg_start,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
236 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
237 // If we get here, something is _very_ wrong |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
238 _start_hang: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
239 br _start_hang |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
240 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
241 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
242 // Handle exception |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
243 exception: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
244 // save exception context |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
245 st.w ep,CYGARC_REG_EP[sp] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
246 mov sp,ep |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
247 sst.w r8,CYGARC_REG_VECTOR[ep] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
248 sst.w r1,CYGARC_REG_R1[ep] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
249 addi CYGARC_EXCEPTION_FRAME_SIZE,ep,r1 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
250 sst.w r2,CYGARC_REG_R2[ep] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
251 sst.w r1,CYGARC_REG_SP[ep] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
252 sst.w r4,CYGARC_REG_R4[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
253 sst.w r5,CYGARC_REG_R5[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
254 sst.w r6,CYGARC_REG_R6[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
255 sst.w r7,CYGARC_REG_R7[ep] |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
256 // sst.w r8,CYGARC_REG_R8[ep] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
257 sst.w r9,CYGARC_REG_R9[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
258 sst.w r10,CYGARC_REG_R10[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
259 sst.w r11,CYGARC_REG_R11[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
260 sst.w r12,CYGARC_REG_R12[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
261 sst.w r13,CYGARC_REG_R13[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
262 sst.w r14,CYGARC_REG_R14[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
263 sst.w r15,CYGARC_REG_R15[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
264 sst.w r16,CYGARC_REG_R16[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
265 sst.w r17,CYGARC_REG_R17[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
266 sst.w r18,CYGARC_REG_R18[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
267 sst.w r19,CYGARC_REG_R19[ep] |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
268 #ifndef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
269 sst.w r20,CYGARC_REG_R20[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
270 sst.w r21,CYGARC_REG_R21[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
271 sst.w r22,CYGARC_REG_R22[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
272 sst.w r23,CYGARC_REG_R23[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
273 sst.w r24,CYGARC_REG_R24[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
274 sst.w r25,CYGARC_REG_R25[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
275 sst.w r26,CYGARC_REG_R26[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
276 sst.w r27,CYGARC_REG_R27[ep] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
277 sst.w r28,CYGARC_REG_R28[ep] |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
278 #endif |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
279 sst.w r29,CYGARC_REG_R29[ep] // NB frame pointer |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
280 sst.w lp,CYGARC_REG_LP[ep] |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
281 cmp CYGNUM_HAL_VECTOR_TRAP00,r8 // NMI? |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
282 bge 05f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
283 stsr FEPC,r6 // saved state differs |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
284 stsr FEPSW,r7 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
285 lea __allow_nmi,r1 // is the system ready for NMIs? |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
286 tst1 0, 0[r1] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
287 bne 10f |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
288 // if not processing NMIs, allow restore |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
289 sst.w r6,CYGARC_REG_PC[ep] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
290 sst.w r7,CYGARC_REG_PSW[ep] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
291 // Reenable exception processing |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
292 stsr PSW,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
293 andi ~(CYGARC_PSW_EP|CYGARC_PSW_NP),r6,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
294 ldsr r6,PSW |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
295 lea return_from_exception_or_interrupt,r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
296 jmp [r1] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
297 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
298 05: stsr EIPC,r6 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
299 stsr EIPSW,r7 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
300 cmp CYGNUM_HAL_VECTOR_ILGOP,r8 // Illegal opcode? |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
301 bne 10f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
302 addi -4,r6,r6 // yes, adjust PC |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
303 10: sst.w r6,CYGARC_REG_PC[ep] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
304 sst.w r7,CYGARC_REG_PSW[ep] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
305 stsr ECR,r6 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
306 sst.w r6,CYGARC_REG_CAUSE[ep] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
307 // Reenable exception processing |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
308 stsr PSW,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
309 andi ~(CYGARC_PSW_EP|CYGARC_PSW_NP),r6,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
310 ldsr r6,PSW |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
311 shl 2,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
312 lea _hal_vsr_table,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
313 add r1,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
314 ld.w 0[r8],r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
315 jmp [r1] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
316 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
317 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
318 do_exception: |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
319 // pass in saved registers |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
320 mov sp,r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
321 |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
322 // leave space for the parameter flush back area (as per calling |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
323 // conventions) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
324 addi -16,sp,sp |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
325 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
326 jarl _exception_handler,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
327 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
328 return_from_exception_or_interrupt: |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
329 // save sp, but remove space for the parameter flush back area |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
330 // (as per calling conventions) at the same time |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
331 addi 16,sp,ep |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
332 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
333 sld.w CYGARC_REG_PSW[ep],r7 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
334 sld.w CYGARC_REG_R1[ep],r1 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
335 sld.w CYGARC_REG_PC[ep],r6 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
336 sld.w CYGARC_REG_R2[ep],r2 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
337 // disable interrupts while restoring context |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
338 ld.w CYGARC_REG_VECTOR[ep],r4 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
339 stsr PSW,r8 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
340 cmp CYGNUM_HAL_VECTOR_TRAP00,r4 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
341 bge 10f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
342 ori CYGARC_PSW_NP,r8,r8 // returning from NMI |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
343 ori CYGARC_PSW_ID,r8,r8 // disable interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
344 ldsr r8,PSW |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
345 ldsr r7,FEPSW |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
346 ldsr r6,FEPC |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
347 br 30f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
348 10: cmp CYGNUM_HAL_ISR_MIN,r4 // exception or interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
349 bge 20f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
350 ori CYGARC_PSW_EP,r8,r8 // returning from exception |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
351 20: ori CYGARC_PSW_ID,r8,r8 // disable interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
352 ldsr r8,PSW |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
353 ldsr r7,EIPSW // Avoid pipeline bubbles |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
354 ldsr r6,EIPC |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
355 30: sld.w CYGARC_REG_R4[ep],r4 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
356 sld.w CYGARC_REG_R5[ep],r5 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
357 sld.w CYGARC_REG_R6[ep],r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
358 sld.w CYGARC_REG_R7[ep],r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
359 sld.w CYGARC_REG_R8[ep],r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
360 sld.w CYGARC_REG_R9[ep],r9 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
361 sld.w CYGARC_REG_R10[ep],r10 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
362 sld.w CYGARC_REG_R11[ep],r11 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
363 sld.w CYGARC_REG_R12[ep],r12 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
364 sld.w CYGARC_REG_R13[ep],r13 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
365 sld.w CYGARC_REG_R14[ep],r14 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
366 sld.w CYGARC_REG_R15[ep],r15 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
367 sld.w CYGARC_REG_R16[ep],r16 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
368 sld.w CYGARC_REG_R17[ep],r17 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
369 sld.w CYGARC_REG_R18[ep],r18 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
370 sld.w CYGARC_REG_R19[ep],r19 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
371 #ifndef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
372 sld.w CYGARC_REG_R20[ep],r20 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
373 sld.w CYGARC_REG_R21[ep],r21 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
374 sld.w CYGARC_REG_R22[ep],r22 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
375 sld.w CYGARC_REG_R23[ep],r23 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
376 sld.w CYGARC_REG_R24[ep],r24 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
377 sld.w CYGARC_REG_R25[ep],r25 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
378 sld.w CYGARC_REG_R26[ep],r26 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
379 sld.w CYGARC_REG_R27[ep],r27 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
380 sld.w CYGARC_REG_R28[ep],r28 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
381 #endif |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
382 sld.w CYGARC_REG_R29[ep],r29 // NB frame pointer |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
383 sld.w CYGARC_REG_LP[ep],lp |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
384 sld.w CYGARC_REG_SP[ep],sp |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
385 sld.w CYGARC_REG_EP[ep],ep |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
386 reti |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
387 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
388 // Handle interrupt - these are typically vectored into user code |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
389 do_interrupt: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
390 mov sp,ep // save pointer to regs frame |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
391 // leave space for the parameter flush back area (as per calling |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
392 // conventions) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
393 addi -16,sp,sp |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
394 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
395 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
396 // Switch to interrupt stack |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
397 lea irq_level,r6 // current number of nested interrupts |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
398 ld.w 0[r6],r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
399 addi 1,r7,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
400 st.w r8,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
401 cmp 0,r7 // if was zero, switch stacks |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
402 bne 10f |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
403 mov sp,r1 // save old stack pointer |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
404 lea __interrupt_stack-20,r2 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
405 mov r2,sp |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
406 st.w r1,16[sp] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
407 10: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
408 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
409 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
410 // The entire CPU state is now stashed on the stack, |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
411 // increment the scheduler lock and handle the interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
412 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
413 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
128
diff
changeset
|
414 .extern _cyg_scheduler_sched_lock |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
128
diff
changeset
|
415 lea _cyg_scheduler_sched_lock,r7 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
416 ld.w 0[r7],r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
417 addi 1,r8,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
418 st.w r8,0[r7] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
419 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
420 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
421 #if defined(CYGPKG_KERNEL_INSTRUMENT) && \ |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
422 defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
423 lea RAISE_INTR,r6 // arg0 = type = INTR,RAISE |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
424 ld.w CYGARC_REG_VECTOR[ep],r7 // args = vector |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
425 mov r0,r8 // arg2 = 0 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
426 jarl _cyg_instrument,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
427 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
428 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
429 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
430 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
431 // If we are supporting Ctrl-C interrupts from GDB, we must squirrel |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
432 // away a pointer to the save interrupt state here so that we can |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
433 // plant a breakpoint at some later time. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
434 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
435 .extern _hal_saved_interrupt_state |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
436 lea _hal_saved_interrupt_state,r8 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
437 st.w ep,0[r8] |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
438 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
439 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
440 #ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
441 mov r0,r8 // vector # (overloaded by kernel) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
442 #else |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
443 ld.w CYGARC_REG_VECTOR[ep],r6 // vector # |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
444 addi -CYGNUM_HAL_ISR_MIN,r6,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
445 shl 2,r8 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
446 #endif |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
447 lea _hal_interrupt_objects,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
448 add r8,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
449 ld.w 0[r1],r29 // save object handle |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
450 lea _hal_interrupt_data,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
451 add r8,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
452 ld.w 0[r1],r7 // handler data |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
453 lea _hal_interrupt_handlers,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
454 add r8,r1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
455 mov ep,r8 // pointer to saved registers |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
456 ld.w 0[r1],r1 // handler routine |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
457 #ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
458 ld.w CYGARC_REG_VECTOR[ep],r6 // vector # |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
459 #endif |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
460 jarl call_via_r1,r31 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
461 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
462 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
463 // If we are returning from the last nested interrupt, move back |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
464 // to the thread stack. interrupt_end() must be called on the |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
465 // thread stack since it potentially causes a context switch. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
466 lea irq_level,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
467 ld.w 0[r6],r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
468 addi -1,r7,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
469 st.w r8,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
470 cmp 0,r8 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
471 bne 10f |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
472 ld.w 16[sp],sp // Restore non-interrupt stack at last interrupt |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
473 // this is offset 16 because of parameter |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
474 // flush back area |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
475 10: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
476 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
477 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
478 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
479 // The return value from the handler (in r10) will indicate whether a |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
480 // DSR is to be posted. Pass this together with a pointer to the |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
481 // interrupt object we have just used to the interrupt tidy up routine. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
482 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
483 mov r10,r6 // interrupt handler return code |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
484 mov r29,r7 // object handle |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
485 mov ep,r8 // register frame |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
486 jarl _interrupt_end,r31 // post any bottom layer handle |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
487 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
488 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
489 br return_from_exception_or_interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
490 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
491 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
492 .globl _hal_interrupt_stack_call_pending_DSRs |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
493 _hal_interrupt_stack_call_pending_DSRs: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
494 stsr PSW,r9 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
495 di // disable interrupts while changing stack |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
496 // Switch to interrupt stack |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
497 lea irq_level,r6 // current number of nested interrupts |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
498 mov 1,r7 // note: this can never be non-zero at this point |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
499 st.w r7,0[r6] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
500 mov sp,r1 // save old stack pointer |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
501 lea __interrupt_stack-32,r8 // 32 for 16-byte parameter flush back |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
502 // plus 12 bytes for following reg saves |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
503 // plus 4 bytes to preserve alignment |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
504 mov r8,sp |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
505 st.w r1,16[sp] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
506 st.w r9,20[sp] |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
507 st.w lp,24[sp] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
508 ei |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
509 jarl _cyg_interrupt_call_pending_DSRs,lp |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
510 di |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
511 ld.w 24[sp],lp // restore state |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
512 ld.w 20[sp],r6 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
513 ld.w 16[sp],sp |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
514 lea irq_level,r7 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
515 st.w r0,0[r7] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
516 ldsr r6,PSW |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
517 jmp [lp] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
518 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
519 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
520 // |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
521 // Indirect subroutine call, via R1 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
522 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
523 call_via_r1: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
524 jmp [r1] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
525 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
526 // |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
527 // Reset the board |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
528 // |
|
151
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
149
diff
changeset
|
529 .globl _hal_reset_board |
|
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
149
diff
changeset
|
530 _hal_reset_board: |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
531 di // Turn off interrupts |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
532 // Don't process NMIs |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
533 lea __allow_nmi,r1 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
534 st.w r0,0[r1] |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
535 jmp [r0] // Restart machine |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
536 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
537 #if !defined(CYGSEM_HAL_NEC_INLINE_INTERRUPT_FUNCTIONS) |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
538 .globl _hal_disable_interrupts |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
539 _hal_disable_interrupts: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
540 stsr PSW,r10 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
541 di |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
542 jmp [lp] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
543 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
544 .globl _hal_enable_interrupts |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
545 _hal_enable_interrupts: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
546 stsr PSW,r6 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
547 ei |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
548 jmp [lp] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
549 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
550 .globl _hal_restore_interrupts |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
551 _hal_restore_interrupts: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
552 ldsr r6,PSW |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
553 jmp [lp] |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
554 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
555 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
556 // ------------------------------------------------------------------------- |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
557 .section ".ram_vectors","awx",@progbits |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
558 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
559 #if defined(CYG_HAL_STARTUP_ROM) |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
560 // Trap jump table - used by builtin ROM |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
561 __vsr_table: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
562 .rept CYGNUM_HAL_VSR_COUNT |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
563 .word 0x00000794,0,0,0 // jr 0x0100xx0, nop, nop, nop |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
564 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
565 __vsr_table_end: |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
566 #endif |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
567 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
568 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
569 _hal_vsr_table: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
570 .rept CYGNUM_HAL_EXCEPTION_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
571 .word do_exception |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
572 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
573 .rept CYGNUM_HAL_ISR_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
574 .word do_interrupt |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
575 .endr |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
576 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
577 // Flag to indicate whether NMIs are allowed |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
578 // Without this, if we do a soft reset (using hal_plf_reset_board above) |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
579 // we may process NMIs like the watchdog timeout before the system can |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
580 // accept them |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
581 __allow_nmi: |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
582 .word 0 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
583 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
584 .balign 64 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
585 _hal_virtual_vector_table: |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
586 .rept CYGNUM_CALL_IF_TABLE_SIZE |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
587 .word 0 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
96
diff
changeset
|
588 .endr |
|
158
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
589 |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
590 #if CYGINT_HAL_V85X_ICE_DEBUG |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
591 .globl _hal_v85x_ice_syscall_info |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
592 _hal_v85x_ice_syscall_info: |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
593 .rept 48 |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
594 .long 0 |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
595 .endr |
|
f2545e5de153
Merge from eCos master repository on 2001-04-24-11:22:42-BST
jlarmour
parents:
156
diff
changeset
|
596 #endif // if CYGINT_HAL_V85X_ICE_DEBUG |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
597 #endif // if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
598 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
599 .data |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
600 // Initial stack |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
601 .rept 1024 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
602 .byte 0 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
603 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
604 __startup_stack: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
605 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
606 #ifndef CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
607 #define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
608 #endif |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
609 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
610 .balign 16 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
611 .global _cyg_interrupt_stack_base |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
612 _cyg_interrupt_stack_base: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
613 __interrupt_stack_base: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
614 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
615 .byte 0 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
616 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
617 .balign 16 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
618 .global _cyg_interrupt_stack |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
619 _cyg_interrupt_stack: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
620 __interrupt_stack: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
621 irq_level: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
622 .long 0 |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
623 #endif |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
624 |
|
96
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
625 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
626 // Interrupt vector tables. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
627 // These tables contain the isr, data and object pointers used to deliver |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
628 // interrupts to user code. |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
629 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
630 .extern _hal_default_isr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
631 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
632 .globl _hal_interrupt_handlers |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
633 _hal_interrupt_handlers: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
634 .rept CYGNUM_HAL_ISR_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
635 .long _hal_default_isr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
636 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
637 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
638 .globl _hal_interrupt_data |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
639 _hal_interrupt_data: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
640 .rept CYGNUM_HAL_ISR_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
641 .long 0 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
642 .endr |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
643 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
644 .globl _hal_interrupt_objects |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
645 _hal_interrupt_objects: |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
646 .rept CYGNUM_HAL_ISR_COUNT |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
647 .long 0 |
|
b15c60e34c84
Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff
changeset
|
648 .endr |
|
156
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
649 |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
650 // ------------------------------------------------------------------------- |
|
b939e9cada46
Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents:
151
diff
changeset
|
651 // EOF vectors.S |
