annotate packages/hal/arm/pid/current/src/plf_stub.c @ 10:d3fbcdfa1b2f ecos-sw-1999-05-29

Merge from eCos master repository on 1999-05-29-00:13:11-BST
author jlarmour
date Fri, 28 May 1999 16:43:09 +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/PID 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 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 #include <cyg/hal/hal_intr.h> // HAL interrupt macros
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 #if CYGHWR_HAL_ARM_PID_GDB_PORT==0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 // This is the base address of the A-channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 #define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 #define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALA
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 // This is the base address of the B-channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800020
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 #define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALB
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==9600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x0C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==19200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x06
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==38400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x03
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==115200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 #ifndef CYG_DEVICE_SERIAL_RS232_BAUD_MSB
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 #error Missing/incorrect serial baud rate defined - CDL error?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 // Define the serial registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 #define CYG_DEVICE_SERIAL_RS232_16550_RBR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 // receiver buffer register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 #define CYG_DEVICE_SERIAL_RS232_16550_THR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 // transmitter holding register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 #define CYG_DEVICE_SERIAL_RS232_16550_DLL \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 // divisor latch (LS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 #define CYG_DEVICE_SERIAL_RS232_16550_IER \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 // interrupt enable register, read/write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 #define CYG_DEVICE_SERIAL_RS232_16550_DLM \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 // divisor latch (MS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 #define CYG_DEVICE_SERIAL_RS232_16550_IIR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 // interrupt identification register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 #define CYG_DEVICE_SERIAL_RS232_16550_FCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 // fifo control register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 #define CYG_DEVICE_SERIAL_RS232_16550_LCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x0C)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 // line control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #define CYG_DEVICE_SERIAL_RS232_16550_MCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 // modem control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 #define CYG_DEVICE_SERIAL_RS232_16550_LSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x14)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 // line status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 #define CYG_DEVICE_SERIAL_RS232_16550_MSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 // modem status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 // The interrupt enable register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 #define SIO_IER_ERDAI 0x01 // enable received data available irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 #define SIO_IER_ETHREI 0x02 // enable THR empty interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 #define SIO_IER_ELSI 0x04 // enable receiver line status irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 #define SIO_IER_EMSI 0x08 // enable modem status interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 // The interrupt identification register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 #define SIO_IIR_IP 0x01 // 0 if interrupt pending
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 #define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 // The line status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 #define SIO_LSR_DR 0x01 // data ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 #define SIO_LSR_OE 0x02 // overrun error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 #define SIO_LSR_PE 0x04 // parity error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 #define SIO_LSR_FE 0x08 // framing error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 #define SIO_LSR_BI 0x10 // break interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 #define SIO_LSR_THRE 0x20 // transmitter holding register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 #define SIO_LSR_TEMT 0x40 // transmitter register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 #define SIO_LSR_ERR 0x80 // any error condition
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 // The modem status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 #define SIO_MSR_DCTS 0x01 // delta clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 #define SIO_MSR_DDSR 0x02 // delta data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 #define SIO_MSR_TERI 0x04 // trailing edge ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 #define SIO_MSR_DDCD 0x08 // delta data carrier detect
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 #define SIO_MSR_CTS 0x10 // clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 #define SIO_MSR_DSR 0x20 // data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 #define SIO_MSR_RI 0x40 // ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 #define SIO_MSR_DCD 0x80 // data carrier detect
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 // The line control register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 #define SIO_LCR_WLS0 0x01 // word length select bit 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 #define SIO_LCR_WLS1 0x02 // word length select bit 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 #define SIO_LCR_STB 0x04 // number of stop bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 #define SIO_LCR_PEN 0x08 // parity enable
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 #define SIO_LCR_EPS 0x10 // even parity select
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 #define SIO_LCR_SP 0x20 // stick parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 #define SIO_LCR_SB 0x40 // set break
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 #define SIO_LCR_DLAB 0x80 // divisor latch access bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 // Interrupt Enable Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 #define SIO_IER_RCV 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 #define SIO_IER_XMT 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 #define SIO_IER_LS 0x04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 #define SIO_IER_MS 0x08
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 // Modem Control Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 #define SIO_MCR_DTR 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 #define SIO_MCR_RTS 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 #define SIO_MCR_INT 0x08 // Enable interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 static cyg_interrupt gdb_interrupt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 static cyg_handle_t gdb_interrupt_handle;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 // This ISR is called only for serial receive interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 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
183 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 cyg_uint8 c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 c = hal_pid_get_char(); // Fetch the character
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 if( 3 == c ) { // ^C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 // 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
189 // correct program context when stopping rather than the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 // interrupt handler.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 cyg_hal_gdb_interrupt (regs->pc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 cyg_drv_interrupt_acknowledge(CYG_DEVICE_SERIAL_INT);
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; // No need to run DSR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 hal_pid_interruptible(int state)
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 if (state) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 cyg_drv_interrupt_mask(CYG_DEVICE_SERIAL_INT);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 return 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 // Initialize the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 void hal_pid_init_serial(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 cyg_uint8 lcr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 // 8-1-no parity.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 SIO_LCR_WLS0 | SIO_LCR_WLS1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 lcr |= SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 CYG_DEVICE_SERIAL_RS232_BAUD_LSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 CYG_DEVICE_SERIAL_RS232_BAUD_MSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 lcr &= ~SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 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
229
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 cyg_drv_interrupt_create(CYG_DEVICE_SERIAL_INT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 99, // Priority - what goes here?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 0, // Data item passed to interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 cyg_hal_gdb_isr,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 &gdb_interrupt_handle,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 &gdb_interrupt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 cyg_drv_interrupt_attach(gdb_interrupt_handle);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 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
241 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
242 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 // Write C to the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 void hal_pid_put_char(int c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 } while ((lsr & SIO_LSR_THRE) == 0);
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 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 // Read one character from the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 int hal_pid_get_char(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 } while ((lsr & SIO_LSR_DR) == 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 return c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 // End of plf_stub.c