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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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