Mercurial > flash_v2
annotate packages/hal/sh/arch/current/src/vectors.S @ 134:d2f49caf9e38 ecos-sw-2000-11-03
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
| author | jlarmour |
|---|---|
| date | Fri, 03 Nov 2000 21:17:40 +0000 |
| parents | 0ae0bc38e387 |
| children | 289bf90c6a9b |
| rev | line source |
|---|---|
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
1 ##========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
2 ## |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
3 ## vectors.S |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
4 ## |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
5 ## SH exception vectors |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
6 ## |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
7 ##========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
8 #####COPYRIGHTBEGIN#### |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
9 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
10 # ------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
11 # The contents of this file are subject to the Red Hat eCos Public License |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
12 # Version 1.1 (the "License"); you may not use this file except in |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
13 # compliance with the License. You may obtain a copy of the License at |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
14 # http://www.redhat.com/ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
15 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
16 # Software distributed under the License is distributed on an "AS IS" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
17 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
18 # License for the specific language governing rights and limitations under |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
19 # the License. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
20 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
21 # The Original Code is eCos - Embedded Configurable Operating System, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
22 # released September 30, 1998. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
23 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
24 # The Initial Developer of the Original Code is Red Hat. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
25 # Portions created by Red Hat are |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
26 # Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
27 # All Rights Reserved. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
28 # ------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
29 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
30 #####COPYRIGHTEND#### |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
31 ##========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
32 #######DESCRIPTIONBEGIN#### |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
33 ## |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
34 ## Author(s): jskov |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
35 ## Contributors: jskov, gthomas |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
36 ## Date: 1999-05-01 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
37 ## Purpose: SH exception vectors |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
38 ## Description: This file defines the code placed into the exception |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
39 ## vectors. It also contains the first level default VSRs |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
40 ## that save and restore state for both exceptions and |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
41 ## interrupts. |
|
84
489eb5632bc3
Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents:
82
diff
changeset
|
42 ## Notes: The SH architecture files are still more SH3 specific than |
|
489eb5632bc3
Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents:
82
diff
changeset
|
43 ## architecture neutral, hence the sub-variant configury. |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
44 ######DESCRIPTIONEND#### |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
45 ## |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
46 ##========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
47 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
48 #include <pkgconf/hal.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
49 #include <pkgconf/hal_sh.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
50 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
51 #ifdef CYGPKG_KERNEL |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
52 #include <pkgconf/kernel.h> // CYGPKG_KERNEL_INSTRUMENT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
53 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
54 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
55 #include <cyg/hal/arch.inc> |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
56 #include <cyg/hal/variant.inc> |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
57 #include <cyg/hal/sh_regs.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
58 #include <cyg/hal/sh_offsets.inc> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
59 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
60 #include <cyg/hal/hal_intr.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
61 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
62 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
63 #=========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
64 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
65 .file "vectors.S" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
66 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
67 #undef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
68 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
69 #=========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
70 # Start by defining the exceptions vectors. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
71 .section ".vectors","ax" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
72 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
73 # reset 0xa0000000 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
74 # other exceptions VBR+0x100 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
75 # tlb miss VBR+0x400 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
76 # interrupts VBR+0x600 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
77 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
78 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
79 #=========================================================================== |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
80 # Reset code must be PC relative so it can be executed out of the shadow |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
81 # area during startup. Not until after hal_hardware_init can the system |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
82 # be expected to provide the proper address space (at that time we |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
83 # jump to the VMA base of the code). |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
84 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
85 .org 0x000 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
86 .globl __reset; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
87 __reset: |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
88 mov.l $__reset_platform,r0 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
89 jmp @r0 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
90 nop |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
91 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
92 # Note: this is the unmapped, shadow address of the start of code |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
93 # Sadly, it is too far to just branch to. |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
94 .align 2 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
95 $__reset_platform: |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
96 #ifdef CYG_HAL_STARTUP_RAM |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
97 .long __reset_platform |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
98 #else |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
107
diff
changeset
|
99 .long __reset_platform+0x20000000 // Uncached "shadow" address |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
100 #endif |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
101 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
102 #--------------------------------------------------------------------------- |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
103 # Exception entry |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
104 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
105 .org 0x100 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
106 __exception: |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
107 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
108 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
109 mov #1,r7 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
110 #endif |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
111 |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
112 mov.l $nCYGARC_REG_EXCEVT,r1 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
113 mov.l @r1,r1 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
114 shlr2 r1 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
115 shlr r1 ! divide cause by 0x08 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
116 mov.l $_hal_vsr_table,r0 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
117 mov.l @(r0,r1),r1 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
118 jmp @r1 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
119 nop |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
120 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
121 .align 2 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
122 $_hal_vsr_table: |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
123 .long _hal_vsr_table |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
124 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
125 #--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
126 # This code handles the common part of all exception handlers. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
127 # It saves the machine state onto the stack and then calls |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
128 # a "C" routine to do the rest of the work. This work may result |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
129 # in thread switches, and changes to the saved state. When we return |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
130 # here the saved state is restored and execution is continued. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
131 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
132 .globl _cyg_hal_default_exception_vsr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
133 _cyg_hal_default_exception_vsr: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
134 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
135 # We come here with all register containing their |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
136 # pre-exception values except: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
137 # r0_b-r7_b = saved r0-r7 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
138 # r7 = vector # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
139 # spc = saved pc |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
140 # ssr = saved sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
141 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
142 # Save away some registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
143 mov r15,r1 ! entry sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
144 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
145 #ifdef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
146 mov.l $exc_state_marker,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
147 mov.l r0,@-r15 |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
148 mov.l $nCYGARC_REG_EXCEVT,r0 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
149 mov.l @r0,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
150 mov.l r0,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
151 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
152 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
153 #ifdef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
154 add #-12,r15 ! Space for cause, gbr, and vbr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
155 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
156 add #-4,r15 ! Space for cause |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
157 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
158 stc gbr,r0 ! GBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
159 mov.l r0,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
160 stc vbr,r0 ! VBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
161 mov.l r0,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
162 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
163 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
164 stc spc,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
165 mov.l r0,@-r15 ! PC |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
166 stc ssr,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
167 mov.l r0,@-r15 ! SR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
168 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
169 sts.l pr,@-r15 ! PR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
170 sts.l mach,@-r15 ! mach |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
171 sts.l macl,@-r15 ! macl |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
172 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
173 mov.l r1,@-r15 ! entry sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
174 mov.l r14,@-r15 ! r14-r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
175 mov.l r13,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
176 mov.l r12,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
177 mov.l r11,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
178 mov.l r10,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
179 mov.l r9,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
180 mov.l r8,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
181 stc.l r7_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
182 stc.l r6_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
183 stc.l r5_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
184 stc.l r4_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
185 stc.l r3_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
186 stc.l r2_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
187 stc.l r1_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
188 stc.l r0_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
189 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
190 # After setting the SR it will be possible to use breakpoints. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
191 mov.l $nCYG_SR1,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
192 ldc r1,sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
193 # ------------------------------------------------------------ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
194 # Register bank has changed now. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
195 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
196 #ifdef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
197 # It is safe to use breakpoints below this point. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
198 .globl _cyg_hal_default_exception_vsr_bp_safe |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
199 _cyg_hal_default_exception_vsr_bp_safe: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
200 #endif |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
201 mov.l $nCYGARC_REG_EXCEVT,r0 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
202 mov.l @r0,r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
203 mov #-5,r0 ! divide cause by 0x20 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
204 shld r0,r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
205 mov #CYGARC_SHREG_EVENT,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
206 mov.l r4,@(r0,r15) ! store decoded vector number back |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
207 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
208 # The entire CPU state is now stashed on the stack, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
209 # call into C to do something with it. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
210 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
211 mov r15,r4 ! R4 = register dump |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
212 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
213 mov.l $restore_state,r0 ! get return link |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
214 lds r0,pr ! to procedure register |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
215 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
216 mov.l $_cyg_hal_exception_handler,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
217 jmp @r0 ! call C code, r4 = registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
218 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
219 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
220 .align 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
221 $restore_state: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
222 .long restore_state |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
223 $nCYG_SR1: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
224 .long CYG_SR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
225 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
226 #ifdef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
227 $exc_state_marker: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
228 .long 0x77777770 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
229 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
230 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
231 .extern _cyg_hal_exception_handler |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
232 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
233 $_cyg_hal_exception_handler: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
234 .long _cyg_hal_exception_handler |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
235 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
236 #--------------------------------------------------------------------------- |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
237 # TLB miss entry |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
238 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
239 .org 0x400 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
240 __tlb_miss: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
241 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
242 mov #2,r7 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
243 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
244 |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
245 mov.l $nCYGARC_REG_EXCEVT,r1 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
246 mov.l @r1,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
247 shlr2 r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
248 shlr r1 ! divide cause by 0x08 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
249 mov.l $_hal_vsr_table2,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
250 mov.l @(r0,r1),r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
251 jmp @r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
252 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
253 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
254 .align 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
255 $_hal_vsr_table2: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
256 .long _hal_vsr_table |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
257 $nCYGARC_REG_EXCEVT: |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
258 .long CYGARC_REG_EXCEVT |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
259 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
260 #--------------------------------------------------------------------------- |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
261 # Interrupt entry |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
262 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
263 .org 0x600 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
264 __interrupt: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
265 |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
266 #ifdef CYGHWR_HAL_SH_IRQ_HANDLE_SPURIOUS_INTERRUPTS |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
267 # A spurious interrupt with INTEVT=0 may be caused by |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
268 # clearing of BL. Those interrupts need to be ignored. |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
269 mov.l $nCYGARC_REG_INTEVT,r0 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
270 mov.l @r0,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
271 cmp/eq #0,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
272 bf 1f |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
273 rte |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
274 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
275 1: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
276 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
277 |
|
84
489eb5632bc3
Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents:
82
diff
changeset
|
278 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
279 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
280 mov #3,r7 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
281 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
282 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
283 mov.l $_hal_vsr_table_int,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
284 mov.l @r1,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
285 jmp @r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
286 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
287 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
288 .align 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
289 $_hal_vsr_table_int: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
290 .long _hal_vsr_table+CYGNUM_HAL_VECTOR_INTERRUPT*4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
291 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
292 #--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
293 # Common interrupt handling code. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
294 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
295 .globl _cyg_hal_default_interrupt_vsr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
296 _cyg_hal_default_interrupt_vsr: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
297 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
298 # We come here with all register containing their |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
299 # pre-exception values except: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
300 # r0_b-r7_b = saved r0-r7 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
301 # r7 = vector # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
302 # spc = saved pc |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
303 # ssr = saved sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
304 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
305 # Save away some registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
306 mov r15,r1 ! entry sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
307 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
308 #ifdef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
309 add #-12,r15 ! Space for cause, gbr, and vbr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
310 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
311 add #-4,r15 ! Space for cause |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
312 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
313 stc gbr,r0 ! GBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
314 mov.l r0,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
315 stc vbr,r0 ! VBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
316 mov.l r0,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
317 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
318 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
319 stc spc,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
320 mov.l r0,@-r15 ! PC |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
321 stc ssr,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
322 mov.l r0,@-r15 ! SR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
323 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
324 sts.l pr,@-r15 ! PR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
325 sts.l mach,@-r15 ! mach |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
326 sts.l macl,@-r15 ! macl |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
327 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
328 mov.l r1,@-r15 ! entry sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
329 mov.l r14,@-r15 ! r14-r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
330 mov.l r13,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
331 mov.l r12,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
332 mov.l r11,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
333 mov.l r10,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
334 mov.l r9,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
335 mov.l r8,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
336 stc.l r7_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
337 stc.l r6_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
338 stc.l r5_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
339 stc.l r4_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
340 stc.l r3_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
341 stc.l r2_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
342 stc.l r1_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
343 stc.l r0_bank,@-r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
344 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
345 # After setting the SR it will be possible to use breakpoints. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
346 mov.l $nCYG_SR2,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
347 ldc r1,sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
348 # ------------------------------------------------------------ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
349 # Register bank has changed now. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
350 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
351 #ifdef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
352 # It is safe to use breakpoints below this point. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
353 .globl _cyg_hal_default_interrupt_vsr_bp_safe |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
354 _cyg_hal_default_interrupt_vsr_bp_safe: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
355 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
356 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
357 # The entire CPU state is now stashed on the stack, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
358 # call into C to do something with it. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
359 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
360 # The entire CPU state is now stashed on the stack, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
361 # increment the scheduler lock and call the ISR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
362 # for this vector. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
363 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
364 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
365 mov.l $cyg_scheduler_sched_lock,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
366 mov.l @r0,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
367 add #1,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
368 mov.l r1,@r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
369 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
370 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
371 mov r15,r8 ! R8 = register dump |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
372 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
373 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
374 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
375 mov.l $__interrupt_stack_base,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
376 mov.l $__interrupt_stack,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
377 cmp/hi r15,r0 ! if r0 > r15 or |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
378 bt 2f |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
379 cmp/hi r1,r15 ! if r15 > r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
380 bf 1f |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
381 2: mov r1,r15 ! change to supervisor stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
382 1: mov.l r8,@-r15 ! save old stack pointer |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
383 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
384 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
385 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
386 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
387 mov.l $n0301,r4 ! arg0 = type = INTR,RAISE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
388 mov r7,r5 ! arg1 = vector number |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
389 mov.l $_cyg_instrument,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
390 mov #0,r6 ! arg2 = 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
391 jsr @r0 ! call instrument function |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
392 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
393 bra 1f |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
394 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
395 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
396 .align 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
397 $n0301: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
398 .long 0x0301 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
399 $_cyg_instrument: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
400 .extern _cyg_instrument |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
401 .long _cyg_instrument |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
402 1: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
403 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
404 |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
405 # Decode the interrupt vector, and find ISR index |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
406 hal_intc_decode r0,r4 |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
115
diff
changeset
|
407 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
408 mov #CYGARC_SHREG_EVENT,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
409 mov.l r4,@(r0,r8) ! store decoded vector number back |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
410 ! to saved state. |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
411 hal_intc_translate r4,r9 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
412 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
413 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
414 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
415 # If we are supporting Ctrl-C interrupts from GDB, we must squirrel |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
416 # away a pointer to the save interrupt state here so that we can |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
417 # plant a breakpoint at some later time. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
418 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
419 mov.l $_hal_saved_interrupt_state,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
420 mov.l r8,@r1 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
421 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
422 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
423 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
424 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
99
diff
changeset
|
425 #if defined(CYGARC_SH_SOFTWARE_IP_UPDATE) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
426 # The interrupt mask bits in the SR are not updated by the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
427 # CPU. Proper nested operation requires the level to be |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
428 # found and put in the SR. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
429 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
430 # R4 contains the vector number: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
431 # CYGNUM_HAL_INTERRUPT_NMI: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
432 # Ix = 15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
433 # CYGNUM_HAL_INTERRUPT_LVL0-CYGNUM_HAL_INTERRUPT_LVL14: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
434 # Ix = 15-(CYGNUM_HAL_INTERRUPT_LVL0-R4) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
435 # IRA sources: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
436 # Get level from IRA |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
437 # IRB sources: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
438 # Get level from IRB |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
439 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
440 # However, doing mutiple checks and branches here is not smart. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
441 # Instead rely on alternative implementation where all programmed |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
442 # priorities are also kept in a table. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
443 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
444 mov.l $cyg_hal_ILVL_table,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
445 mov.b @(r0,r4),r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
446 shll2 r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
447 shll2 r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
448 mov.l $unmasked_SR,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
449 or r0,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
450 ldc r1,sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
451 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
452 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
453 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
454 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
455 mov r9,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
456 mov.l $_hal_interrupt_handlers,r1 ! get interrupt handler |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
457 mov.l @(r0,r1),r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
458 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
459 mov.l $_hal_interrupt_data,r5 ! get interrupt data |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
460 mov.l @(r0,r5),r5 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
461 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
462 jsr @r1 ! r4=vector, r5=data |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
463 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
464 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
465 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
466 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
467 # If we are returning from the last nested interrupt, move back |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
468 # to the thread stack. interrupt_end() must be called on the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
469 # thread stack since it potentially causes a context switch. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
470 # Since we have arranged for the top of stack location to |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
471 # contain the sp we need to go back to here, just pop it off |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
472 # and put it in SP. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
473 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
474 mov.l @r15,r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
475 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
476 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
477 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
478 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
479 # We only need to call _interrupt_end() when there is a kernel |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
480 # present to do any tidying up. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
481 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
482 # on return r0 bit 1 will indicate whether a DSR is |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
483 # to be posted. Pass this together with a pointer to |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
484 # the interrupt object we have just used to the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
485 # interrupt tidy up routine. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
486 mov r0,r4 ! arg1 = isr_ret |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
487 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
488 # Note that r8 and r9 are defined to be preserved across |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
489 # calls by the calling convention, so they still contain |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
490 # the register dump and the vector table index respectively. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
491 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
492 mov.l $_hal_interrupt_objects,r0 ! get interrupt object table |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
493 mov.l @(r0,r9),r5 ! arg2 = interrupt object |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
494 mov.l $_interrupt_end,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
495 mov r8,r6 ! arg3 = saved register dump |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
496 jsr @r0 ! call into C to finish off |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
497 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
498 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
499 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
500 restore_state: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
501 # All done, restore CPU state and continue |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
502 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
503 # Disable interrupts and switch register bank during the restore |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
504 # operation |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
505 mov.l $nCYG_SR_BANK1,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
506 ldc r1,sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
507 # ------------------------------------------------------------ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
508 # Register bank has changed now. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
509 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
510 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
511 # Single step debugging becomes impossible after this point! |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
512 # |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
513 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
514 mov r15,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
515 ldc.l @r0+,r0_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
516 ldc.l @r0+,r1_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
517 ldc.l @r0+,r2_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
518 ldc.l @r0+,r3_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
519 ldc.l @r0+,r4_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
520 ldc.l @r0+,r5_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
521 ldc.l @r0+,r6_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
522 ldc.l @r0+,r7_bank |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
523 mov.l @r0+,r8 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
524 mov.l @r0+,r9 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
525 mov.l @r0+,r10 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
526 mov.l @r0+,r11 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
527 mov.l @r0+,r12 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
528 mov.l @r0+,r13 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
529 mov.l @r0+,r14 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
530 mov.l @r0+,r15 ! return SP |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
531 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
532 lds.l @r0+,macl ! macl |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
533 lds.l @r0+,mach ! mach |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
534 lds.l @r0+,pr ! PR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
535 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
536 mov.l @r0+,r2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
537 ldc r2,ssr ! return SR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
538 mov.l @r0+,r2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
539 ldc r2,spc ! return PC |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
540 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
541 #ifndef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
542 mov.l @r0+,r2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
543 ldc r2,vbr ! return VBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
544 mov.l @r0+,r2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
545 ldc r2,gbr ! return GBR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
546 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
547 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
548 rte |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
549 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
550 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
551 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
552 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
553 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
554 ##----------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
555 ## Execute pending DSRs on the interrupt stack with interrupts enabled. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
556 ## Note: this can only be called from code running on a thread stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
557 .globl _hal_interrupt_stack_call_pending_DSRs |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
558 _hal_interrupt_stack_call_pending_DSRs: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
559 # Change to interrupt stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
560 mov r15,r2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
561 mov.l $__interrupt_stack,r15 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
562 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
563 mov.l r2,@-r15 ! save old stack pointer |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
564 sts.l pr,@-r15 ! save pr on stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
565 stc sr,r3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
566 mov.l r3,@-r15 ! save sr on stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
567 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
568 # enable interrupts |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
569 hal_cpu_int_enable r0,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
570 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
571 # Call into kernel which will execute DSRs |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
572 mov.l $_cyg_interrupt_call_pending_DSRs,r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
573 jsr @r0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
574 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
575 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
576 # Get old sr, pr, and stack values |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
577 mov.l @r15+,r3 ! get old sr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
578 lds.l @r15+,pr ! get old pr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
579 mov.l @r15+,r15 ! get old stack pointer |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
580 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
581 # Restore SR interrupt state |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
582 hal_cpu_int_merge r3,r0,r1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
583 rts |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
584 nop |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
585 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
586 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
587 #endif // CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
588 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
589 .align 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
590 #ifdef __DEBUG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
591 $int_state_marker: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
592 .long 0x77777771 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
593 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
594 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
595 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
596 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
597 .extern _hal_saved_interrupt_state |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
598 $_hal_saved_interrupt_state: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
599 .long _hal_saved_interrupt_state |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
600 #endif |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
601 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
602 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
603 $__interrupt_stack: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
604 .long __interrupt_stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
605 $__interrupt_stack_base: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
606 .long __interrupt_stack_base |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
607 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
608 $nCYG_SR2: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
609 .long CYG_SR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
610 $nCYG_SR_BANK1: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
611 .long CYG_SR_BANK1 |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
612 $nCYGARC_REG_INTEVT: |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
613 .long CYGARC_REG_INTEVT |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
614 #ifdef CYGARC_REG_INTEVT2 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
615 $nCYGARC_REG_INTEVT2: |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
80
diff
changeset
|
616 .long CYGARC_REG_INTEVT2 |
|
99
97d9d85b42c0
Merge from eCos master repository on 2000-06-07-14:25:36-BST
jlarmour
parents:
84
diff
changeset
|
617 #endif |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
618 $_hal_interrupt_handlers: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
619 .long _hal_interrupt_handlers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
620 $_hal_interrupt_data: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
621 .long _hal_interrupt_data |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
622 $_hal_interrupt_objects: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
623 .long _hal_interrupt_objects |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
624 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
625 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
626 $cyg_hal_ILVL_table: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
627 .long _cyg_hal_ILVL_table |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
628 $unmasked_SR: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
629 .long (CYG_SR & ~CYGARC_REG_SR_IMASK) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
630 #endif // CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
631 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
632 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
633 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
634 .extern _cyg_scheduler_sched_lock |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
635 .extern _interrupt_end |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
636 .extern _cyg_interrupt_call_pending_DSRs |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
637 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
638 $_cyg_interrupt_call_pending_DSRs: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
639 .long _cyg_interrupt_call_pending_DSRs |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
640 $cyg_scheduler_sched_lock: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
641 .long cyg_scheduler_sched_lock |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
642 $_interrupt_end: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
643 .long _interrupt_end |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
644 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
645 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
646 #--------------------------------------------------------------------------- |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
647 # Platform initialization (reset) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
648 __reset_platform: |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
649 hal_post_reset_init |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
650 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
651 #ifdef __DEBUG |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
652 mov #0,r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
653 mov #1,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
654 mov #2,r2 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
655 mov #3,r3 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
656 mov #4,r4 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
657 mov #5,r5 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
658 mov #6,r6 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
659 mov #7,r7 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
660 mov #8,r8 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
661 mov #9,r9 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
662 mov #10,r10 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
663 mov #11,r11 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
664 mov #12,r12 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
665 mov #13,r13 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
666 mov #14,r14 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
667 #endif |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
668 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
669 # Call platform specific hardware initialization |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
670 # This may include memory controller initialization. It is not |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
671 # safe to access RAM until after this point. |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
130
diff
changeset
|
672 # Note that caches must not be enabled until after this point, |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
130
diff
changeset
|
673 # since we may be fiddling the FRQCR which cannot be safely done |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
130
diff
changeset
|
674 # by code in burst/cachable memory (errata SH7-184e). |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
675 hal_hardware_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
676 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
677 # Now copy necessary bits to RAM and jump to the VMA base |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
678 |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
128
diff
changeset
|
679 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SUBSETROMRAM) |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
680 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
681 # Copy data from ROM to ram |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
682 mov.l $__rom_data_start,r3 ! r3 = rom start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
683 mov.l $__ram_data_start,r4 ! r4 = ram start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
684 mov.l $__ram_data_end,r5 ! r5 = ram end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
685 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
686 cmp/eq r4,r5 ! skip if no data |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
687 bt 2f |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
688 1: mov.l @r3+,r0 ! get word from ROM |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
689 mov.l r0,@r4 ! store in RAM |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
690 add #4,r4 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
691 cmp/eq r4,r5 ! compare |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
692 bf 1b ! loop if not yet done |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
693 2: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
694 |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
128
diff
changeset
|
695 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
696 # Jump to the proper VMA base of the code. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
697 mov.l $_complete_setup,r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
698 jmp @r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
699 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
700 .align 2 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
701 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
702 .extern __rom_data_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
703 .extern __ram_data_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
704 .extern __ram_data_end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
705 $__rom_data_start: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
706 .long __rom_data_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
707 $__ram_data_start: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
708 .long __ram_data_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
709 $__ram_data_end: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
710 .long __ram_data_end |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
128
diff
changeset
|
711 |
|
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
128
diff
changeset
|
712 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
713 $_complete_setup: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
714 .long _complete_setup |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
715 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
716 #elif defined(CYG_HAL_STARTUP_ROMRAM) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
717 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
718 # Copy everything to the proper VMA base and jump to it. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
719 mov.l $_vectors_lma,r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
720 mov.l $_vectors_vma,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
721 mov.l $_end,r2 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
722 1: mov.l @r0+,r3 ! get word from ROM |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
723 mov.l r3,@r1 ! store in RAM |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
724 add #4,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
725 cmp/eq r1,r2 ! compare |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
726 bf 1b ! loop if not yet done |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
727 mov.l $_complete_setup,r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
728 jmp @r0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
729 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
730 .align 2 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
731 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
732 .extern __vector_code_lma |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
733 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
734 $_vectors_lma: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
735 .long __vector_code_lma |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
736 $_vectors_vma: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
737 .long __reset |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
738 $_end: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
739 .long _end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
740 $_complete_setup: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
741 .long _complete_setup |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
742 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
743 #else |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
744 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
745 # Jump to remaining setup code. Relative branch is OK since VMA=LMA. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
746 bra _complete_setup |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
747 nop |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
748 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
749 #endif |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
750 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
751 #----------------------------------------------------------------------------- |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
752 # Complete target initialization and setup. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
753 # After this point we can use absolute addressing modes and access all the |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
754 # memory in the system. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
755 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
756 _complete_setup: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
757 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
758 # Set up monitor related stuff (vectors primarily) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
759 hal_mon_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
760 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
761 # set up stack |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
762 mov.l $__startup_stack,r15 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
763 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
764 # clear BSS |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
765 mov.l $__bss_start,r3 ! r3 = start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
766 mov.l $__bss_end,r4 ! r4 = end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
767 mov #0,r0 ! r0 = 0 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
768 1: cmp/eq r3,r4 ! skip if no bss |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
769 bt 2f |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
770 mov.l r0,@r3 ! store zero |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
771 add #4,r3 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
772 bra 1b ! loop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
773 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
774 2: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
775 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
776 # It is now safe to call C functions which may rely on initialized |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
777 # data. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
778 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
779 # # Initialize MMU. |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
780 # .extern hal_MMU_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
781 # jsr hal_MMU_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
782 # nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
783 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
784 # Enable caches |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
785 mov.l $_cyg_var_enable_caches,r1 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
786 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
787 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
788 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
789 # Variant HALs may need to do something special before we continue |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
790 mov.l $_hal_variant_init,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
791 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
792 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
793 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
794 # Platform initialization |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
795 mov.l $_hal_platform_init,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
796 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
797 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
798 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
799 # call c++ constructors |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
800 mov.l $_cyg_hal_invoke_constructors,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
801 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
802 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
803 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
804 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
805 mov.l $_initialize_stub,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
806 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
807 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
808 #endif |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
809 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
810 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
811 mov.l $_hal_ctrlc_isr_init,r1 |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
812 jsr @r1 |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
813 nop |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
814 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
815 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
816 mov.l $_cyg_start,r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
817 jsr @r1 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
818 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
819 9: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
820 bra 9b ! if we return, loop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
821 nop |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
822 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
823 .align 2 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
824 $__startup_stack: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
825 .long __startup_stack |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
826 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
827 .extern __bss_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
828 .extern __bss_end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
829 .extern _cyg_hal_invoke_constructors |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
830 .extern _hal_variant_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
831 .extern _hal_platform_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
832 .extern _cyg_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
833 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
834 $__bss_start: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
835 .long __bss_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
836 $__bss_end: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
837 .long __bss_end |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
838 $_cyg_hal_invoke_constructors: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
839 .long _cyg_hal_invoke_constructors |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
840 $_cyg_var_enable_caches: |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
841 .long _cyg_var_enable_caches |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
842 $_hal_variant_init: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
843 .long _hal_variant_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
844 $_hal_platform_init: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
845 .long _hal_platform_init |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
846 $_cyg_start: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
847 .long _cyg_start |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
848 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
849 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
850 .extern _initialize_stub |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
851 $_initialize_stub: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
852 .long _initialize_stub |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
853 #endif |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
854 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
855 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
856 .extern _hal_ctrlc_isr_init |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
857 $_hal_ctrlc_isr_init: |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
858 .long _hal_ctrlc_isr_init |
|
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
859 #endif |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
860 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
101
diff
changeset
|
861 #--------------------------------------------------------------------------- |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
862 # Interrupt vector tables. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
863 # These tables contain the isr, data and object pointers used to deliver |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
864 # interrupts to user code. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
865 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
866 .data |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
867 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
868 .extern _hal_default_isr |
|
134
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
869 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
870 #define CYG_ISR_TABLE_SIZE 1 |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
871 #else |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
872 #define CYG_ISR_TABLE_SIZE CYGNUM_HAL_ISR_COUNT |
|
d2f49caf9e38
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
132
diff
changeset
|
873 #endif |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
874 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
875 .globl _hal_interrupt_handlers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
876 _hal_interrupt_handlers: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
877 .rept CYG_ISR_TABLE_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
878 .long _hal_default_isr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
879 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
880 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
881 .globl _hal_interrupt_data |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
882 _hal_interrupt_data: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
883 .rept CYG_ISR_TABLE_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
884 .long 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
885 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
886 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
887 .globl _hal_interrupt_objects |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
888 _hal_interrupt_objects: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
889 .rept CYG_ISR_TABLE_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
890 .long 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
891 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
892 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
893 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
894 .globl _cyg_hal_ILVL_table |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
895 _cyg_hal_ILVL_table: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
896 # The first entries in the table have static priorities. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
897 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
898 .byte 0xf // NMI |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
899 .byte 0xf // Reserved |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
900 .byte 0xf // LVL0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
901 .byte 0xe // LVL1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
902 .byte 0xd // LVL2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
903 .byte 0xc // LVL3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
904 .byte 0xb // LVL4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
905 .byte 0xa // LVL5 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
906 .byte 0x9 // LVL6 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
907 .byte 0x8 // LVL7 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
908 .byte 0x7 // LVL8 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
909 .byte 0x6 // LVL9 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
910 .byte 0x5 // LVL10 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
911 .byte 0x4 // LVL11 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
912 .byte 0x3 // LVL12 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
913 .byte 0x2 // LVL13 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
914 .byte 0x1 // LVL14 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
915 .byte 0xf // Reserved |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
916 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
917 # The rest of the table consists of programmable levels, maintained |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
918 # by the HAL_INTERRUPT_SET_LEVEL macro. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
919 .rept (CYGNUM_HAL_ISR_MAX-CYGNUM_HAL_INTERRUPT_RESERVED_3E0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
920 .byte 0xf |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
921 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
922 #endif // CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
923 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
924 #--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
925 ## Temporary interrupt stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
926 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
927 .section ".bss" |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
928 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
929 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
930 .balign 16 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
931 .global _cyg_interrupt_stack_base |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
932 _cyg_interrupt_stack_base: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
933 __interrupt_stack_base: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
934 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
935 .byte 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
936 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
937 .balign 16 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
938 .global _cyg_interrupt_stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
939 _cyg_interrupt_stack: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
940 __interrupt_stack: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
941 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
942 .long 0,0,0,0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
943 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
944 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
945 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
946 #ifdef CYGSEM_HAL_ROM_MONITOR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
947 // Enough space for stub to handle downloads. If using thread capabilities |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
948 // it will be using the RAM application's stack. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
949 # define STARTUP_STACK_SIZE 1024 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
950 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
951 # ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
952 // Enough space to run constructors. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
953 // FIXME: 512 is enough for all tests. doc/examples/twothreads |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
954 // calls printf on this stack though, and so requires more space. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
955 # define STARTUP_STACK_SIZE 1024 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
956 # else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
957 # define STARTUP_STACK_SIZE CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
958 # endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
959 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
960 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
961 .balign 16 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
962 __startup_stack_base: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
963 .rept STARTUP_STACK_SIZE |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
964 .byte 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
965 .endr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
966 .balign 16 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
967 __startup_stack: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
968 .long 0,0,0,0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
969 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
970 #--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
971 # end of vectors.S |
