Mercurial > nand-ecoscentric
annotate packages/hal/arm/sa11x0/var/current/src/hal_diag.c @ 3403:8c8767bb9a62 default tip
devs/nand/micron_mt29: Remove defunct references (in comments) to mt29f2g08_oob_ecc.
| author | Ross Younger <wry@ecoscentric.com> |
|---|---|
| date | Sun, 18 Jan 2015 17:59:01 +1300 |
| parents | 74dbf4c3f2e1 |
| children |
| rev | line source |
|---|---|
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
1 /*============================================================================= |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
3 // hal_diag.c |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
5 // HAL diagnostic output code |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
7 //============================================================================= |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
8 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
9 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
12 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
13 // eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
14 // the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
15 // Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
16 // version. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
17 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
18 // eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
21 // for more details. |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
22 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
23 // You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
24 // along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
26 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
27 // As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
28 // macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
29 // and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
30 // this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
31 // the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
32 // must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
33 // General Public License v2. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
34 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
35 // This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
36 // on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
37 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
38 // ####ECOSGPLCOPYRIGHTEND#### |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
39 //============================================================================= |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
40 //#####DESCRIPTIONBEGIN#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
41 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
42 // Author(s): gthomas |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
43 // Contributors:nickg, gthomas, dmoseley |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
44 // Travis C. Furrer <furrer@mit.edu> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
45 // Date: 2000-05-08 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
46 // Purpose: HAL diagnostic output |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
47 // Description: Implementations of HAL diagnostic output support. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
48 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
49 //####DESCRIPTIONEND#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
50 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
51 //===========================================================================*/ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
52 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
53 #include <pkgconf/hal.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
54 #include <pkgconf/system.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
55 #include CYGBLD_HAL_PLATFORM_H |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
56 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
57 #include <cyg/infra/cyg_type.h> // base types |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
58 #include <cyg/infra/cyg_trac.h> // tracing macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
59 #include <cyg/infra/cyg_ass.h> // assertion macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
60 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
61 #include <cyg/hal/hal_arch.h> // basic machine info |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
62 #include <cyg/hal/hal_intr.h> // interrupt macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
63 #include <cyg/hal/hal_io.h> // IO macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
64 #include <cyg/hal/hal_if.h> // Calling interface definitions |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
65 #include <cyg/hal/hal_diag.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
66 #include <cyg/hal/drv_api.h> // cyg_drv_interrupt_acknowledge |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
67 #include <cyg/hal/hal_misc.h> // Helper functions |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
68 #include <cyg/hal/hal_sa11x0.h> // Hardware definitions |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
69 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
70 struct sa11x0_serial { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
71 volatile cyg_uint32 utcr0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
72 volatile cyg_uint32 utcr1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
73 volatile cyg_uint32 utcr2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
74 volatile cyg_uint32 utcr3; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
75 volatile cyg_uint32 pad0010; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
76 volatile cyg_uint32 utdr; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
77 volatile cyg_uint32 pad0018; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
78 volatile cyg_uint32 utsr0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
79 volatile cyg_uint32 utsr1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
80 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
81 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
82 //----------------------------------------------------------------------------- |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
83 typedef struct { |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
84 volatile struct sa11x0_serial* base; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
85 cyg_int32 msec_timeout; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
86 int isr_vector; |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
87 int baud_rate; |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
88 } channel_data_t; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
89 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
90 /*---------------------------------------------------------------------------*/ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
91 // SA11x0 Serial Port (UARTx) for Debug |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
92 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
93 static void |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
94 init_channel(channel_data_t* __ch_data) |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
95 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
96 volatile struct sa11x0_serial* base = __ch_data->base; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
97 cyg_uint32 brd; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
98 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
99 // Disable Receiver and Transmitter (clears FIFOs) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
100 base->utcr3 = SA11X0_UART_RX_DISABLED | SA11X0_UART_TX_DISABLED; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
101 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
102 // Clear sticky (writable) status bits. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
103 base->utsr0 = SA11X0_UART_RX_IDLE | SA11X0_UART_RX_BEGIN_OF_BREAK | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
104 SA11X0_UART_RX_END_OF_BREAK; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
105 |
|
143
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
138
diff
changeset
|
106 #if defined(CYGPKG_HAL_ARM_SA11X0_SA1100MM) || defined(CYGPKG_HAL_ARM_SA11X0_BRUTUS) |
|
6b5f480c6929
Merge from eCos master repository on 2000-12-08-02:09:36-GMT
jlarmour
parents:
138
diff
changeset
|
107 // This setup is specific to only a few boards. |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
132
diff
changeset
|
108 if (SA11X0_UART1_BASE == (volatile unsigned long *)base) { |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
109 cyg_uint32 pdr, afr, par; |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
110 |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
111 HAL_READ_UINT32(SA11X0_GPIO_PIN_DIRECTION, pdr); |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
112 HAL_READ_UINT32(SA11X0_GPIO_ALTERNATE_FUNCTION, afr); |
|
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
113 HAL_READ_UINT32(SA11X0_PPC_PIN_ASSIGNMENT, par); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
114 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
115 //Set pin 14 as an output (Tx) and pin 15 as in input (Rx). |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
116 HAL_WRITE_UINT32(SA11X0_GPIO_PIN_DIRECTION, ((pdr | SA11X0_GPIO_PIN_14) & ~SA11X0_GPIO_PIN_15)); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
117 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
118 // Use GPIO 14 & 15 pins for serial port 1. |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
119 HAL_WRITE_UINT32(SA11X0_GPIO_ALTERNATE_FUNCTION, afr | SA11X0_GPIO_PIN_14 | SA11X0_GPIO_PIN_15); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
120 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
121 // Pin reassignment for serial port 1. |
|
132
0ae0bc38e387
Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents:
110
diff
changeset
|
122 HAL_WRITE_UINT32(SA11X0_PPC_PIN_ASSIGNMENT, par | SA11X0_PPC_UART_PIN_REASSIGNMENT_MASK); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
123 } |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
132
diff
changeset
|
124 #endif |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
125 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
126 // Set UART to 8N1 (8 data bits, no partity, 1 stop bit) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
127 base->utcr0 = SA11X0_UART_PARITY_DISABLED | SA11X0_UART_STOP_BITS_1 | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
128 SA11X0_UART_DATA_BITS_8; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
129 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
130 // Set the desired baud rate. |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
131 brd = SA11X0_UART_BAUD_RATE_DIVISOR(__ch_data->baud_rate); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
132 base->utcr1 = (brd >> 8) & SA11X0_UART_H_BAUD_RATE_DIVISOR_MASK; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
133 base->utcr2 = brd & SA11X0_UART_L_BAUD_RATE_DIVISOR_MASK; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
134 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
135 // Enable the receiver and the transmitter. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
136 base->utcr3 = SA11X0_UART_RX_ENABLED | SA11X0_UART_TX_ENABLED; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
137 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
138 // All done |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
139 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
140 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
141 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
142 cyg_hal_plf_serial_putc(void *__ch_data, char c) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
143 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
144 volatile struct sa11x0_serial* base = ((channel_data_t*)__ch_data)->base; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
145 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
146 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
147 // Wait for Tx FIFO not full |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
148 while ((base->utsr1 & SA11X0_UART_TX_FIFO_NOT_FULL) == 0) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
149 ; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
150 base->utdr = c; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
151 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
152 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
153 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
154 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
155 // FIXME: shouldn't we check for PARITY_ERROR, FRAMING_ERROR, or |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
156 // RECEIVE_FIFO_OVERRUN_ERROR in the received data? This |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
157 // means check the appropriate bits in UTSR1. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
158 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
159 static cyg_bool |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
160 cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
161 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
162 volatile struct sa11x0_serial* base = ((channel_data_t*)__ch_data)->base; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
163 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
164 // If receive fifo is empty, return false |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
165 if ((base->utsr1 & SA11X0_UART_RX_FIFO_NOT_EMPTY) == 0) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
166 return false; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
167 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
168 *ch = (char)base->utdr; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
169 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
170 // Clear receiver idle status bit, to allow another interrupt to |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
171 // occur in the case where the receive fifo is almost empty. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
172 base->utsr0 = SA11X0_UART_RX_IDLE; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
173 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
174 return true; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
175 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
176 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
177 cyg_uint8 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
178 cyg_hal_plf_serial_getc(void* __ch_data) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
179 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
180 cyg_uint8 ch; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
181 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
182 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
183 while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
184 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
185 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
186 return ch; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
187 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
188 |
|
154
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
189 static channel_data_t ser_channels[] = { |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
190 #if CYGHWR_HAL_ARM_SA11X0_UART1 != 0 |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
191 { (volatile struct sa11x0_serial*)SA11X0_UART1_BASE, 1000, |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
192 CYGNUM_HAL_INTERRUPT_UART1, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, |
|
154
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
193 #endif |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
194 #if CYGHWR_HAL_ARM_SA11X0_UART3 != 0 |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
195 { (volatile struct sa11x0_serial*)SA11X0_UART3_BASE, 1000, |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
196 CYGNUM_HAL_INTERRUPT_UART3, CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, |
|
154
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
197 #endif |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
198 }; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
199 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
200 static void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
201 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
202 cyg_uint32 __len) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
203 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
204 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
205 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
206 while(__len-- > 0) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
207 cyg_hal_plf_serial_putc(__ch_data, *__buf++); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
208 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
209 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
210 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
211 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
212 static void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
213 cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
214 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
215 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
216 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
217 while(__len-- > 0) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
218 *__buf++ = cyg_hal_plf_serial_getc(__ch_data); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
219 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
220 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
221 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
222 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
223 cyg_bool |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
224 cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
225 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
226 int delay_count; |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
227 channel_data_t* chan = (channel_data_t*)__ch_data; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
228 cyg_bool res; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
229 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
230 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
231 delay_count = chan->msec_timeout * 10; // delay in .1 ms steps |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
232 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
233 for(;;) { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
234 res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
235 if (res || 0 == delay_count--) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
236 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
237 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
238 CYGACC_CALL_IF_DELAY_US(100); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
239 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
240 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
241 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
242 return res; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
243 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
244 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
245 static int |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
246 cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
247 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
248 static int irq_state = 0; |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
249 channel_data_t* chan = (channel_data_t*)__ch_data; |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
250 int ret = -1; |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
251 va_list ap; |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
252 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
253 CYGARC_HAL_SAVE_GP(); |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
254 va_start(ap, __func); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
255 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
256 switch (__func) { |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
257 case __COMMCTL_GETBAUD: |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
258 ret = chan->baud_rate; |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
259 break; |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
260 case __COMMCTL_SETBAUD: |
|
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
261 chan->baud_rate = va_arg(ap, cyg_int32); |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
262 // Should we verify this value here? |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
263 init_channel(chan); |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
191
diff
changeset
|
264 ret = 0; |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
265 break; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
266 case __COMMCTL_IRQ_ENABLE: |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
267 irq_state = 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
268 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
269 chan->base->utcr3 |= SA11X0_UART_RX_FIFO_INT_ENABLED; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
270 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
271 HAL_INTERRUPT_UNMASK(chan->isr_vector); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
272 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
273 case __COMMCTL_IRQ_DISABLE: |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
274 ret = irq_state; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
275 irq_state = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
276 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
277 chan->base->utcr3 &= ~SA11X0_UART_RX_FIFO_INT_ENABLED; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
278 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
279 HAL_INTERRUPT_MASK(chan->isr_vector); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
280 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
281 case __COMMCTL_DBG_ISR_VECTOR: |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
282 ret = chan->isr_vector; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
283 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
284 case __COMMCTL_SET_TIMEOUT: |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
285 ret = chan->msec_timeout; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
286 chan->msec_timeout = va_arg(ap, cyg_uint32); |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
287 break; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
288 default: |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
289 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
290 } |
|
159
511f4dc167f6
Merge from eCos master repository on 2001-05-18-01:30:05-BST
jlarmour
parents:
154
diff
changeset
|
291 va_end(ap); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
292 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
293 return ret; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
294 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
295 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
296 static int |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
297 cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
298 CYG_ADDRWORD __vector, CYG_ADDRWORD __data) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
299 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
300 int res = 0; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
301 channel_data_t* chan = (channel_data_t*)__ch_data; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
302 char c; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
303 int reg; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
304 CYGARC_HAL_SAVE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
305 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
306 reg = chan->base->utsr1; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
307 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
308 // read it anyway just in case - no harm done and we might prevent an |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
309 // interrupt loop |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
310 c = (char)chan->base->utdr; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
311 |
|
191
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
312 // Clear receiver idle status bit, to allow another interrupt to |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
313 // occur in the case where the receive fifo is almost empty. |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
314 // Also for a break interrupt; these are sticky and nonmaskable. |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
315 chan->base->utsr0 = (SA11X0_UART_RX_IDLE | |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
316 SA11X0_UART_RX_BEGIN_OF_BREAK | |
|
678094f34118
Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents:
159
diff
changeset
|
317 SA11X0_UART_RX_END_OF_BREAK ); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
318 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
319 cyg_drv_interrupt_acknowledge(chan->isr_vector); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
320 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
321 *__ctrlc = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
322 if ( (reg & SA11X0_UART_RX_FIFO_NOT_EMPTY) != 0 ) { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
323 if( cyg_hal_is_break( &c , 1 ) ) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
324 *__ctrlc = 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
325 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
326 res = CYG_ISR_HANDLED; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
327 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
328 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
329 CYGARC_HAL_RESTORE_GP(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
330 return res; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
331 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
332 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
333 static void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
334 cyg_hal_plf_serial_init(void) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
335 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
336 hal_virtual_comm_table_t* comm; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
337 int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); |
|
154
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
338 int i; |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
339 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
340 // Init channels |
|
154
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
341 #define NUMOF(x) (sizeof(x)/sizeof(x[0])) |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
342 for (i = 0; i < NUMOF(ser_channels); i++) { |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
343 init_channel(&ser_channels[i]); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
344 CYGACC_CALL_IF_SET_CONSOLE_COMM(i); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
345 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
346 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ser_channels[i]); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
347 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
348 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
349 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
350 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
351 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
352 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
353 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); |
|
e2d866e32dac
Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents:
151
diff
changeset
|
354 } |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
355 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
356 // Restore original console |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
357 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
358 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
359 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
360 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
361 cyg_hal_plf_comms_init(void) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
362 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
363 static int initialized = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
364 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
365 if (initialized) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
366 return; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
367 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
368 initialized = 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
369 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
370 cyg_hal_plf_serial_init(); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
371 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
372 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
373 //============================================================================= |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
374 // Compatibility with older stubs |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
375 //============================================================================= |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
376 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
377 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
378 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
379 #include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
380 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
381 #if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL == 0) |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
382 # define __BASE ((void*)SA11X0_UART1_BASE) |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
383 # define CYGHWR_HAL_GDB_PORT_VECTOR CYGNUM_HAL_INTERRUPT_UART1 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
384 #else |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
385 # define __BASE ((void*)SA11X0_UART3_BASE) |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
386 # define CYGHWR_HAL_GDB_PORT_VECTOR CYGNUM_HAL_INTERRUPT_UART3 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
387 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
388 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
389 #ifdef CYGSEM_HAL_ROM_MONITOR |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
390 #define CYG_HAL_STARTUP_ROM |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
391 #undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
392 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
393 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
394 #if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
395 #define HAL_DIAG_USES_HARDWARE |
|
151
25e238959bae
Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
143
diff
changeset
|
396 #elif !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN) |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
397 #define HAL_DIAG_USES_HARDWARE |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
398 #elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
399 #define HAL_DIAG_USES_HARDWARE |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
400 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
401 |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
402 static channel_data_t ser_channel = { |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
403 (volatile struct sa11x0_serial*)__BASE, 0, CYGHWR_HAL_GDB_PORT_VECTOR |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
404 }; |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
405 |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
406 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
407 hal_diag_init(void) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
408 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
409 // Init serial device |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
410 init_channel(&ser_channel); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
411 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
412 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
413 #ifdef HAL_DIAG_USES_HARDWARE |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
414 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
415 #ifdef DEBUG_DIAG |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
416 #ifndef CYG_HAL_STARTUP_ROM |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
417 #define DIAG_BUFSIZE 2048 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
418 static char diag_buffer[DIAG_BUFSIZE]; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
419 static int diag_bp = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
420 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
421 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
422 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
423 void hal_diag_read_char(char *c) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
424 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
425 *c = cyg_hal_plf_serial_getc(&ser_channel); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
426 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
427 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
428 void hal_diag_write_char(char c) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
429 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
430 #ifdef DEBUG_DIAG |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
431 #ifndef CYG_HAL_STARTUP_ROM |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
432 diag_buffer[diag_bp++] = c; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
433 if (diag_bp == sizeof(diag_buffer)) diag_bp = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
434 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
435 #endif |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
436 cyg_hal_plf_serial_putc(&ser_channel, c); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
437 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
438 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
439 #else // not HAL_DIAG_USES_HARDWARE - it uses GDB protocol |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
440 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
441 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
442 hal_diag_read_char(char *c) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
443 { |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
444 *c = cyg_hal_plf_serial_getc(&ser_channel); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
445 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
446 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
447 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
448 hal_diag_write_char(char c) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
449 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
450 static char line[100]; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
451 static int pos = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
452 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
453 // FIXME: Some LED blinking might be nice right here. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
454 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
455 // No need to send CRs |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
456 if( c == '\r' ) return; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
457 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
458 line[pos++] = c; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
459 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
460 if( c == '\n' || pos == sizeof(line) ) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
461 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
462 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
463 CYG_INTERRUPT_STATE old; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
464 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
465 // Disable interrupts. This prevents GDB trying to interrupt us |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
466 // while we are in the middle of sending a packet. The serial |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
467 // receive interrupt will be seen when we re-enable interrupts |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
468 // later. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
469 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
470 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
471 CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
472 #else |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
473 HAL_DISABLE_INTERRUPTS(old); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
474 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
475 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
476 while(1) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
477 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
478 static char hex[] = "0123456789ABCDEF"; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
479 cyg_uint8 csum = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
480 int i; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
481 #ifndef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
482 char c1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
483 #endif |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
484 cyg_hal_plf_serial_putc(&ser_channel, '$'); |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
485 cyg_hal_plf_serial_putc(&ser_channel, 'O'); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
486 csum += 'O'; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
487 for( i = 0; i < pos; i++ ) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
488 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
489 char ch = line[i]; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
490 char h = hex[(ch>>4)&0xF]; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
491 char l = hex[ch&0xF]; |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
492 cyg_hal_plf_serial_putc(&ser_channel, h); |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
493 cyg_hal_plf_serial_putc(&ser_channel, l); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
494 csum += h; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
495 csum += l; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
496 } |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
497 cyg_hal_plf_serial_putc(&ser_channel, '#'); |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
498 cyg_hal_plf_serial_putc(&ser_channel, hex[(csum>>4)&0xF]); |
|
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
499 cyg_hal_plf_serial_putc(&ser_channel, hex[csum&0xF]); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
500 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
501 #ifdef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
502 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
503 break; // regardless |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
504 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
505 #else // not CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT Ie. usually... |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
506 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
507 // Wait for the ACK character '+' from GDB here and handle |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
508 // receiving a ^C instead. This is the reason for this clause |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
509 // being a loop. |
|
110
84e4bde58b26
Merge from eCos master repository on 2000-07-14-22:00:02-BST
jlarmour
parents:
108
diff
changeset
|
510 c1 = cyg_hal_plf_serial_getc(&ser_channel); |
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
511 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
512 if( c1 == '+' ) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
513 break; // a good acknowledge |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
514 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
515 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
516 cyg_drv_interrupt_acknowledge(CYGHWR_HAL_GDB_PORT_VECTOR); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
517 if( c1 == 3 ) { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
518 // Ctrl-C: breakpoint. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
519 cyg_hal_gdb_interrupt( |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
520 (target_register_t)__builtin_return_address(0) ); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
521 break; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
522 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
523 #endif // CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
524 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
525 #endif // ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
526 // otherwise, loop round again |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
527 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
528 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
529 pos = 0; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
530 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
531 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
532 // And re-enable interrupts |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
533 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
534 CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
535 #else |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
536 HAL_RESTORE_INTERRUPTS(old); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
537 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
538 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
539 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
540 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
541 #endif |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
542 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
543 #endif // !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
544 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
545 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
546 /*---------------------------------------------------------------------------*/ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
547 /* End of hal_diag.c */ |
