1 |
30 |
unneback |
#
|
2 |
|
|
# $Id: README,v 1.2 2001-09-27 12:00:07 chris Exp $
|
3 |
|
|
#
|
4 |
|
|
|
5 |
|
|
#
|
6 |
|
|
# This package requires a version of GCC that supports the `-mcpu32' option.
|
7 |
|
|
#
|
8 |
|
|
|
9 |
|
|
#
|
10 |
|
|
# Please send any comments, improvements, or bug reports to:
|
11 |
|
|
# W. Eric Norum
|
12 |
|
|
# Saskatchewan Accelerator Laboratory
|
13 |
|
|
# 107 North Road
|
14 |
|
|
# University of Saskatchewan
|
15 |
|
|
# Saskatoon, Saskatchewan, CANADA
|
16 |
|
|
# S7N 5C6
|
17 |
|
|
# eric@skatter.usask.ca
|
18 |
|
|
#
|
19 |
|
|
|
20 |
|
|
#
|
21 |
|
|
# This board support package works with several different versions of
|
22 |
|
|
# MC68360 systems. See the conditional-compile tests in startup/init68360.c
|
23 |
|
|
# for examples.
|
24 |
|
|
#
|
25 |
|
|
# Decisions made at compile time include:
|
26 |
|
|
# - If the CPU is a member of the 68040 family, the BSP is
|
27 |
|
|
# compiled for a generic 68040/68360 system as described
|
28 |
|
|
# in Chapter 9 of the MC68360 User's Manual. This version
|
29 |
|
|
# can be used with the Arnewsh SBC360 card.
|
30 |
|
|
# - If the preprocessor symbol M68360_ATLAS_HSB is defined,
|
31 |
|
|
# the BSP is compiled for an Atlas HSB card.
|
32 |
|
|
# - Otherwise, the BSP is compiled for a generic 68360 system
|
33 |
|
|
# as described in Chapter 9 of the MC68360 User's Manual. This
|
34 |
|
|
# version works with the Atlas ACE360 card.
|
35 |
|
|
#
|
36 |
|
|
# Decisions to be made a link-edit time are:
|
37 |
|
|
# - The size of the memory allocator heap. The default value is
|
38 |
|
|
# 64 kbytes. If the network package is used the heap
|
39 |
|
|
# should be at least 256 kbytes. If your network is large, or
|
40 |
|
|
# busy, the heap should be even larger.
|
41 |
|
|
# To choose a heap size of 256 kbytes,
|
42 |
|
|
# CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x40000
|
43 |
|
|
|
44 |
|
|
BSP NAME: gen68360 or gen68360_040
|
45 |
|
|
BOARD: Generic 68360 as described in Motorola MC68360 User's Manual
|
46 |
|
|
BOARD: Atlas Computer Equipment Inc. High Speed Bridge (HSB)
|
47 |
|
|
BOARD: Atlas Computer Equipment Inc. Advanced Communication Engine (ACE)
|
48 |
|
|
BOARD: Arnewsh SBC360 68040/68360 card
|
49 |
|
|
BUS: none
|
50 |
|
|
CPU FAMILY: Motorola CPU32+, Motorola 68040
|
51 |
|
|
COPROCESSORS: none
|
52 |
|
|
MODE: not applicable
|
53 |
|
|
|
54 |
|
|
DEBUG MONITOR: none (Hardware provides BDM)
|
55 |
|
|
|
56 |
|
|
PERIPHERALS
|
57 |
|
|
===========
|
58 |
|
|
TIMERS: PIT, Watchdog, 4 general purpose, 16 RISC
|
59 |
|
|
RESOLUTION: one microsecond
|
60 |
|
|
SERIAL PORTS: 4 SCC, 2 SMC, 1 SPI
|
61 |
|
|
REAL-TIME CLOCK:
|
62 |
|
|
DMA: Each serial port, 2 general purpose
|
63 |
|
|
VIDEO: none
|
64 |
|
|
SCSI: none
|
65 |
|
|
NETWORKING: Ethernet on SCC1.
|
66 |
|
|
|
67 |
|
|
DRIVER INFORMATION
|
68 |
|
|
==================
|
69 |
|
|
CLOCK DRIVER: Programmable Interval Timer
|
70 |
|
|
IOSUPP DRIVER: Serial Management Controller 1
|
71 |
|
|
SHMSUPP: none
|
72 |
|
|
TIMER DRIVER: Timer 1
|
73 |
|
|
|
74 |
|
|
STDIO
|
75 |
|
|
=====
|
76 |
|
|
PORT: SMC1
|
77 |
|
|
ELECTRICAL: EIA-232 (if board supplies level shifter)
|
78 |
|
|
BAUD: 9600
|
79 |
|
|
BITS PER CHARACTER: 8
|
80 |
|
|
PARITY: None
|
81 |
|
|
STOP BITS: 1
|
82 |
|
|
|
83 |
|
|
NOTES
|
84 |
|
|
=====
|
85 |
|
|
|
86 |
|
|
Board description
|
87 |
|
|
-----------------
|
88 |
|
|
clock rate: 25 MHz
|
89 |
|
|
bus width: 8-bit PROM, 32-bit DRAM
|
90 |
|
|
ROM: To 1 MByte, 180 nsec (3 wait states), chip select 0
|
91 |
|
|
RAM: 4 or 16 MBytes of 60 nsec parity DRAM (1Mx36) to RAS1*/CAS1*
|
92 |
|
|
|
93 |
|
|
Host System
|
94 |
|
|
-----------
|
95 |
|
|
OPENSTEP 4.2 (Intel and Motorola), Solaris 2.5, Linux 2.0.29
|
96 |
|
|
|
97 |
|
|
Verification (Standalone 68360)
|
98 |
|
|
-------------------------------
|
99 |
|
|
Single processor tests: Passed
|
100 |
|
|
Multi-processort tests: not applicable
|
101 |
|
|
Timing tests:
|
102 |
|
|
Context Switch
|
103 |
|
|
|
104 |
|
|
context switch: self 10
|
105 |
|
|
context switch: to another task 11
|
106 |
|
|
context switch: no floating point contexts 38
|
107 |
|
|
fp context switch: restore 1st FP task 39
|
108 |
|
|
fp context switch: save initialized, restore initialized 14
|
109 |
|
|
fp context switch: save idle, restore initialized 15
|
110 |
|
|
fp context switch: save idle, restore idle 41
|
111 |
|
|
|
112 |
|
|
Task Manager
|
113 |
|
|
|
114 |
|
|
rtems_task_create 202
|
115 |
|
|
rtems_task_ident 390
|
116 |
|
|
rtems_task_start 71
|
117 |
|
|
rtems_task_restart: calling task 99
|
118 |
|
|
rtems_task_restart: suspended task -- returns to caller 86
|
119 |
|
|
rtems_task_restart: blocked task -- returns to caller 116
|
120 |
|
|
rtems_task_restart: ready task -- returns to caller 88
|
121 |
|
|
rtems_task_restart: suspended task -- preempts caller 132
|
122 |
|
|
rtems_task_restart: blocked task -- preempts caller 153
|
123 |
|
|
rtems_task_restart: ready task -- preempts caller 149
|
124 |
|
|
rtems_task_delete: calling task 236
|
125 |
|
|
rtems_task_delete: suspended task 191
|
126 |
|
|
rtems_task_delete: blocked task 195
|
127 |
|
|
rtems_task_delete: ready task 198
|
128 |
|
|
rtems_task_suspend: calling task 78
|
129 |
|
|
rtems_task_suspend: returns to caller 36
|
130 |
|
|
rtems_task_resume: task readied -- returns to caller 39
|
131 |
|
|
rtems_task_resume: task readied -- preempts caller 67
|
132 |
|
|
rtems_task_set_priority: obtain current priority 26
|
133 |
|
|
rtems_task_set_priority: returns to caller 59
|
134 |
|
|
rtems_task_set_priority: preempts caller 110
|
135 |
|
|
rtems_task_mode: obtain current mode 13
|
136 |
|
|
rtems_task_mode: no reschedule 15
|
137 |
|
|
rtems_task_mode: reschedule -- returns to caller 20
|
138 |
|
|
rtems_task_mode: reschedule -- preempts caller 67
|
139 |
|
|
rtems_task_get_note 28
|
140 |
|
|
rtems_task_set_note 27
|
141 |
|
|
rtems_task_wake_after: yield -- returns to caller 16
|
142 |
|
|
rtems_task_wake_after: yields -- preempts caller 65
|
143 |
|
|
rtems_task_wake_when 116
|
144 |
|
|
|
145 |
|
|
Interrupt Manager
|
146 |
|
|
|
147 |
|
|
interrupt entry overhead: returns to nested interrupt 10
|
148 |
|
|
interrupt entry overhead: returns to interrupted task 10
|
149 |
|
|
interrupt entry overhead: returns to preempting task 10
|
150 |
|
|
interrupt exit overhead: returns to nested interrupt 8
|
151 |
|
|
interrupt exit overhead: returns to interrupted task 10
|
152 |
|
|
interrupt exit overhead: returns to preempting task 59
|
153 |
|
|
|
154 |
|
|
Clock Manager
|
155 |
|
|
|
156 |
|
|
rtems_clock_set 73
|
157 |
|
|
rtems_clock_get 1
|
158 |
|
|
rtems_clock_tick 16
|
159 |
|
|
|
160 |
|
|
Timer Manager
|
161 |
|
|
|
162 |
|
|
rtems_timer_create 31
|
163 |
|
|
rtems_timer_ident 380
|
164 |
|
|
rtems_timer_delete: inactive 43
|
165 |
|
|
rtems_timer_delete: active 46
|
166 |
|
|
rtems_timer_fire_after: inactive 53
|
167 |
|
|
rtems_timer_fire_after: active 56
|
168 |
|
|
rtems_timer_fire_when: inactive 72
|
169 |
|
|
rtems_timer_fire_when: active 72
|
170 |
|
|
rtems_timer_reset: inactive 47
|
171 |
|
|
rtems_timer_reset: active 51
|
172 |
|
|
rtems_timer_cancel: inactive 25
|
173 |
|
|
rtems_timer_cancel: active 28
|
174 |
|
|
|
175 |
|
|
Semaphore Manager
|
176 |
|
|
|
177 |
|
|
rtems_semaphore_create 59
|
178 |
|
|
rtems_semaphore_ident 438
|
179 |
|
|
rtems_semaphore_delete 57
|
180 |
|
|
rtems_semaphore_obtain: available 31
|
181 |
|
|
rtems_semaphore_obtain: not available -- NO_WAIT 31
|
182 |
|
|
rtems_semaphore_obtain: not available -- caller blocks 108
|
183 |
|
|
rtems_semaphore_release: no waiting tasks 40
|
184 |
|
|
rtems_semaphore_release: task readied -- returns to caller 56
|
185 |
|
|
rtems_semaphore_release: task readied -- preempts caller 83
|
186 |
|
|
|
187 |
|
|
Message Queue Manager
|
188 |
|
|
|
189 |
|
|
rtems_message_queue_create 241
|
190 |
|
|
rtems_message_queue_ident 379
|
191 |
|
|
rtems_message_queue_delete 75
|
192 |
|
|
rtems_message_queue_send: no waiting tasks 72
|
193 |
|
|
rtems_message_queue_send: task readied -- returns to caller 72
|
194 |
|
|
rtems_message_queue_send: task readied -- preempts caller 99
|
195 |
|
|
rtems_message_queue_urgent: no waiting tasks 72
|
196 |
|
|
rtems_message_queue_urgent: task readied -- returns to caller 72
|
197 |
|
|
rtems_message_queue_urgent: task readied -- preempts caller 99
|
198 |
|
|
rtems_message_queue_broadcast: no waiting tasks 43
|
199 |
|
|
rtems_message_queue_broadcast: task readied -- returns to caller 82
|
200 |
|
|
rtems_message_queue_broadcast: task readied -- preempts caller 109
|
201 |
|
|
rtems_message_queue_receive: available 52
|
202 |
|
|
rtems_message_queue_receive: not available -- NO_WAIT 34
|
203 |
|
|
rtems_message_queue_receive: not available -- caller blocks 111
|
204 |
|
|
rtems_message_queue_flush: no messages flushed 25
|
205 |
|
|
rtems_message_queue_flush: messages flushed 34
|
206 |
|
|
|
207 |
|
|
Event Manager
|
208 |
|
|
|
209 |
|
|
rtems_event_send: no task readied 22
|
210 |
|
|
rtems_event_send: task readied -- returns to caller 50
|
211 |
|
|
rtems_event_send: task readied -- preempts caller 80
|
212 |
|
|
rtems_event_receive: obtain current events -1
|
213 |
|
|
rtems_event_receive: available 26
|
214 |
|
|
rtems_event_receive: not available -- NO_WAIT 22
|
215 |
|
|
rtems_event_receive: not available -- caller blocks 89
|
216 |
|
|
|
217 |
|
|
Signal Manager
|
218 |
|
|
|
219 |
|
|
rtems_signal_catch 16
|
220 |
|
|
rtems_signal_send: returns to caller 32
|
221 |
|
|
rtems_signal_send: signal to self 51
|
222 |
|
|
exit ASR overhead: returns to calling task 42
|
223 |
|
|
exit ASR overhead: returns to preempting task 58
|
224 |
|
|
|
225 |
|
|
Partition Manager
|
226 |
|
|
|
227 |
|
|
rtems_partition_create 74
|
228 |
|
|
rtems_partition_ident 379
|
229 |
|
|
rtems_partition_delete 40
|
230 |
|
|
rtems_partition_get_buffer: available 29
|
231 |
|
|
rtems_partition_get_buffer: not available 27
|
232 |
|
|
rtems_partition_return_buffer 34
|
233 |
|
|
|
234 |
|
|
Region Manager
|
235 |
|
|
|
236 |
|
|
rtems_region_create 63
|
237 |
|
|
rtems_region_ident 388
|
238 |
|
|
rtems_region_delete 40
|
239 |
|
|
rtems_region_get_segment: available 43
|
240 |
|
|
rtems_region_get_segment: not available -- NO_WAIT 40
|
241 |
|
|
rtems_region_get_segment: not available -- caller blocks 120
|
242 |
|
|
rtems_region_return_segment: no waiting tasks 48
|
243 |
|
|
rtems_region_return_segment: task readied -- returns to caller 98
|
244 |
|
|
rtems_region_return_segment: task readied -- preempts caller 125
|
245 |
|
|
|
246 |
|
|
Dual-Ported Memory Manager
|
247 |
|
|
|
248 |
|
|
rtems_port_create 38
|
249 |
|
|
rtems_port_ident 380
|
250 |
|
|
rtems_port_delete 40
|
251 |
|
|
rtems_port_internal_to_external 22
|
252 |
|
|
rtems_port_external_to_internal 22
|
253 |
|
|
|
254 |
|
|
IO Manager
|
255 |
|
|
|
256 |
|
|
rtems_io_initialize 4
|
257 |
|
|
rtems_io_open 1
|
258 |
|
|
rtems_io_close 1
|
259 |
|
|
rtems_io_read 1
|
260 |
|
|
rtems_io_write 1
|
261 |
|
|
rtems_io_control 1
|
262 |
|
|
|
263 |
|
|
Rate Monotonic Manager
|
264 |
|
|
|
265 |
|
|
rtems_rate_monotonic_create 36
|
266 |
|
|
rtems_rate_monotonic_ident 380
|
267 |
|
|
rtems_rate_monotonic_cancel 34
|
268 |
|
|
rtems_rate_monotonic_delete: active 51
|
269 |
|
|
rtems_rate_monotonic_delete: inactive 47
|
270 |
|
|
rtems_rate_monotonic_period: obtain status 27
|
271 |
|
|
rtems_rate_monotonic_period: initiate period -- returns to caller 50
|
272 |
|
|
rtems_rate_monotonic_period: conclude periods -- caller blocks 72
|
273 |
|
|
|
274 |
|
|
Network tests:
|
275 |
|
|
TCP throughput (as measured by ttcp):
|
276 |
|
|
Receive: 1081 kbytes/sec
|
277 |
|
|
Transmit: 953 kbytes/sec
|
278 |
|
|
|
279 |
|
|
Porting
|
280 |
|
|
-------
|
281 |
|
|
This board support package is written for a 68360 system similar to that
|
282 |
|
|
described in chapter 9 of the Motorola MC68360 Quad Integrated Communication
|
283 |
|
|
Processor Users' Manual. The salient features of this hardware are:
|
284 |
|
|
|
285 |
|
|
25 MHz external clock
|
286 |
|
|
DRAM address multiplexing provided by 68360
|
287 |
|
|
8-bit 180nsec PROM to CS0*
|
288 |
|
|
4 MBytes of 60 nsec parity DRAM (1Mx36) to RAS1*/CAS1*
|
289 |
|
|
Console serial port on SMC1
|
290 |
|
|
Ethernet interface on SCC1
|
291 |
|
|
|
292 |
|
|
The board support package has been tested with:
|
293 |
|
|
A home-built 68360 board
|
294 |
|
|
An ACE360A and an HSB board produced by:
|
295 |
|
|
Atlas Computer Equipment
|
296 |
|
|
703 Colina Lane
|
297 |
|
|
Santa Barbara, CA 93103
|
298 |
|
|
A 68040/68360 board (SBC360) produced by:
|
299 |
|
|
Arnewsh Inc.
|
300 |
|
|
P.O. Box 270352
|
301 |
|
|
Fort Collins, CO 80527-0352
|
302 |
|
|
|
303 |
|
|
Interrupt Notes
|
304 |
|
|
===============
|
305 |
|
|
ckinit.c:
|
306 |
|
|
Occasional network lockups have been noted when the PIT has a higher
|
307 |
|
|
interrupt request level than the CPM. The SCC1 bit in the CISR is set
|
308 |
|
|
even though the SCC1 interrupt handler is not active. This blocks
|
309 |
|
|
interrupts from SCC1 (and all other CPM sources) and locks up the
|
310 |
|
|
system. It has not been determined whether the error is within the
|
311 |
|
|
68360 or in the RTEMS interrupt support assembler code. The solution,
|
312 |
|
|
for now, is to set both PIT and CPM interrupt request levels to the same
|
313 |
|
|
value (4).
|
314 |
|
|
|
315 |
|
|
|