annotate packages/hal/arm/aeb/current/src/plf_stub.c @ 36:e97d78785e2d ecos-sw-1999-09-12

Merge from eCos master repository on 1999-09-12-15:40:34-BST
author jlarmour
date Sun, 12 Sep 1999 15:26:05 +0000
parents 443894e2e912
children c38311975d4f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // plf_stub.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Platform specific code for GDB stub support.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
15 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
19 // the License.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
20 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
23 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
25 // by Cygnus are Copyright (C) 1998, 1999 Cygnus Solutions.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
27 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
28 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // Author(s): gthomas (based on the old ARM/AEB hal_stub.c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Contributors:gthomas, jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Date: 1999-02-15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Purpose: Platform specific code for GDB stub support.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 #include <cyg/hal/hal_stub.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <cyg/hal/hal_io.h> // HAL IO macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_intr.h> // HAL interrupt macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #include <cyg/hal/drv_api.h> // HAL ISR support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 // Serial definitions.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 // 38400, UART1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB (13*3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 // This is the base address of UART1 on the AEB-1 board.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #define CYG_DEVICE_SERIAL_RS232_16550_BASE 0xFFFF0400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 // Define the serial registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 #define CYG_DEVICE_SERIAL_RS232_16550_RBR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 // receiver buffer register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 #define CYG_DEVICE_SERIAL_RS232_16550_THR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 // transmitter holding register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 #define CYG_DEVICE_SERIAL_RS232_16550_DLL \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 // divisor latch (LS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #define CYG_DEVICE_SERIAL_RS232_16550_IER \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 // interrupt enable register, read/write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 #define CYG_DEVICE_SERIAL_RS232_16550_DLM \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 // divisor latch (MS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #define CYG_DEVICE_SERIAL_RS232_16550_IIR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 // interrupt identification register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 #define CYG_DEVICE_SERIAL_RS232_16550_FCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 // fifo control register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 #define CYG_DEVICE_SERIAL_RS232_16550_LCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x0C)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 // line control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 #define CYG_DEVICE_SERIAL_RS232_16550_MCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 // modem control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 #define CYG_DEVICE_SERIAL_RS232_16550_LSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x14)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 // line status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 #define CYG_DEVICE_SERIAL_RS232_16550_MSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 // modem status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 // The interrupt enable register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 #define SIO_IER_ERDAI 0x01 // enable received data available irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 #define SIO_IER_ETHREI 0x02 // enable THR empty interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #define SIO_IER_ELSI 0x04 // enable receiver line status irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 #define SIO_IER_EMSI 0x08 // enable modem status interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 // The interrupt identification register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 #define SIO_IIR_IP 0x01 // 0 if interrupt pending
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 // The line status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #define SIO_LSR_DR 0x01 // data ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 #define SIO_LSR_OE 0x02 // overrun error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #define SIO_LSR_PE 0x04 // parity error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 #define SIO_LSR_FE 0x08 // framing error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 #define SIO_LSR_BI 0x10 // break interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 #define SIO_LSR_THRE 0x20 // transmitter holding register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 #define SIO_LSR_TEMT 0x40 // transmitter register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 #define SIO_LSR_ERR 0x80 // any error condition
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 // The modem status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 #define SIO_MSR_DCTS 0x01 // delta clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 #define SIO_MSR_DDSR 0x02 // delta data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 #define SIO_MSR_TERI 0x04 // trailing edge ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 #define SIO_MSR_DDCD 0x08 // delta data carrier detect
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 #define SIO_MSR_CTS 0x10 // clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 #define SIO_MSR_DSR 0x20 // data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 #define SIO_MSR_RI 0x40 // ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 #define SIO_MSR_DCD 0x80 // data carrier detect
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 // The line control register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 #define SIO_LCR_WLS0 0x01 // word length select bit 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 #define SIO_LCR_WLS1 0x02 // word length select bit 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 #define SIO_LCR_STB 0x04 // number of stop bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 #define SIO_LCR_PEN 0x08 // parity enable
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 #define SIO_LCR_EPS 0x10 // even parity select
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 #define SIO_LCR_SP 0x20 // stick parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 #define SIO_LCR_SB 0x40 // set break
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 #define SIO_LCR_DLAB 0x80 // divisor latch access bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 // Interrupt Enable Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 #define SIO_IER_RCV 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 #define SIO_IER_XMT 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 #define SIO_IER_LS 0x04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 #define SIO_IER_MS 0x08
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 // Modem Control Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 #define SIO_MCR_DTR 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 #define SIO_MCR_RTS 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 #define SIO_MCR_INT 0x08 // Enable interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 #define LED (volatile char *)0xFFFF1C0C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 #define LED1 (7<<1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 #define LED2 (6<<1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 #define LED3 (5<<1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 #define LED4 (4<<1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 #define LED_ON 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 #define LED_OFF 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 static cyg_interrupt gdb_interrupt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 static cyg_handle_t gdb_interrupt_handle;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 // This ISR is called only for serial receive interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 cyg_uint8 c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 c = hal_aeb_get_char(); // Fetch the character
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 if( 3 == c ) { // ^C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 // Ctrl-C: set a breakpoint at PC so GDB will display the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 // correct program context when stopping rather than the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 // interrupt handler.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 cyg_hal_gdb_interrupt (regs->pc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_UART1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 return 0; // No need to run DSR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 hal_aeb_interruptible(int state)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 if (state) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_UART1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_UART1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 return 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 static void dummy(void) {}
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 // Initialize the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 void hal_aeb_init_serial(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 cyg_uint8 lcr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 // 8-1-no parity.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 SIO_LCR_WLS0 | SIO_LCR_WLS1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 lcr |= SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 CYG_DEVICE_SERIAL_RS232_BAUD_LSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 dummy(); // FIXME! - GCC bug
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 CYG_DEVICE_SERIAL_RS232_BAUD_MSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 lcr &= ~SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, 0x07); // Enable & clear FIFO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_UART1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 99, // Priority - what goes here?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 0, // Data item passed to interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 cyg_hal_gdb_isr,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 &gdb_interrupt_handle,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 &gdb_interrupt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 cyg_drv_interrupt_attach(gdb_interrupt_handle);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_UART1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, SIO_IER_RCV);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR, SIO_MCR_INT|SIO_MCR_DTR|SIO_MCR_RTS);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 // Write C to the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 void hal_aeb_put_char(int c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 static int led_state = LED_ON;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 } while ((lsr & SIO_LSR_THRE) == 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 *LED = led_state | LED1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 if (led_state == LED_ON) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 led_state = LED_OFF;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 led_state = LED_ON;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 // Read one character from the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 int hal_aeb_get_char(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 } while ((lsr & SIO_LSR_DR) == 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 return c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268
36
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
269
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
270 //-----------------------------------------------------------------------------
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
271 // Reset board (definitions from watchdog file aeb1.cxx)
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
272
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
273 // Register definitions
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
274 #define CYGARC_REG_WATCHDOG_BASE 0xFFFFAC00
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
275 #define CYGARC_REG_WATCHDOG_WDCTLR (CYGARC_REG_WATCHDOG_BASE+0x30)
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
276 #define CYGARC_REG_WATCHDOG_WDCNTR (CYGARC_REG_WATCHDOG_BASE+0x34)
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
277
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
278 // Control register bits
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
279 #define CYGARC_REG_WATCHDOG_WDCTLR_EN 0x01 // enable
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
280 #define CYGARC_REG_WATCHDOG_WDCTLR_RSP_NMF 0x00 // non-maskable fiq
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
281 #define CYGARC_REG_WATCHDOG_WDCTLR_RSP_ER 0x04 // external reset
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
282 #define CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR 0x06 // system reset
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
283 #define CYGARC_REG_WATCHDOG_WDCTLR_FRZ 0x08 // lock enable bit
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
284 #define CYGARC_REG_WATCHDOG_WDCTLR_TOP_MASK 0x70 // time out period
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
285
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
286 #define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17 0x00 // 2^17
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
287 #define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17_P 5242880 // = 5.2ms
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
288
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
289 #define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25 0x40 // 2^25
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
290 #define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P 1342177300 // = 1.3421773s
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
291
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
292 void
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
293 hal_aeb_reset(void)
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
294 {
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
295 // Clear the watchdog counter.
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
296 HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
297
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
298 // Enable the watchdog with the smallest timeout.
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
299 HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR,
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
300 (CYGARC_REG_WATCHDOG_WDCTLR_TOP_17
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
301 | CYGARC_REG_WATCHDOG_WDCTLR_FRZ
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
302 | CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
303 | CYGARC_REG_WATCHDOG_WDCTLR_EN));
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
304
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
305 // Wait for it...
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
306 for(;;);
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
307 }
e97d78785e2d Merge from eCos master repository on 1999-09-12-15:40:34-BST
jlarmour
parents: 2
diff changeset
308
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 // End of plf_stub.c