annotate packages/hal/arm/cma230/current/src/cma230_misc.c @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents d2c90368aeef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
2 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
3 // cma230_misc.c
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
4 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
5 // HAL misc board support code for ARM CMA230-1
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
6 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
7 //==========================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
9 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 152
diff changeset
12 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
14 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
16 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 152
diff changeset
17 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
21 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 152
diff changeset
22 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
23 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 152
diff changeset
26 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
27 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
28 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
29 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
31 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
33 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 152
diff changeset
34 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
35 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
36 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
37 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
39 //==========================================================================
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
41 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
42 // Author(s): gthomas
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
43 // Contributors: gthomas
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
44 // Date: 1999-02-20
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
45 // Purpose: HAL board support
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
46 // Description: Implementations of HAL board interfaces
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
47 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
48 //####DESCRIPTIONEND####
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
49 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
50 //========================================================================*/
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
51
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
52 #include <pkgconf/hal.h>
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
53
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
54 #include <cyg/infra/cyg_type.h> // base types
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
55 #include <cyg/infra/cyg_trac.h> // tracing macros
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
56 #include <cyg/infra/cyg_ass.h> // assertion macros
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
57
110
84e4bde58b26 Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents: 66
diff changeset
58 #include <cyg/hal/hal_if.h> // calling interface API
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
59 #include <cyg/hal/hal_io.h> // IO macros
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
60 #include <cyg/hal/hal_arch.h> // Register state info
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
61 #include <cyg/hal/hal_diag.h>
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
62 #include <cyg/hal/hal_intr.h> // Interrupt names
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
63 #include <cyg/hal/hal_cache.h>
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
64 #include <cyg/hal/hal_cma230.h> // Hardware definitions
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
65
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
66 static cyg_uint32 _period;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
67
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
68 // Use Timer/Counter #2 for system clock
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
69
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
70 void hal_clock_initialize(cyg_uint32 period)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
71 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
72 // Initialize counter
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
73 *(volatile cyg_uint16 *)CMA230_TC_ENABLE = 0; // Disable timer
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
74 *(volatile cyg_uint16 *)CMA230_TC_CLEAR = 0; // Resets counter
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
75 *(volatile cyg_uint16 *)CMA230_TC_PRELOAD = period;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
76 *(volatile cyg_uint16 *)CMA230_TC_ENABLE = 1; // Starts timer
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
77 _period = period;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
78 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
79
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
80 // This routine is called during a clock interrupt.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
81
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
82 void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
83 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
84 if (period != _period) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
85 *(volatile cyg_uint16 *)CMA230_TC_PRELOAD = period;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
86 _period = period;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
87 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
88 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
89
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
90 // Read the current value of the clock, returning the number of hardware "ticks"
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
91 // that have occurred (i.e. how far away the current value is from the start)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
92
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
93 void hal_clock_read(cyg_uint32 *pvalue)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
94 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
95 volatile cyg_int16 *tcct = (volatile cyg_int16 *)CMA230_TC_COUNT;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
96 static cyg_int32 clock_val;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
97 clock_val = *tcct; // Register has only 16 bits
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
98 *pvalue = (cyg_uint32)(_period - clock_val); // 'clock_val' counts down and wraps
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
99 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
100
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
101 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
102 // Early stage hardware initialization
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
103 // Some initialization has already been done before we get here. For now
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
104 // just set up the interrupt environment.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
105
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
106 // Note: The hardware interrupt mask (read) doesn't seem to give reliable results.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
107 static cyg_uint8 _imrr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
108 #undef CMA230_IMRr
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
109 #define CMA230_IMRr (&_imrr)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
110
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
111 void hal_hardware_init(void)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
112 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
113 #if 0
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
114 // Clear and initialize instruction cache
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
115 HAL_ICACHE_INVALIDATE_ALL();
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
116 HAL_ICACHE_ENABLE();
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
117 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
118 // Any hardware/platform initialization that needs to be done.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
119 // Reset all interrupt masks (disable all interrupt sources)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
120 *(volatile cyg_uint8 *)CMA230_IMRw = 0;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
121 *(volatile cyg_uint8 *)CMA230_CLR = 0xFF; // Clear all current interrupts
110
84e4bde58b26 Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents: 66
diff changeset
122
84e4bde58b26 Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents: 66
diff changeset
123 // Set up eCos/ROM interfaces
84e4bde58b26 Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents: 66
diff changeset
124 hal_if_init();
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
125 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
126
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
127 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
128 // This routine is called to respond to a hardware interrupt (IRQ). It
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
129 // should interrogate the hardware and return the IRQ vector number.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
130
152
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
131 #if 0
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
132 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
133 int tot_ints;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
134 cyg_uint32 int_PC[2048];
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
135 // TEMP
152
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
136 #endif
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
137
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
138 int hal_IRQ_handler(HAL_SavedRegisters *regs)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
139 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
140 volatile cyg_uint8 isr = *(volatile cyg_uint8 *)CMA230_ISR;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
141 volatile cyg_uint8 *imrr = (volatile cyg_uint8 *)CMA230_IMRr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
142 int vector;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
143 isr &= *imrr; // The Interrupt Source Register shows _all_ current
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
144 // interrupt sources, not just the enabled ones
152
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
145 #if 0
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
146 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
147 int_PC[tot_ints++] = 0xFFFFFFFF;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
148 int_PC[tot_ints++] = isr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
149 int_PC[tot_ints++] = regs->cpsr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
150 int_PC[tot_ints++] = regs->pc;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
151 if (tot_ints == 2048) tot_ints = 0;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
152 // TEMP
152
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
153 #endif
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
154
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
155 for (vector = 0; vector < 8; vector++) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
156 if (isr & (1<<vector)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
157 return (vector+1);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
158 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
159 }
152
f935b880e96c Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents: 110
diff changeset
160 return CYGNUM_HAL_INTERRUPT_NONE; // This shouldn't happen!
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
161 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
162
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
163 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
164 // Interrupt control
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
165 //
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
166
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
167 // Disable (mask) an interrupt
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
168 void hal_interrupt_mask(int vector)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
169 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
170 volatile cyg_uint8 *imrr = (volatile cyg_uint8 *)CMA230_IMRr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
171 volatile cyg_uint8 *imrw = (volatile cyg_uint8 *)CMA230_IMRw;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
172 cyg_uint8 new_mask = *imrr & ~(1<<(vector-1));
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
173 *imrw = new_mask;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
174 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
175 *imrr = new_mask;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
176 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
177 // diag_printf("Mask interrupt #%d - mask: %x\n", vector, *imrr);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
178 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
179
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
180 // Enable (unmask) an interrupt
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
181 void hal_interrupt_unmask(int vector)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
182 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
183 volatile cyg_uint8 *imrr = (volatile cyg_uint8 *)CMA230_IMRr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
184 volatile cyg_uint8 *imrw = (volatile cyg_uint8 *)CMA230_IMRw;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
185 cyg_uint8 new_mask = *imrr | (1<<(vector-1));
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
186 *imrw = new_mask;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
187 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
188 *imrr = new_mask;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
189 // TEMP
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
190 // diag_printf("Unmask interrupt #%d - mask: %x\n", vector, *imrr);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
191 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
192
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
193 void hal_interrupt_acknowledge(int vector)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
194 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
195 // These two vectors are "sticky" and must be reset
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
196 if ((vector == CYGNUM_HAL_INTERRUPT_TIMER) ||
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
197 (vector == CYGNUM_HAL_INTERRUPT_ABORT)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
198 *(volatile cyg_uint8 *)CMA230_CLR = (1<<(vector-1));
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
199 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
200 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
201
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
202 void hal_interrupt_configure(int vector, int level, int up)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
203 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
204 // No interrupts are configurable on this hardware
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
205 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
206
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
207 void hal_interrupt_set_level(int vector, int level)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
208 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
209 // No interrupts are configurable on this hardware
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
210 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
211
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
212 /*------------------------------------------------------------------------*/
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
diff changeset
213 // EOF hal_misc.c