annotate packages/hal/mn10300/stdeval1/current/src/hal_diag.c @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 /*=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 // hal_diag.c
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 // HAL diagnostic output code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19 // the License.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
23 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
25 // by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
28 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 //=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 // Author(s): nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 // Contributors: nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 // Date: 1998-03-02
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 // Purpose: HAL diagnostic output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 // Description: Implementations of HAL diagnostic output support.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 //===========================================================================*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 #include <cyg/infra/cyg_type.h> // base types
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 #include <cyg/infra/cyg_trac.h> // tracing macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <cyg/infra/cyg_ass.h> // assertion macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include <cyg/hal/hal_diag.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_intr.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 /* Select default diag channel to use */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 //#define CYG_KERNEL_DIAG_ROMART
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55 //#define CYG_KERNEL_DIAG_SERIAL1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 //#define CYG_KERNEL_DIAG_SERIAL2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 //#define CYG_KERNEL_DIAG_GDB
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 #if !defined(CYG_KERNEL_DIAG_SERIAL1) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 !defined(CYG_KERNEL_DIAG_SERIAL2) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 !defined(CYG_KERNEL_DIAG_ROMART)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 # if defined(CYG_HAL_MN10300_STDEVAL1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 # if defined(CYG_HAL_STARTUP_RAM)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 # if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 // If loaded into RAM via CYGMON we diag via
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 // serial 2 using GDB protocol
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 # define CYG_KERNEL_DIAG_SERIAL2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 # define CYG_KERNEL_DIAG_GDB
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 # elif defined(CYG_HAL_USE_ROM_MONITOR_SLOAD)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 // If loaded into RAM via SLOAD we diag via
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 // serial 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 # define CYG_KERNEL_DIAG_SERIAL1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 # elif defined(CYG_HAL_USE_ROM_MONITOR_GDB_STUBS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 // If loaded into RAM via GDB STUB ROM we diag via
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 // serial 1 using GDB protocol
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 # define CYG_KERNEL_DIAG_SERIAL1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 # define CYG_KERNEL_DIAG_GDB
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 # endif // defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 # elif defined(CYG_HAL_STARTUP_ROM)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 // If we are ROM resident, we diag via serial 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 # define CYG_KERNEL_DIAG_SERIAL1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 # endif // defined(CYG_HAL_STARTUP_RAM)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 # endif // defined(CYG_HAL_MN10300_STDEVAL1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 #endif // if ...
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 // PromICE AI interface
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 #if defined(CYG_HAL_MN10300_STDEVAL1_ROMART) || defined(CYG_KERNEL_DIAG_ROMART)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 #ifdef CYG_HAL_MN10300_STDEVAL1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 #define PROMICE_AILOC 0x40008000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 #define PROMICE_BUS_SIZE 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 #define PROMICE_BURST_SIZE 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 #if PROMICE_BUS_SIZE == 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 typedef volatile struct
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 volatile cyg_uint16 zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 // cyg_uint16 pad1[PROMICE_BURST_SIZE];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 volatile cyg_uint16 one;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 // cyg_uint16 pad2[PROMICE_BURST_SIZE];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 volatile cyg_uint16 data;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 // cyg_uint16 pad3[PROMICE_BURST_SIZE];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 volatile cyg_uint16 status;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 } AISTRUCT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 AISTRUCT *AI = (AISTRUCT *)PROMICE_AILOC;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 #define PROMICE_STATUS_TDA 0x01
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 #define PROMICE_STATUS_HDA 0x02
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 #define PROMICE_STATUS_OVR 0x04
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 void ai_diag_init()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 volatile cyg_uint8 junk;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 while( AI->status == 0xCC )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 junk = AI->data;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 static void ai_write_char(cyg_uint8 data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 volatile cyg_uint8 junk;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 int i;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 // Wait for tda == 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 while( (AI->status & PROMICE_STATUS_TDA) == PROMICE_STATUS_TDA )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 // Send start bit
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 junk = AI->one;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 for( i = 0; i < 8; i++ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 // send ls bit of data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 if( (data & 1) == 1 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 junk = AI->one;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 junk = AI->zero;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 // shift down for next bit
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 data >>= 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 // Send stop bit
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 junk = AI->one;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 // all done
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 void ai_diag_write_char(char c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 ai_write_char((cyg_uint8)c);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 void ai_diag_drain() {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 void ai_diag_read_char(char *c) { *c = '\n'; }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 void ai_writes(char *s)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 while( *s ) ai_write_char( *s++ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 void ai_write_hex( cyg_uint32 x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 int i;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 ai_writes("0x");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 for( i = 28; i >=0 ; i-=4 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 char *d = "0123456789ABCDEF";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 ai_write_char( d[(x>>i)&0xf] );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 ai_write_char(' ');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 #if defined(CYG_KERNEL_DIAG_ROMART)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 #define hal_diag_init_serial ai_diag_init
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 #define hal_diag_write_char_serial ai_diag_write_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 #define hal_diag_drain_serial ai_diag_drain
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 #define hal_diag_read_char_serial ai_diag_read_char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 // MN10300 Serial line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 #if defined(CYG_HAL_MN10300_STDEVAL1_SERIAL1) || defined(CYG_KERNEL_DIAG_SERIAL1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 // We use serial1 on MN103002
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 #define SERIAL1_CR ((volatile cyg_uint16 *)0x34000810)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 #define SERIAL1_ICR ((volatile cyg_uint8 *) 0x34000814)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 #define SERIAL1_TXR ((volatile cyg_uint8 *) 0x34000818)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 #define SERIAL1_RXR ((volatile cyg_uint8 *) 0x34000819)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 #define SERIAL1_SR ((volatile cyg_uint16 *)0x3400081c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 // Timer 1 provided baud rate divisor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 #define TIMER1_MD ((volatile cyg_uint8 *)0x34001001)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 #define TIMER1_BR ((volatile cyg_uint8 *)0x34001011)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 #define TIMER1_CR ((volatile cyg_uint8 *)0x34001021)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 #define PORT3_MD ((volatile cyg_uint8 *)0x36008025)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 // Mystery register
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 #define TMPSCNT ((volatile cyg_uint8 *)0x34001071)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 #define SIO1_LSTAT_TRDY 0x20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 #define SIO1_LSTAT_RRDY 0x10
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 void hal_diag_init_serial1(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 // 48 translates to 38400 baud.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 *TIMER1_BR = 48;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 // Timer1 sourced from IOCLK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 *TIMER1_MD = 0x80;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 // Mode on PORT3, used for serial line controls.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 *PORT3_MD = 0x01;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 // No interrupts for now.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 *SERIAL1_ICR = 0x00;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 // Source from timer 1, 8bit chars, enable tx and rx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 *SERIAL1_CR = 0xc084;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 void hal_diag_write_char_serial1(char c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 register volatile cyg_uint16 *volatile tty_status = SERIAL1_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 register volatile cyg_uint8 *volatile tty_tx = SERIAL1_TXR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 while( (*tty_status & SIO1_LSTAT_TRDY) != 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 *tty_tx = c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 void hal_diag_drain_serial1(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 register volatile cyg_uint16 *volatile tty_status = SERIAL1_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 while( (*tty_status & SIO1_LSTAT_TRDY) != 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 void hal_diag_read_char_serial1(char *c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 register volatile cyg_uint16 *volatile tty_status = SERIAL1_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 register volatile cyg_uint8 *volatile tty_rx = SERIAL1_RXR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 while( (*tty_status & SIO1_LSTAT_RRDY) == 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 *c = *tty_rx;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 #if defined(CYG_KERNEL_DIAG_SERIAL1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 #define hal_diag_init_serial hal_diag_init_serial1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 #define hal_diag_write_char_serial hal_diag_write_char_serial1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 #define hal_diag_drain_serial hal_diag_drain_serial1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 #define hal_diag_read_char_serial hal_diag_read_char_serial1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 #if defined(CYG_HAL_MN10300_STDEVAL1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 void led(int x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 *((cyg_uint8 *)0x36008004) = x<<4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 #if defined(CYG_HAL_MN10300_STDEVAL1_SERIAL2) || defined(CYG_KERNEL_DIAG_SERIAL2)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 // We use serial2 on MN103002
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 #define SERIAL2_CR ((volatile cyg_uint16 *)0x34000820)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 #define SERIAL2_ICR ((volatile cyg_uint8 *) 0x34000824)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 #define SERIAL2_TXR ((volatile cyg_uint8 *) 0x34000828)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 #define SERIAL2_RXR ((volatile cyg_uint8 *) 0x34000829)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 #define SERIAL2_SR ((volatile cyg_uint8 *)0x3400082c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 #define SERIAL2_TR ((volatile cyg_uint8 *)0x3400082d)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 // Timer 2 provided baud rate divisor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 #define TIMER2_MD ((volatile cyg_uint8 *)0x34001002)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 #define TIMER2_BR ((volatile cyg_uint8 *)0x34001012)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 #define TIMER2_CR ((volatile cyg_uint8 *)0x34001022)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 #define PORT3_MD ((volatile cyg_uint8 *)0x36008025)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 // Mystery register
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 #define TMPSCNT ((volatile cyg_uint8 *)0x34001071)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 #define SIO2_LSTAT_TRDY 0x20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 #define SIO2_LSTAT_RRDY 0x10
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 void hal_diag_init_serial2(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 #if !defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 // 16 and 22 translate to 38400 baud.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 *TIMER2_BR = 16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 *SERIAL2_TR = 22;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 // Timer2 sourced from IOCLK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 *TIMER2_MD = 0x80;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 // Mode on PORT3, used for serial line controls.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 *PORT3_MD = 0x01;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 // No interrupts for now.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 *SERIAL2_ICR = 0x00;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 // Source from timer 2, 8bit chars, enable tx and rx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 *SERIAL2_CR = 0xc081;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 void hal_diag_write_char_serial2(char c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 register volatile cyg_uint8 *volatile tty_status = SERIAL2_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 register volatile cyg_uint8 *volatile tty_tx = SERIAL2_TXR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 while( (*tty_status & SIO2_LSTAT_TRDY) != 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 *tty_tx = c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 void hal_diag_drain_serial2(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 register volatile cyg_uint8 *volatile tty_status = SERIAL2_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 while( (*tty_status & SIO2_LSTAT_TRDY) != 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 void hal_diag_read_char_serial2(char *c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 register volatile cyg_uint8 *volatile tty_status = SERIAL2_SR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 register volatile cyg_uint8 *volatile tty_rx = SERIAL2_RXR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 while( (*tty_status & SIO2_LSTAT_RRDY) == 0 ) continue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 *c = *tty_rx;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 #if defined(CYG_KERNEL_DIAG_SERIAL2)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 #define hal_diag_init_serial hal_diag_init_serial2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 #define hal_diag_write_char_serial hal_diag_write_char_serial2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 #define hal_diag_drain_serial hal_diag_drain_serial2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 #define hal_diag_read_char_serial hal_diag_read_char_serial2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 void hal_diag_init(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 hal_diag_init_serial();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 void hal_diag_write_char(char c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 #ifdef CYG_KERNEL_DIAG_GDB
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 static char line[100];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 static int pos = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 // No need to send CRs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 if( c == '\r' ) return;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 line[pos++] = c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 if( c == '\n' || pos == sizeof(line) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 CYG_INTERRUPT_STATE old;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 // Disable interrupts. This prevents GDB trying to interrupt us
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 // while we are in the middle of sending a packet. The serial
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 // receive interrupt will be seen when we re-enable interrupts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 // later.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 HAL_DISABLE_INTERRUPTS(old);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 while(1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 static char hex[] = "0123456789ABCDEF";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 cyg_uint8 csum = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 int i;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 hal_diag_write_char_serial('$');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 hal_diag_write_char_serial('O');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 csum += 'O';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 for( i = 0; i < pos; i++ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 char ch = line[i];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 char h = hex[(ch>>4)&0xF];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 char l = hex[ch&0xF];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 hal_diag_write_char_serial(h);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 hal_diag_write_char_serial(l);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 csum += h;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 csum += l;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 hal_diag_write_char_serial('#');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 hal_diag_write_char_serial(hex[(csum>>4)&0xF]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 hal_diag_write_char_serial(hex[csum&0xF]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447 #if 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 char c1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 hal_diag_read_char_serial( &c1 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 // We must ack the interrupt caused by that read to avoid
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 // confusing the GDB stub ROM.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 HAL_INTERRUPT_ACKNOWLEDGE( CYG_VECTOR_EXTERNAL_2 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 if( c1 == '+' ) break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 ai_writes("hal_diag_read_char_serial(");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 ai_write_char(c1);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 ai_writes(")\r\n");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 ai_writes("retry\r\n");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 #if defined(CYG_HAL_USE_ROM_MONITOR) && defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 if( c1 == 3 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 // Ctrl-C: breakpoint.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 // HAL_BREAKPOINT(_breakinst);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 typedef void bpt_fn();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470 bpt_fn *bfn = ((bpt_fn **)0x80000100)[61];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
471
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
472 bfn();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 pos = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 // Wait for tx buffer to drain
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487 hal_diag_drain_serial();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 // And re-enable interrupts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 HAL_RESTORE_INTERRUPTS(old);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 hal_diag_write_char_serial(c);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 void hal_diag_read_char(char *c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504 hal_diag_read_char_serial(c);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 /* End of hal_diag.c */