annotate packages/hal/arm/arch/current/include/hal_intr.h @ 66:bf00f99aec69 ecos-sw-2000-02-02

Merge from eCos master repository on 2000-02-02-19:16:44-GMT
author jlarmour
date Wed, 02 Feb 2000 19:57:02 +0000
parents c38311975d4f
children 435cced73e2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 // hal_intr.h
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 // HAL Interrupt and clock support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
12 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
13 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
14 // The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
15 // Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
16 // compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
17 // http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
18 //
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
19 // Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
20 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
21 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
22 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
24 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
25 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
26 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
27 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
28 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
29 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
30 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
31 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 26
diff changeset
32 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Author(s): nickg, gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 // Contributors: nickg, gthomas,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 // jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 // Date: 1999-02-20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 // Purpose: Define Interrupt support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 // Description: The macros defined here provide the HAL APIs for handling
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 // interrupts and the clock.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Usage: #include <cyg/hal/hal_intr.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // ...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #include <cyg/infra/cyg_type.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #include <cyg/hal/hal_platform_ints.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 // ARM exception vectors.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 // These vectors correspond to VSRs. These values are the ones to use for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 // HAL_VSR_GET/SET
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
64 #define CYGNUM_HAL_VECTOR_RESET 0
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
65 #define CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION 1
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
66 #define CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT 2
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
67 #define CYGNUM_HAL_VECTOR_ABORT_PREFETCH 3
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
68 #define CYGNUM_HAL_VECTOR_ABORT_DATA 4
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
69 #define CYGNUM_HAL_VECTOR_reserved 5
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
70 #define CYGNUM_HAL_VECTOR_IRQ 6
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
71 #define CYGNUM_HAL_VECTOR_FIQ 7
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 #define CYGNUM_HAL_VSR_MIN 0
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
74 #define CYGNUM_HAL_VSR_MAX 7
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
75 #define CYGNUM_HAL_VSR_COUNT 8
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 // Exception vectors. These are the values used when passed out to an
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 // external exception handler using cyg_hal_deliver_exception()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 #define CYGNUM_HAL_EXCEPTION_INTERRUPT \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 #define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_ABORT_PREFETCH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_ABORT_DATA
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 #define CYGNUM_HAL_EXCEPTION_FIQ CYGNUM_HAL_VECTOR_FIQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_FIQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 #define CYGNUM_HAL_EXCEPTION_COUNT (CYGNUM_HAL_EXCEPTION_MAX - \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 CYGNUM_HAL_EXCEPTION_MIN + 1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 // Static data used by HAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 // ISR tables
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 externC volatile CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 externC volatile CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 externC volatile CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 // VSR table
26
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
102 //externC volatile CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT];
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
103
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
104 // actually, it is immediately after the hardware vectors
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
105 #define hal_vsr_table ((volatile CYG_ADDRESS *)(0x20))
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
106
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
107 // and followed by a DRAM size variable used during bootup. This is in a
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
108 // fixed location so that it can be shared between an eCos Stub ROM and a
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
109 // RAM start eCos app. Ie. so that RAM startup code knows DRAM size.
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
110 // If this variable is zero, RAM size is unknown/is the default.
4741a3c3496a Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents: 8
diff changeset
111 #define hal_dram_size (*(CYG_WORD *)(0x40))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 // Default ISR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 // Interrupt state storage
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 typedef cyg_uint32 CYG_INTERRUPT_STATE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 // Interrupt control macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 // Note: This disables both FIQ and IRQ interrupts!
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 #define HAL_DISABLE_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 "mrs %0,cpsr;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 "mrs r4,cpsr;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 "orr r4,r4,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 "msr cpsr,r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 : "=r"(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 : \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 : "r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 #define HAL_ENABLE_INTERRUPTS() \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 "mrs r3,cpsr;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 "bic r3,r3,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 "msr cpsr,r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 : \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 : \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 : "r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 #define HAL_RESTORE_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 "mrs r3,cpsr;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 "and r4,%0,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 "bic r3,r3,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 "orr r3,r3,r4;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 "msr cpsr,r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 : \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 : "r"(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 : "r3", "r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 #define HAL_QUERY_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 "mrs r4,cpsr;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 "and r4,r4,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 "eor %0,r4,#0xC0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 : "=r"(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 : \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 : "r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 //--------------------------------------------------------------------------
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
171 // Routine to execute DSRs using separate interrupt stack
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
172
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
173 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
174 externC void hal_interrupt_stack_call_pending_DSRs(void);
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
175 #define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
176 hal_interrupt_stack_call_pending_DSRs()
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
177
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
178 // these are offered solely for stack usage testing
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
179 // if they are not defined, then there is no interrupt stack.
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
180 #define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
181 #define HAL_INTERRUPT_STACK_TOP cyg_interrupt_stack
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
182 // use them to declare these extern however you want:
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
183 // extern char HAL_INTERRUPT_STACK_BASE[];
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
184 // extern char HAL_INTERRUPT_STACK_TOP[];
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
185 // is recommended
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
186 #endif
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
187
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
188 //--------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 // Vector translation.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 #ifndef HAL_TRANSLATE_VECTOR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 (_index_) = (_vector_)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 // Interrupt and VSR attachment macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 #define HAL_INTERRUPT_IN_USE( _vector_, _state_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 cyg_uint32 _index_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 (_state_) = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 else \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 (_state_) = 1; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 #define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)hal_default_isr ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)_isr_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 hal_interrupt_data[_vector_] = (CYG_ADDRWORD) _data_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 hal_interrupt_objects[_vector_] = (CYG_ADDRESS)_object_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 } \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)_isr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)hal_default_isr; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 hal_interrupt_data[_vector_] = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 hal_interrupt_objects[_vector_] = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 } \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 #define HAL_VSR_GET( _vector_, _pvsr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 if( _poldvsr_ != NULL ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 // Interrupt controller access
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 externC void hal_interrupt_mask(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 externC void hal_interrupt_unmask(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 externC void hal_interrupt_acknowledge(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 externC void hal_interrupt_configure(int, int, int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 externC void hal_interrupt_set_level(int, int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 #define HAL_INTERRUPT_MASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 hal_interrupt_mask( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 #define HAL_INTERRUPT_UNMASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 hal_interrupt_unmask( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 hal_interrupt_acknowledge( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 hal_interrupt_configure( _vector_, _level_, _up_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 hal_interrupt_set_level( _vector_, _level_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 // Clock control
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 externC void hal_clock_initialize(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 externC void hal_clock_read(cyg_uint32 *);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 externC void hal_clock_reset(cyg_uint32, cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 #define HAL_CLOCK_INITIALIZE( _period_ ) hal_clock_initialize( _period_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 #define HAL_CLOCK_RESET( _vec_, _period_ ) hal_clock_reset( _vec_, _period_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 #define HAL_CLOCK_READ( _pvalue_ ) hal_clock_read( _pvalue_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 #define HAL_CLOCK_LATENCY( _pvalue_ ) HAL_CLOCK_READ( (cyg_uint32 *)_pvalue_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 #endif // ifndef CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 // End of hal_intr.h