Mercurial > nand-ecoscentric
annotate packages/hal/arm/cl7211/current/src/cl7211_misc.c @ 38:e7ba79f6d3a8 ecos-sw-1999-09-23
Merge from eCos master repository on 1999-09-23-20:10:25-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 Sep 1999 19:52:27 +0000 |
| parents | e97d78785e2d |
| children | 94fd8fbfe8fe |
| rev | line source |
|---|---|
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
3 // cl7211_misc.c |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
5 // HAL misc board support code for ARM CL7211-1 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
8 //####COPYRIGHTBEGIN#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
9 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
10 // ------------------------------------------- |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
11 // The contents of this file are subject to the Cygnus eCos Public License |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
12 // Version 1.0 (the "License"); you may not use this file except in |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
13 // compliance with the License. You may obtain a copy of the License at |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
14 // http://sourceware.cygnus.com/ecos |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
15 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
18 // License for the specific language governing rights and limitations under |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
19 // the License. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
20 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
21 // The Original Code is eCos - Embedded Cygnus Operating System, released |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
22 // September 30, 1998. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
23 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
24 // The Initial Developer of the Original Code is Cygnus. Portions created |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
26 // ------------------------------------------- |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
27 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
28 //####COPYRIGHTEND#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
29 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
30 //#####DESCRIPTIONBEGIN#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
31 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
32 // Author(s): gthomas |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
33 // Contributors: gthomas |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
34 // Date: 1999-02-20 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
35 // Purpose: HAL board support |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
36 // Description: Implementations of HAL board interfaces |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
37 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
38 //####DESCRIPTIONEND#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
39 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
40 //========================================================================*/ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
41 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
42 #include <pkgconf/hal.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
43 #include <pkgconf/system.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
44 #include CYGBLD_HAL_PLATFORM_H |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
45 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
46 #include <cyg/infra/cyg_type.h> // base types |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
47 #include <cyg/infra/cyg_trac.h> // tracing macros |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
48 #include <cyg/infra/cyg_ass.h> // assertion macros |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
49 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
50 #include <cyg/hal/hal_io.h> // IO macros |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
51 #include <cyg/hal/hal_arch.h> // Register state info |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
52 #include <cyg/hal/hal_diag.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
53 #include <cyg/hal/hal_intr.h> // Interrupt names |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
54 #include <cyg/hal/hal_cache.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
55 #include <cyg/hal/hal_cl7211.h> // Hardware definitions |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
56 |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
32
diff
changeset
|
57 // #define CYGHWR_HAL_ARM_CL7211_BATLOW |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
58 #ifdef CYGHWR_HAL_ARM_CL7211_BATLOW |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
59 #include <cyg/hal/hal_intr.h> // HAL interrupt macros |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
60 #include <cyg/hal/drv_api.h> // HAL ISR support |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
61 static cyg_interrupt batlow_interrupt; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
62 static cyg_handle_t batlow_interrupt_handle; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
63 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
64 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
65 #if (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 18432) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
66 #define CPU_CLOCK 0 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
67 #elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 36864) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
68 #define CPU_CLOCK 1 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
69 #elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 49152) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
70 #define CPU_CLOCK 2 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
71 #elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 73728) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
72 #define CPU_CLOCK 3 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
73 #else |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
74 #err Invalid CPU clock frequency |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
75 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
76 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
77 static cyg_uint32 _period; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
78 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
79 // Use Timer/Counter #2 for system clock |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
80 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
81 void hal_clock_initialize(cyg_uint32 period) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
82 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
83 volatile cyg_uint32 *syscon1 = (volatile cyg_uint32 *)SYSCON1; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
84 volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
85 // Set timer to 512KHz, prescale mode |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
86 *syscon1 = (*syscon1 & ~(SYSCON1_TC2M|SYSCON1_TC2S)) | SYSCON1_TC2S | SYSCON1_TC2M; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
87 // Initialize counter |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
88 *tc2d = period; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
89 _period = period; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
90 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
91 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
92 // This routine is called during a clock interrupt. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
93 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
94 void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
95 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
96 volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
97 if (period != _period) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
98 *tc2d = period; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
99 _period = period; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
100 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
101 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
102 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
103 // Read the current value of the clock, returning the number of hardware "ticks" |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
104 // that have occurred (i.e. how far away the current value is from the start) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
105 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
106 void hal_clock_read(cyg_uint32 *pvalue) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
107 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
108 volatile cyg_int32 *tc2d = (volatile cyg_int32 *)TC2D; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
109 static cyg_int32 clock_val; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
110 clock_val = *tc2d & 0x0000FFFF; // Register has only 16 bits |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
111 if (clock_val & 0x00008000) clock_val |= 0xFFFF8000; // Extend sign bit |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
112 *pvalue = (cyg_uint32)(_period - clock_val); // 'clock_val' counts down and wraps |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
113 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
114 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
115 // These tables map the various [soft] interrupt numbers onto the hardware |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
116 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
117 static cyg_uint32 hal_interrupt_bitmap[] = { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
118 0, // CYGNUM_HAL_INTERRUPT_unused 0 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
119 INTSR1_EXTFIQ, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
120 INTSR1_BLINT, // CYGNUM_HAL_INTERRUPT_BLINT 2 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
121 INTSR1_WEINT, // CYGNUM_HAL_INTERRUPT_WEINT 3 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
122 INTSR1_MCINT, // CYGNUM_HAL_INTERRUPT_MCINT 4 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
123 INTSR1_CSINT, // CYGNUM_HAL_INTERRUPT_CSINT 5 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
124 INTSR1_EINT1, // CYGNUM_HAL_INTERRUPT_EINT1 6 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
125 INTSR1_EINT2, // CYGNUM_HAL_INTERRUPT_EINT2 7 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
126 INTSR1_EINT3, // CYGNUM_HAL_INTERRUPT_EINT3 8 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
127 INTSR1_TC1OI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
128 INTSR1_TC2OI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
129 INTSR1_RTCMI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
130 INTSR1_TINT, // CYGNUM_HAL_INTERRUPT_TINT 12 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
131 INTSR1_UTXINT1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
132 INTSR1_URXINT1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
133 INTSR1_UMSINT, // CYGNUM_HAL_INTERRUPT_UMSINT 15 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
134 INTSR1_SSEOTI, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
135 INTSR2_KBDINT, // CYGNUM_HAL_INTERRUPT_KBDINT 17 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
136 INTSR2_SS2RX, // CYGNUM_HAL_INTERRUPT_SS2RX 18 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
137 INTSR2_SS2TX, // CYGNUM_HAL_INTERRUPT_SS2TX 19 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
138 INTSR2_UTXINT2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
139 INTSR2_URXINT2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
140 #if defined(__CL7211) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
141 INTSR3_MCPINT // CYGNUM_HAL_INTERRUPT_MCPINT 22 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
142 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
143 }; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
144 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
145 static cyg_uint32 hal_interrupt_mask_regmap[] = { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
146 0, // CYGNUM_HAL_INTERRUPT_unused 0 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
147 INTMR1, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
148 INTMR1, // CYGNUM_HAL_INTERRUPT_BLINT 2 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
149 INTMR1, // CYGNUM_HAL_INTERRUPT_WEINT 3 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
150 INTMR1, // CYGNUM_HAL_INTERRUPT_MCINT 4 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
151 INTMR1, // CYGNUM_HAL_INTERRUPT_CSINT 5 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
152 INTMR1, // CYGNUM_HAL_INTERRUPT_EINT1 6 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
153 INTMR1, // CYGNUM_HAL_INTERRUPT_EINT2 7 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
154 INTMR1, // CYGNUM_HAL_INTERRUPT_EINT3 8 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
155 INTMR1, // CYGNUM_HAL_INTERRUPT_TC1OI 9 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
156 INTMR1, // CYGNUM_HAL_INTERRUPT_TC2OI 10 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
157 INTMR1, // CYGNUM_HAL_INTERRUPT_RTCMI 11 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
158 INTMR1, // CYGNUM_HAL_INTERRUPT_TINT 12 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
159 INTMR1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
160 INTMR1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
161 INTMR1, // CYGNUM_HAL_INTERRUPT_UMSINT 15 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
162 INTMR1, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
163 INTMR2, // CYGNUM_HAL_INTERRUPT_KBDINT 17 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
164 INTMR2, // CYGNUM_HAL_INTERRUPT_SS2RX 18 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
165 INTMR2, // CYGNUM_HAL_INTERRUPT_SS2TX 19 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
166 INTMR2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
167 INTMR2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
168 #if defined(__CL7211) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
169 INTMR3, // CYGNUM_HAL_INTERRUPT_MCPINT 22 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
170 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
171 }; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
172 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
173 static cyg_uint32 hal_interrupt_clear_map[] = { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
174 0, // CYGNUM_HAL_INTERRUPT_unused 0 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
175 0, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
176 BLEOI, // CYGNUM_HAL_INTERRUPT_BLINT 2 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
177 TEOI, // CYGNUM_HAL_INTERRUPT_WEINT 3 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
178 MCEOI, // CYGNUM_HAL_INTERRUPT_MCINT 4 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
179 COEOI, // CYGNUM_HAL_INTERRUPT_CSINT 5 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
180 0, // CYGNUM_HAL_INTERRUPT_EINT1 6 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
181 0, // CYGNUM_HAL_INTERRUPT_EINT2 7 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
182 0, // CYGNUM_HAL_INTERRUPT_EINT3 8 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
183 TC1EOI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
184 TC2EOI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
185 RTCEOI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
186 TEOI, // CYGNUM_HAL_INTERRUPT_TINT 12 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
187 0, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
188 0, // CYGNUM_HAL_INTERRUPT_URXINT1 14 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
189 UMSEOI, // CYGNUM_HAL_INTERRUPT_UMSINT 15 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
190 0, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
32
diff
changeset
|
191 KBDEOI, // CYGNUM_HAL_INTERRUPT_KBDINT 17 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
192 0, // CYGNUM_HAL_INTERRUPT_SS2RX 18 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
193 0, // CYGNUM_HAL_INTERRUPT_SS2TX 19 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
194 0, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
195 0, // CYGNUM_HAL_INTERRUPT_URXINT2 21 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
196 #if defined(__CL7211) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
197 0, // CYGNUM_HAL_INTERRUPT_MCPINT 22 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
198 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
199 }; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
200 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
201 static struct regmap { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
202 int first_int, last_int; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
203 cyg_uint32 stat_reg, mask_reg; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
204 } hal_interrupt_status_regmap[] = { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
205 { CYGNUM_HAL_INTERRUPT_EXTFIQ, CYGNUM_HAL_INTERRUPT_SSEOTI, INTSR1, INTMR1}, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
206 { CYGNUM_HAL_INTERRUPT_KBDINT, CYGNUM_HAL_INTERRUPT_URXINT2, INTSR2, INTMR2}, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
207 #if defined(__CL7211) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
208 { CYGNUM_HAL_INTERRUPT_MCPINT, CYGNUM_HAL_INTERRUPT_MCPINT, INTSR3, INTMR3}, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
209 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
210 { 0, 0, 0} |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
211 }; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
212 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
213 #ifdef CYGHWR_HAL_ARM_CL7211_BATLOW |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
214 // This ISR is called when the battery low interrupt occurs |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
215 int |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
216 cyg_hal_batlow_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
217 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
218 diag_printf("Battery low\n"); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
219 cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_BLINT); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
220 // Presumably, one would leave this masked until the battery changed |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
221 cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_BLINT); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
222 return 0; // No need to run DSR |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
223 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
224 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
225 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
226 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
227 // Early stage hardware initialization |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
228 // Some initialization has already been done before we get here. For now |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
229 // just set up the interrupt environment. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
230 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
231 void hal_hardware_init(void) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
232 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
233 volatile cyg_uint32 *icr; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
234 int vector; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
235 // Clear and initialize instruction cache |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
236 HAL_ICACHE_INVALIDATE_ALL(); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
237 HAL_ICACHE_ENABLE(); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
238 // Any hardware/platform initialization that needs to be done. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
239 #if 0 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
240 diag_printf("IMR1: %04x, IMR2: %04x\n", |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
241 *(volatile cyg_uint32 *)INTMR1, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
242 *(volatile cyg_uint32 *)INTMR2); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
243 diag_printf("Memcfg1: %08x, Memcfg2: %08x, DRAM refresh: %08x\n", |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
244 *(volatile cyg_uint32 *)MEMCFG1, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
245 *(volatile cyg_uint32 *)MEMCFG2, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
246 *(volatile cyg_uint8 *)DRFPR); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
247 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
248 // Reset all interrupt masks (disable all interrupt sources) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
249 *(volatile cyg_uint32 *)INTMR1 = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
250 *(volatile cyg_uint32 *)INTMR2 = 0; |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
32
diff
changeset
|
251 #if !defined(__CL7111) |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
252 *(volatile cyg_uint32 *)INTMR3 = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
253 *(volatile cyg_uint8 *)SYSCON3 = SYSCON3_CLKCTL(CPU_CLOCK); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
254 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
255 for (vector = CYGNUM_HAL_ISR_MIN; vector < CYGNUM_HAL_ISR_COUNT; vector++) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
256 icr = (volatile cyg_uint32 *)hal_interrupt_clear_map[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
257 if (icr) *icr = 0; // Just a write clears the latch |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
258 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
259 // Turn on the DIAG LED to let the world know the board is alive |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
260 *(volatile unsigned char *)LEDFLSH = LEDFLSH_ENABLE|LEDFLSH_DUTY(16)|LEDFLSH_PERIOD(1); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
261 #ifdef CYGHWR_HAL_ARM_CL7211_BATLOW |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
262 cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_BLINT, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
263 99, // Priority - what goes here? |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
264 0, // Data item passed to interrupt handler |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
265 cyg_hal_batlow_isr, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
266 0, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
267 &batlow_interrupt_handle, |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
268 &batlow_interrupt); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
269 cyg_drv_interrupt_attach(batlow_interrupt_handle); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
270 cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_BLINT); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
271 #endif |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
272 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
273 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
274 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
275 // This routine is called to respond to a hardware interrupt (IRQ). It |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
276 // should interrogate the hardware and return the IRQ vector number. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
277 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
278 // This code is a little convoluted to keep it general while still avoiding |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
279 // reading the hardware a lot, since the interrupt status is split across |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
280 // three separate registers. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
281 |
|
38
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
282 int hal_spurious_ints; |
|
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
283 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
284 int hal_IRQ_handler(void) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
285 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
286 struct regmap *map = hal_interrupt_status_regmap; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
287 cyg_uint32 stat; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
288 int vector; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
289 while (map->first_int) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
290 stat = *(volatile cyg_uint32 *)map->stat_reg & *(volatile cyg_uint32 *)map->mask_reg; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
291 for (vector = map->first_int; vector <= map->last_int; vector++) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
292 if (stat & hal_interrupt_bitmap[vector]) return vector; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
293 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
294 map++; // Next interrupt status register |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
295 } |
|
38
e7ba79f6d3a8
Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents:
36
diff
changeset
|
296 hal_spurious_ints++; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
297 return CYGNUM_HAL_INTERRUPT_unused; // This shouldn't happen! |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
298 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
299 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
300 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
301 // Interrupt control |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
302 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
303 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
304 void hal_interrupt_mask(int vector) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
305 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
306 volatile cyg_uint32 *imr; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
307 imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
308 *imr &= ~hal_interrupt_bitmap[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
309 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
310 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
311 void hal_interrupt_unmask(int vector) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
312 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
313 volatile cyg_uint32 *imr; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
314 imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
315 *imr |= hal_interrupt_bitmap[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
316 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
317 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
318 void hal_interrupt_acknowledge(int vector) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
319 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
320 // Some interrupt sources have a register for this. |
|
36
e97d78785e2d
Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents:
32
diff
changeset
|
321 volatile cyg_uint8 *icr; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
322 icr = (volatile cyg_uint32 *)hal_interrupt_clear_map[vector]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
323 if (icr) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
324 *icr = 0; // Any data clears interrupt |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
325 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
326 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
327 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
328 void hal_interrupt_configure(int vector, int level, int up) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
329 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
330 // No interrupts are configurable on this hardware |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
331 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
332 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
333 void hal_interrupt_set_level(int vector, int level) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
334 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
335 // No interrupts are configurable on this hardware |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
336 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
337 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
338 /*------------------------------------------------------------------------*/ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
339 // EOF hal_misc.c |
