Mercurial > ecos
annotate packages/hal/sh/arch/current/src/hal_misc.c @ 126:518f42066aba ecos-sw-2000-09-19
Merge from eCos master repository on 2000-09-19-06:25:26-BST
| author | jlarmour |
|---|---|
| date | Tue, 19 Sep 2000 05:53:51 +0000 |
| parents | 02ea4320376c |
| children | 0c2b7be0d798 |
| 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 // hal_misc.c |
|
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 // HAL miscellaneous functions |
|
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 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
35 // Contributors: jskov, jlarmour, nickg |
|
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-04-03 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
37 // Purpose: HAL miscellaneous functions |
|
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 contains miscellaneous functions provided by the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
39 // HAL. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
40 // |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
41 //####DESCRIPTIONEND#### |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
42 // |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
43 //=========================================================================== |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
44 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
45 #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
|
46 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
47 #include <cyg/infra/cyg_type.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
48 #include <cyg/infra/cyg_trac.h> // tracing macros |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
49 #include <cyg/infra/cyg_ass.h> // assertion macros |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
50 #include <cyg/infra/diag.h> // diag_printf |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
51 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
52 #include <cyg/hal/hal_arch.h> // HAL header |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
53 #include <cyg/hal/hal_cache.h> // HAL cache |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
54 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) || \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
55 defined(CYGPKG_HAL_EXCEPTIONS) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
56 # include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
57 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
58 |
|
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 // Functions used during initialization. |
|
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 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
63 cyg_bool cyg_hal_stop_constructors; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
64 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
65 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
66 typedef void (*pfunc) (void); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
67 extern pfunc __CTOR_LIST__[]; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
68 extern pfunc __CTOR_END__[]; |
|
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 void |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
71 cyg_hal_invoke_constructors (void) |
|
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 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
74 static pfunc *p = &__CTOR_END__[-1]; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
75 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
76 cyg_hal_stop_constructors = 0; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
77 for (; p >= __CTOR_LIST__; p--) { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
78 (*p) (); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
79 if (cyg_hal_stop_constructors) { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
80 p--; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
81 break; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
82 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
83 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
84 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
85 pfunc *p; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
86 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
87 for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
88 (*p) (); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
89 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
90 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
91 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
92 //--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
93 // First level C exception handler. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
94 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
95 externC void __handle_exception (void); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
96 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
97 externC HAL_SavedRegisters *_hal_registers; |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
98 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
99 externC volatile void *__mem_fault_handler; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
100 #endif |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
101 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
102 void |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
103 cyg_hal_exception_handler(HAL_SavedRegisters *regs) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
104 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
105 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
106 if (__mem_fault_handler && |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
107 ((regs->event >= CYGNUM_HAL_EXCEPTION_TLBMISS_ACCESS) && |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
108 (regs->event <= CYGNUM_HAL_EXCEPTION_DATA_WRITE))) { |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
109 regs->pc = (unsigned long)__mem_fault_handler; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
110 return; // Caught an exception inside stubs |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
111 } |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
112 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
113 // Set the pointer to the registers of the current exception |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
114 // context. At entry the GDB stub will expand the |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
115 // HAL_SavedRegisters structure into a (bigger) register array. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
116 _hal_registers = regs; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
117 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
118 __handle_exception(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
119 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
120 #elif defined(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
|
121 defined(CYGPKG_HAL_EXCEPTIONS) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
122 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
123 cyg_hal_deliver_exception( regs->event, (CYG_ADDRWORD)regs ); |
|
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 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
126 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
127 CYG_FAIL("Exception!!!"); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
128 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
129 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
130 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
131 return; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
132 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
133 |
|
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 // Default ISR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
136 externC cyg_uint32 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
137 hal_arch_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
138 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
139 return 0; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
140 } |
|
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 //-------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
143 // Determine the index of the ls bit of the supplied mask. |
|
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 cyg_uint32 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
146 hal_lsbit_index(cyg_uint32 mask) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
147 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
148 cyg_uint32 n = mask; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
149 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
150 static const signed char tab[64] = |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
151 { -1, 0, 1, 12, 2, 6, 0, 13, 3, 0, 7, 0, 0, 0, 0, 14, 10, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
152 4, 0, 0, 8, 0, 0, 25, 0, 0, 0, 0, 0, 21, 27 , 15, 31, 11, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
153 5, 0, 0, 0, 0, 0, 9, 0, 0, 24, 0, 0 , 20, 26, 30, 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
|
154 0, 23, 0, 19, 29, 0, 22, 18, 28, 17, 16, 0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
155 }; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
156 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
157 n &= ~(n-1UL); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
158 n = (n<<16)-n; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
159 n = (n<<6)+n; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
160 n = (n<<4)+n; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
161 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
162 return tab[n>>26]; |
|
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 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
165 //-------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
166 // Determine the index of the ms bit of the supplied mask. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
167 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
168 cyg_uint32 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
169 hal_msbit_index(cyg_uint32 mask) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
170 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
171 cyg_uint32 x = mask; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
172 cyg_uint32 w; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
173 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
174 // Phase 1: make word with all ones from that one to the right |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
175 x |= x >> 16; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
176 x |= x >> 8; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
177 x |= x >> 4; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
178 x |= x >> 2; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
179 x |= x >> 1; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
180 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
181 // Phase 2: calculate number of "1" bits in the word |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
182 w = (x & 0x55555555) + ((x >> 1) & 0x55555555); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
183 w = (w & 0x33333333) + ((w >> 2) & 0x33333333); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
184 w = w + (w >> 4); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
185 w = (w & 0x000F000F) + ((w >> 8) & 0x000F000F); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
186 return (cyg_uint32)((w + (w >> 16)) & 0xFF); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
187 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
188 } |
|
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 //--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
191 // Idle thread action |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
192 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
193 void |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
194 hal_idle_thread_action( cyg_uint32 count ) |
|
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 } |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
197 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
198 //--------------------------------------------------------------------------- |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
199 // Initial cache enabling |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
200 externC void |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
201 cyg_hal_enable_caches(void) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
202 { |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
203 // Initialize cache. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
204 HAL_UCACHE_INVALIDATE_ALL(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
205 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
206 // Enable writeback. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
207 HAL_UCACHE_WRITE_MODE(HAL_UCACHE_WRITEBACK_MODE); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
208 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
209 // Enable cache. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
210 HAL_UCACHE_ENABLE(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
211 } |
|
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 //--------------------------------------------------------------------------- |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
214 // SH3 variant stuff |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
215 // This should be split out... |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
216 void |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
217 hal_variant_init(void) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
218 { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
219 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
220 |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
221 // Low-level delay (in microseconds) |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
222 |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
223 void |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
224 hal_delay_us(int usecs) |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
225 { |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
226 unsigned char _tstr; // Current clock control |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
227 volatile unsigned char *tstr = (volatile unsigned char *)CYGARC_REG_TSTR; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
228 volatile unsigned long *tcnt = (volatile unsigned long *)CYGARC_REG_TCNT1; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
229 volatile unsigned long *tcor = (volatile unsigned long *)CYGARC_REG_TCOR1; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
230 unsigned long clocks_per_us = (CYGHWR_HAL_SH_BOARD_SPEED+(4-1))/4; // Rounded up |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
231 int diff, diff2; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
232 cyg_uint32 val1, val2; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
233 |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
234 _tstr = *tstr; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
235 *tstr |= CYGARC_REG_TSTR_STR1; // Enable channel 1 |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
236 while (usecs-- > 0) { |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
237 diff = 0; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
238 while (diff < clocks_per_us) { |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
239 val1 = *tcnt; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
240 while ((val2 = *tcnt) == val1) ; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
241 diff2 = val2 - val1; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
242 if (diff2 < 0) diff2 += *tcor; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
243 diff += diff2; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
244 } |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
245 } |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
246 *tstr = _tstr; // Restore timer to previous state |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
247 } |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
105
diff
changeset
|
248 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
76
diff
changeset
|
249 //--------------------------------------------------------------------------- |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
250 // Interrupt function support |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
251 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
252 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
253 externC cyg_uint8 cyg_hal_ILVL_table[]; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
254 #define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) \ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
255 /* Update the ILVL table, so it is easy for the interrupt entry */ \ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
256 /* code to find out the level of a given interrupt source. */ \ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
257 cyg_hal_ILVL_table[(_vector_)] = (_level_) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
258 #else |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
259 #define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
260 #endif |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
261 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
262 void |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
263 hal_interrupt_set_level(int vector, int level) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
264 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
265 cyg_uint16 iprX; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
266 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
267 CYG_ASSERT((0 <= (level) && 15 >= (level)), "Illegal level"); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
268 CYG_ASSERT((CYGNUM_HAL_ISR_MIN <= (vector) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
269 && CYGNUM_HAL_ISR_MAX >= (vector)), "Illegal vector"); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
270 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
271 HAL_UPDATE_ILVL_TABLE(vector, level); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
272 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
273 switch( (vector) ) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
274 case CYGNUM_HAL_INTERRUPT_NMI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
275 /* fall through */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
276 case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
277 /* Cannot change levels */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
278 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
279 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
280 /* IPRA */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
281 case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
282 HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
283 iprX &= ~CYGARC_REG_IPRA_TMU0_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
284 iprX |= (level)*CYGARC_REG_IPRA_TMU0_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
285 HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
286 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
287 case CYGNUM_HAL_INTERRUPT_TMU1_TUNI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
288 HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
289 iprX &= ~CYGARC_REG_IPRA_TMU1_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
290 iprX |= (level)*CYGARC_REG_IPRA_TMU1_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
291 HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
292 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
293 case CYGNUM_HAL_INTERRUPT_TMU2_TUNI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
294 case CYGNUM_HAL_INTERRUPT_TMU2_TICPI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
295 HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
296 iprX &= ~CYGARC_REG_IPRA_TMU2_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
297 iprX |= (level)*CYGARC_REG_IPRA_TMU2_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
298 HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
299 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
300 case CYGNUM_HAL_INTERRUPT_RTC_ATI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
301 case CYGNUM_HAL_INTERRUPT_RTC_PRI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
302 case CYGNUM_HAL_INTERRUPT_RTC_CUI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
303 HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
304 iprX &= ~CYGARC_REG_IPRA_RTC_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
305 iprX |= (level)*CYGARC_REG_IPRA_RTC_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
306 HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
307 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
308 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
309 /* IPRB */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
310 case CYGNUM_HAL_INTERRUPT_SCI_ERI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
311 case CYGNUM_HAL_INTERRUPT_SCI_RXI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
312 case CYGNUM_HAL_INTERRUPT_SCI_TXI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
313 case CYGNUM_HAL_INTERRUPT_SCI_TEI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
314 HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
315 iprX &= ~CYGARC_REG_IPRB_SCI_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
316 iprX |= (level)*CYGARC_REG_IPRB_SCI_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
317 HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
318 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
319 case CYGNUM_HAL_INTERRUPT_WDT_ITI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
320 HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
321 iprX &= ~CYGARC_REG_IPRB_WDT_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
322 iprX |= (level)*CYGARC_REG_IPRB_WDT_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
323 HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
324 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
325 case CYGNUM_HAL_INTERRUPT_REF_RCMI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
326 case CYGNUM_HAL_INTERRUPT_REF_ROVI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
327 HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
328 iprX &= ~CYGARC_REG_IPRB_REF_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
329 iprX |= (level)*CYGARC_REG_IPRB_REF_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
330 HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
331 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
332 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
333 /* IPRC */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
334 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
335 HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
336 iprX &= ~CYGARC_REG_IPRC_IRQ0_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
337 iprX |= (level)*CYGARC_REG_IPRC_IRQ0_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
338 HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
339 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
340 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
341 HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
342 iprX &= ~CYGARC_REG_IPRC_IRQ1_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
343 iprX |= (level)*CYGARC_REG_IPRC_IRQ1_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
344 HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
345 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
346 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
347 HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
348 iprX &= ~CYGARC_REG_IPRC_IRQ2_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
349 iprX |= (level)*CYGARC_REG_IPRC_IRQ2_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
350 HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
351 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
352 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
353 HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
354 iprX &= ~CYGARC_REG_IPRC_IRQ3_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
355 iprX |= (level)*CYGARC_REG_IPRC_IRQ3_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
356 HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
357 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
358 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
359 /* IPRD */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
360 case CYGNUM_HAL_INTERRUPT_PINT_PINT07: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
361 HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
362 iprX &= ~CYGARC_REG_IPRD_PINT07_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
363 iprX |= (level)*CYGARC_REG_IPRD_PINT07_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
364 HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
365 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
366 case CYGNUM_HAL_INTERRUPT_PINT_PINT8F: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
367 HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
368 iprX &= ~CYGARC_REG_IPRD_PINT8F_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
369 iprX |= (level)*CYGARC_REG_IPRD_PINT8F_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
370 HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
371 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
372 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
373 HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
374 iprX &= ~CYGARC_REG_IPRD_IRQ5_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
375 iprX |= (level)*CYGARC_REG_IPRD_IRQ5_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
376 HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
377 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
378 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
379 HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
380 iprX &= ~CYGARC_REG_IPRD_IRQ4_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
381 iprX |= (level)*CYGARC_REG_IPRD_IRQ4_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
382 HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
383 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
384 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
385 /* IPRE */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
386 case CYGNUM_HAL_INTERRUPT_DMAC_DEI0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
387 case CYGNUM_HAL_INTERRUPT_DMAC_DEI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
388 case CYGNUM_HAL_INTERRUPT_DMAC_DEI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
389 case CYGNUM_HAL_INTERRUPT_DMAC_DEI3: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
390 HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
391 iprX &= ~CYGARC_REG_IPRE_DMAC_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
392 iprX |= (level)*CYGARC_REG_IPRE_DMAC_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
393 HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
394 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
395 case CYGNUM_HAL_INTERRUPT_IRDA_ERI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
396 case CYGNUM_HAL_INTERRUPT_IRDA_RXI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
397 case CYGNUM_HAL_INTERRUPT_IRDA_BRI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
398 case CYGNUM_HAL_INTERRUPT_IRDA_TXI1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
399 HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
400 iprX &= ~CYGARC_REG_IPRE_IRDA_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
401 iprX |= (level)*CYGARC_REG_IPRE_IRDA_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
402 HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
403 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
404 case CYGNUM_HAL_INTERRUPT_SCIF_ERI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
405 case CYGNUM_HAL_INTERRUPT_SCIF_RXI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
406 case CYGNUM_HAL_INTERRUPT_SCIF_BRI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
407 case CYGNUM_HAL_INTERRUPT_SCIF_TXI2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
408 HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
409 iprX &= ~CYGARC_REG_IPRE_SCIF_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
410 iprX |= (level)*CYGARC_REG_IPRE_SCIF_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
411 HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
412 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
413 case CYGNUM_HAL_INTERRUPT_ADC_ADI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
414 HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
415 iprX &= ~CYGARC_REG_IPRE_ADC_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
416 iprX |= (level)*CYGARC_REG_IPRE_ADC_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
417 HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
418 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
419 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
420 /* IPRF */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
421 case CYGNUM_HAL_INTERRUPT_LCDC_LCDI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
422 HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
423 iprX &= ~CYGARC_REG_IPRF_LCDI_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
424 iprX |= (level)*CYGARC_REG_IPRF_LCDI_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
425 HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
426 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
427 case CYGNUM_HAL_INTERRUPT_PCC_PCC0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
428 HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
429 iprX &= ~CYGARC_REG_IPRF_PCC0_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
430 iprX |= (level)*CYGARC_REG_IPRF_PCC0_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
431 HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
432 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
433 case CYGNUM_HAL_INTERRUPT_PCC_PCC1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
434 HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
435 iprX &= ~CYGARC_REG_IPRF_PCC1_MASK; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
436 iprX |= (level)*CYGARC_REG_IPRF_PCC1_PRI1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
437 HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
438 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
439 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
440 case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
441 case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
442 /* Do nothing for these reserved vectors. */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
443 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
444 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
445 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
446 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
447 void |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
448 hal_interrupt_mask(int vector) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
449 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
450 switch( (vector) ) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
451 case CYGNUM_HAL_INTERRUPT_NMI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
452 /* fall through */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
453 case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
454 /* Can only be masked by fiddling Imask in SR. */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
455 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
456 case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
457 HAL_INTERRUPT_SET_LEVEL((vector), 0); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
458 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
459 case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
460 case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
461 /* Do nothing for these reserved vectors. */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
462 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
463 default: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
464 CYG_FAIL("Unknown interrupt vector"); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
465 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
466 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
467 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
468 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
469 void |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
470 hal_interrupt_unmask(int vector) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
471 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
472 switch( (vector) ) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
473 case CYGNUM_HAL_INTERRUPT_NMI: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
474 /* fall through */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
475 case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
476 /* Can only be unmasked by fiddling Imask in SR. */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
477 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
478 case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
479 HAL_INTERRUPT_SET_LEVEL((vector), 1); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
480 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
481 case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
482 case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
483 /* Do nothing for these reserved vectors. */ |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
484 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
485 default: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
486 CYG_FAIL("Unknown interrupt vector"); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
487 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
488 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
489 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
490 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
491 void |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
492 hal_interrupt_acknowledge(int vector) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
493 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
494 if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
495 && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
496 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
497 cyg_uint8 irr0; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
498 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
499 HAL_READ_UINT8(CYGARC_REG_IRR0, irr0); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
500 switch ( vector ) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
501 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
502 irr0 &= ~CYGARC_REG_IRR0_IRQ0; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
503 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
504 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
505 irr0 &= ~CYGARC_REG_IRR0_IRQ1; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
506 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
507 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
508 irr0 &= ~CYGARC_REG_IRR0_IRQ2; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
509 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
510 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
511 irr0 &= ~CYGARC_REG_IRR0_IRQ3; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
512 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
513 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
514 irr0 &= ~CYGARC_REG_IRR0_IRQ4; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
515 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
516 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
517 irr0 &= ~CYGARC_REG_IRR0_IRQ5; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
518 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
519 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
520 HAL_WRITE_UINT8(CYGARC_REG_IRR0, irr0); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
521 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
522 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
523 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
524 // Note: The PINTs can be masked and configured individually, even |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
525 // though there are only two vectors. Maybe add some fake vectors just |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
526 // for masking/configuring? |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
527 void |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
528 hal_interrupt_configure(int vector, int level, int up) |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
529 { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
530 if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
531 && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
532 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
533 cyg_uint16 icr1, ss, mask; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
534 ss = 0; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
535 mask = CYGARC_REG_ICR1_SENSE_UP|CYGARC_REG_ICR1_SENSE_LEVEL; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
536 if (up) ss |= CYGARC_REG_ICR1_SENSE_UP; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
537 if (level) ss |= CYGARC_REG_ICR1_SENSE_LEVEL; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
538 CYG_ASSERT(!(up && level), "Cannot trigger on high level!"); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
539 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
540 switch( (vector) ) { |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
541 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
542 ss <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
543 mask <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
544 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
545 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
546 ss <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
547 mask <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
548 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
549 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
550 ss <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
551 mask <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
552 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
553 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
554 ss <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
555 mask <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
556 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
557 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
558 ss <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
559 mask <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
560 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
561 case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
562 ss <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
563 mask <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
564 break; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
565 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
566 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
567 HAL_READ_UINT16(CYGARC_REG_ICR1, icr1); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
568 icr1 &= ~mask; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
569 icr1 |= ss; |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
570 HAL_WRITE_UINT16(CYGARC_REG_ICR1, icr1); |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
571 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
572 } |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
573 |
|
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
112
diff
changeset
|
574 //--------------------------------------------------------------------------- |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff
changeset
|
575 // End of hal_misc.c |
