annotate packages/hal/v85x/arch/current/src/vectors.S @ 101:c37d3a9e1b28 ecos-sw-2000-06-16

Merge from eCos master repository on 2000-06-16-07:47:03-BST
author jlarmour
date Fri, 16 Jun 2000 16:43:59 +0000
parents b15c60e34c84
children 5a0cc6c243a9
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 // #========================================================================
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
8 // ####COPYRIGHTBEGIN####
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
9 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
10 // -------------------------------------------
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
14 // http://www.redhat.com/
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
15 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
19 // the License.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
20 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
22 // released September 30, 1998.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
23 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
25 // Portions created by Red Hat are
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
27 // All Rights Reserved.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
28 // -------------------------------------------
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
29 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
30 // ####COPYRIGHTEND####
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
31 // #========================================================================
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
32 // ######DESCRIPTIONBEGIN####
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
33 // #
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
34 // # Author(s): gthomas
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
35 // # Contributors: gthomas
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
36 // # Date: 2000-03-10
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
37 // # Purpose: NEC/V85x exception vectors
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
38 // # 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
39 // # 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
40 // # 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
41 // # interrupts.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
42 // #
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
43 // #####DESCRIPTIONEND####
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
44 // #
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
45 // #========================================================================
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
46
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
47 #include <pkgconf/hal.h>
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
48 #include <pkgconf/hal_v85x.h>
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
49 #ifdef CYGPKG_KERNEL // no CDL yet
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
50 #include <pkgconf/kernel.h>
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
51 #else
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
52 # undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
53 # 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
54 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
55 #include <cyg/hal/hal_platform_setup.h>
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
56
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
57 #include <cyg/hal/nec_offsets.inc>
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
58
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
59 // 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
60 // between exceptions and interrupts.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
61 .macro EXCEPTION
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
62 .org reset_vector+(0x0010*VECTOR)
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
63 addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
64 st.w r1,CYGARC_REG_R1[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
65 movea VECTOR,r0,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
66 .set VECTOR, VECTOR+1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
67 jr exception
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
68 .endm
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
69
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
70 .macro INTERRUPT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
71 .org reset_vector+(0x0010*VECTOR)
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
72 addi -CYGARC_EXCEPTION_FRAME_SIZE,sp,sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
73 st.w r1,CYGARC_REG_R1[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
74 movea VECTOR,r0,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
75 jr exception
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
76 .set VECTOR, VECTOR+1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
77 .endm
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
78
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
79 .text
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
80 .globl reset_vector
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
81 reset_vector:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
82
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
83 #ifdef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
84 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
85 // These are the hardware exception vectors.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
86 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
87 __ROM_vsr:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
88 // 0x000
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
89 jr start
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
90
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
91 .set VECTOR, 1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
92 .rept CYGNUM_HAL_EXCEPTION_COUNT-1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
93 EXCEPTION
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
94 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
95 .set VECTOR, 8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
96 .rept CYGNUM_HAL_ISR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
97 INTERRUPT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
98 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
99 #endif // CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
100
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
101 .globl start
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
102 start:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
103 // Perform hardware initialization
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
104 PLATFORM_SETUP1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
105
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
106 #ifdef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
107 // 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
108 lea ___rom_data_start,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
109 lea ___ram_data_start,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
110 lea ___ram_data_end,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
111 1: ld.w 0[r6],r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
112 st.w r1,0[r7]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
113 addi 4,r6,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
114 addi 4,r7,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
115 cmp r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
116 bne 1b
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
117 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
118 // Initialize stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
119 lea __startup_stack,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
120 mov r1,sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
121
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
122 // Clear BSS
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
123 lea ___bss_start,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
124 lea ___bss_end,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
125 1: st.w r0,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
126 addi 4,r6,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
127 cmp r6,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
128 bne 1b
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
129
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
130 #ifdef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
131 // Built initial trap VSR tables
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
132 lea __vsr_table,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
133 lea __vsr_table_end,r9
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
134 #if 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
135 lea __ROM_vsr,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
136 mov r6,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
137 sub r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
138 lea 0x003FFFFF,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
139 and r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
140 lea 0x07800000,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
141 or r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
142 #else
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
143 lea 0x00000794,r8 // jr 0x0100xx0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
144 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
145 10: st.w r8,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
146 addi 16,r6,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
147 cmp r6,r9
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
148 bne 10b
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
149 #else
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
150 // Set up VSR pointers into this application/image
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
151 lea _hal_vsr_table+(CYGNUM_HAL_EXCEPTION_COUNT*4),r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
152 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
153 lea do_interrupt,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
154 10: st.w r8,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
155 addi 4,r6,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
156 addi -1,r7,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
157 bne 10b
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
158 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
159
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
160 // Initialize hardware
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
161 jarl _cyg_hal_hardware_init,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
162
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
163 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
164 #ifndef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
165 // Need to handle exceptions as well
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
166 lea _hal_vsr_table,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
167 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
168 lea do_exception,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
169 10: st.w r8,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
170 addi 4,r6,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
171 addi -1,r7,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
172 bne 10b
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
173 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
174 jarl _initialize_stub,r31
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
175 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT // this _check_ should go away
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
176 #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
177 || 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
178 .extern hal_ctrlc_isr_init
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
179 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
180 #endif
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
181 #endif
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
182 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
96
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
183
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
184 // Run through static constructors
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
185 jarl _cyg_hal_invoke_constructors,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
186
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
187 // Ready to start the eCos kernel
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
188 jarl _cyg_start,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
189
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
190 // 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
191 _start_hang:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
192 br _start_hang
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
193
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
194 #ifdef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
195 // Handle exception
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
196 exception:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
197 // save exception context
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
198 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
199 mov sp,ep
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
200 st.w r1,CYGARC_REG_VECTOR[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
201 addi CYGARC_EXCEPTION_FRAME_SIZE,ep,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
202 sst.w r2,CYGARC_REG_R2[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
203 sst.w r1,CYGARC_REG_SP[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
204 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
205 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
206 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
207 sst.w r7,CYGARC_REG_R7[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
208 sst.w r8,CYGARC_REG_R8[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
209 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
210 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
211 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
212 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
213 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
214 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
215 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
216 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
217 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
218 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
219 sst.w r19,CYGARC_REG_R19[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
220 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
221 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
222 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
223 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
224 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
225 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
226 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
227 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
228 sst.w r28,CYGARC_REG_R28[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
229 sst.w r29,CYGARC_REG_R29[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
230 ld.w CYGARC_REG_VECTOR[ep],r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
231 sst.w lp,CYGARC_REG_LP[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
232 cmp CYGNUM_HAL_VECTOR_TRAP0,r8 // NMI?
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
233 bge 05f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
234 stsr FEPC,r6 // saved state differs
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
235 stsr FEPSW,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
236 br 20f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
237 05: stsr EIPC,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
238 cmp CYGNUM_HAL_VECTOR_ILLEGAL_OPCODE,r8 // Illegal opcode?
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
239 bne 10f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
240 addi -4,r6,r6 // yes, adjust PC
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
241 10: stsr EIPSW,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
242 20: st.w r6,CYGARC_REG_PC[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
243 st.w r7,CYGARC_REG_PSW[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
244 stsr ECR,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
245 st.w r6,CYGARC_REG_CAUSE[ep]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
246 // Reenable exception processing
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
247 stsr PSW,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
248 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
249 ldsr r6,PSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
250 shl 2,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
251 lea _hal_vsr_table,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
252 add r1,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
253 ld.w 0[r8],r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
254 jmp [r1]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
255 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
256
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
257 do_exception:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
258 mov sp,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
259 jarl _exception_handler,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
260
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
261 return_from_exception_or_interrupt:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
262 mov sp,ep
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
263 ld.w CYGARC_REG_PSW[ep],r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
264 sld.w CYGARC_REG_R1[ep],r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
265 ld.w CYGARC_REG_PC[ep],r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
266 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
267 // disable interrupts while restoring context
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
268 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
269 stsr PSW,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
270 cmp CYGNUM_HAL_VECTOR_TRAP0,r4
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
271 bge 10f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
272 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
273 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
274 ldsr r8,PSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
275 ldsr r7,FEPSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
276 ldsr r6,FEPC
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
277 br 30f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
278 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
279 bge 20f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
280 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
281 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
282 ldsr r8,PSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
283 ldsr r7,EIPSW // Avoid pipline bubbles
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
284 ldsr r6,EIPC
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
285 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
286 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
287 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
288 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
289 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
290 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
291 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
292 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
293 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
294 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
295 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
296 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
297 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
298 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
299 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
300 sld.w CYGARC_REG_R19[ep],r19
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
301 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
302 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
303 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
304 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
305 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
306 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
307 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
308 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
309 sld.w CYGARC_REG_R28[ep],r28
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
310 sld.w CYGARC_REG_R29[ep],r29
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
311 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
312 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
313 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
314 reti
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
315
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
316 // 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
317 do_interrupt:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
318 mov sp,ep // save pointer to regs frame
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
319
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
320 #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
321 // Switch to interrupt stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
322 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
323 ld.w 0[r6],r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
324 addi 1,r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
325 st.w r8,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
326 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
327 bne 10f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
328 mov sp,r1 // save old stack pointer
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
329 lea __interrupt_stack-4,r2
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
330 mov r2,sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
331 st.w r1,0[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
332 10:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
333 #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
334
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
335 // 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
336 // 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
337
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
338 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
339 .extern cyg_scheduler_sched_lock
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
340 lea cyg_scheduler_sched_lock,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
341 ld.w 0[r7],r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
342 addi 1,r8,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
343 st.w r8,0[r7]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
344 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
345
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
346 #if defined(CYGPKG_KERNEL_INSTRUMENT) && \
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
347 defined(CYGDBG_KERNEL_INSTRUMENT_INTR)
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
348 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
349 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
350 mov r0,r8 // arg2 = 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
351 jarl _cyg_instrument,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
352 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
353
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
354 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT // this _check_ should go away
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
355 #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
356 || 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
357 // 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
358 // 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
359 // 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
360
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
361 .extern _hal_saved_interrupt_state
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
362 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
363 st.w ep,0[r8]
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
364 #endif
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
365 #endif
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
366
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
367 #ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
368 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
369 #else
96
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
370 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
371 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
372 shl 2,r8
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
373 #endif
96
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
374 lea _hal_interrupt_objects,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
375 add r8,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
376 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
377 lea _hal_interrupt_data,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
378 add r8,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
379 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
380 lea _hal_interrupt_handlers,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
381 add r8,r1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
382 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
383 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
384 #ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
385 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
386 #endif
96
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
387 jarl call_via_r1,r31
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
388
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
389 #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
390 // 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
391 // 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
392 // 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
393 lea irq_level,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
394 ld.w 0[r6],r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
395 addi -1,r7,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
396 st.w r8,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
397 cmp 0,r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
398 bne 10f
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
399 ld.w 0[sp],sp // Restore non-interrupt stack at last interrupt
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
400 10:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
401 #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
402
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
403 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
404 // 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
405 // 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
406 // 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
407
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
408 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
409 mov r29,r7 // object handle
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
410 mov ep,r8 // register frame
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
411 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
412
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
413 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
414 br return_from_exception_or_interrupt
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
415
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
416 #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
417 .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
418 _hal_interrupt_stack_call_pending_DSRs:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
419 stsr PSW,r9
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
420 di // disable interrupts while changing stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
421 // Switch to interrupt stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
422 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
423 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
424 st.w r7,0[r6]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
425 mov sp,r1 // save old stack pointer
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
426 lea __interrupt_stack-(4*4),r8
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
427 mov r8,sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
428 st.w r1,0[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
429 st.w r9,4[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
430 st.w lp,8[sp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
431 ei
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
432 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
433 di
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
434 ld.w 8[sp],lp // restore state
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
435 ld.w 4[sp],r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
436 ld.w 0[sp],sp
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
437 lea irq_level,r7
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
438 st.w r0,0[r7]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
439 ldsr r6,PSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
440 jmp [lp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
441 #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
442
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
443 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
444 // Indirect subroutine call, via R1
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
445
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
446 call_via_r1:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
447 jmp [r1]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
448
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
449 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
450 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
451 // Reset the board
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
452 //
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
453 .globl _hal_plf_reset_board
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
454 _hal_plf_reset_board:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
455 di // Turn off interrupts
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
456 jmp [r0] // Restart machine
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
457 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
458
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
459 #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
460 .globl _hal_disable_interrupts
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
461 _hal_disable_interrupts:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
462 stsr PSW,r10
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
463 di
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
464 jmp [lp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
465
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
466 .globl _hal_enable_interrupts
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
467 _hal_enable_interrupts:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
468 stsr PSW,r6
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
469 ei
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
470 jmp [lp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
471
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
472 .globl _hal_restore_interrupts
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
473 _hal_restore_interrupts:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
474 ldsr r6,PSW
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
475 jmp [lp]
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
476 #endif
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 // -------------------------------------------------------------------------
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
479 .data
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
480 #ifdef CYG_HAL_STARTUP_ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
481 // 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
482 __vsr_table:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
483 .rept CYGNUM_HAL_VSR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
484 .word 0,0,0,0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
485 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
486 __vsr_table_end:
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 _hal_vsr_table:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
489 .rept CYGNUM_HAL_EXCEPTION_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
490 .word do_exception
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
491 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
492 .rept CYGNUM_HAL_ISR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
493 .word do_interrupt
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
494 .endr
101
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
495
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
496 #if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT)
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
497 .balign 64
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
498 _hal_virtual_vector_table:
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
499 .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
500 .word 0
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
501 .endr
c37d3a9e1b28 Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents: 96
diff changeset
502 #endif
96
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
503 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
504
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
505 // Initial stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
506 .rept 1024
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
507 .byte 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
508 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
509 __startup_stack:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
510
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
511 #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
512 #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
513 #endif
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
514 #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
515 .balign 16
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
516 .global _cyg_interrupt_stack_base
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
517 _cyg_interrupt_stack_base:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
518 __interrupt_stack_base:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
519 .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
520 .byte 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
521 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
522 .balign 16
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
523 .global _cyg_interrupt_stack
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
524 _cyg_interrupt_stack:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
525 __interrupt_stack:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
526 irq_level:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
527 .long 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
528 #endif // CYG_HAL_STARTUP == ROM
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
529
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
530 // Interrupt vector tables.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
531 // 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
532 // interrupts to user code.
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
533
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
534 .extern _hal_default_isr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
535
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
536 .globl _hal_interrupt_handlers
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
537 _hal_interrupt_handlers:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
538 .rept CYGNUM_HAL_ISR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
539 .long _hal_default_isr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
540 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
541
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
542 .globl _hal_interrupt_data
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
543 _hal_interrupt_data:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
544 .rept CYGNUM_HAL_ISR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
545 .long 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
546 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
547
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
548 .globl _hal_interrupt_objects
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
549 _hal_interrupt_objects:
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
550 .rept CYGNUM_HAL_ISR_COUNT
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
551 .long 0
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
552 .endr
b15c60e34c84 Merge from eCos master repository on 2000-06-06-05:24:42-BST
jlarmour
parents:
diff changeset
553