annotate packages/hal/arm/pid/current/src/plf_stub.c @ 64:c38311975d4f ecos-sw-2000-01-28

Merge from eCos master repository on 2000-01-28-04:28:11-GMT
author jlarmour
date Fri, 28 Jan 2000 04:59:39 +0000
parents 443894e2e912
children bf00f99aec69
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####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
14 // http://sourceware.cygnus.com/ecos
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
15 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
16 // Software distributed under the License is distributed on an
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
18 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
25 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
29 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // 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
35 // Contributors:gthomas, jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Date: 1999-02-15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Purpose: Platform specific code for GDB stub support.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 //####DESCRIPTIONEND####
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 #include <cyg/hal/hal_stub.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_io.h> // HAL IO 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/hal_intr.h> // HAL interrupt macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #include <cyg/hal/drv_api.h> // HAL ISR support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #endif
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 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 // Serial definitions.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 #if CYGHWR_HAL_ARM_PID_GDB_PORT==0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 // This is the base address of the A-channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 #define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 #define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALA
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 // This is the base address of the B-channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 #define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800020
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 #define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALB
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==9600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x0C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==19200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x06
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==38400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x03
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 #if CYGHWR_HAL_ARM_PID_GDB_BAUD==115200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 #define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 #ifndef CYG_DEVICE_SERIAL_RS232_BAUD_MSB
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 #error Missing/incorrect serial baud rate defined - CDL error?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 // Define the serial registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 #define CYG_DEVICE_SERIAL_RS232_16550_RBR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 // receiver buffer register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 #define CYG_DEVICE_SERIAL_RS232_16550_THR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 // transmitter holding register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 #define CYG_DEVICE_SERIAL_RS232_16550_DLL \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 // divisor latch (LS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 #define CYG_DEVICE_SERIAL_RS232_16550_IER \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 // interrupt enable register, read/write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 #define CYG_DEVICE_SERIAL_RS232_16550_DLM \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 // divisor latch (MS), read/write, dlab = 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 #define CYG_DEVICE_SERIAL_RS232_16550_IIR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 // interrupt identification register, read, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define CYG_DEVICE_SERIAL_RS232_16550_FCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 // fifo control register, write, dlab = 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #define CYG_DEVICE_SERIAL_RS232_16550_LCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x0C)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 // line control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 #define CYG_DEVICE_SERIAL_RS232_16550_MCR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 // modem control register, read/write
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 #define CYG_DEVICE_SERIAL_RS232_16550_LSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x14)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 // line status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 #define CYG_DEVICE_SERIAL_RS232_16550_MSR \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 // modem status register, read
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 // The interrupt enable register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 #define SIO_IER_ERDAI 0x01 // enable received data available irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 #define SIO_IER_ETHREI 0x02 // enable THR empty interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 #define SIO_IER_ELSI 0x04 // enable receiver line status irq
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 #define SIO_IER_EMSI 0x08 // enable modem status interrupt
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 interrupt identification register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 #define SIO_IIR_IP 0x01 // 0 if interrupt pending
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 #define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 // The line status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 #define SIO_LSR_DR 0x01 // data ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 #define SIO_LSR_OE 0x02 // overrun error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 #define SIO_LSR_PE 0x04 // parity error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 #define SIO_LSR_FE 0x08 // framing error
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 #define SIO_LSR_BI 0x10 // break interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 #define SIO_LSR_THRE 0x20 // transmitter holding register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 #define SIO_LSR_TEMT 0x40 // transmitter register empty
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 #define SIO_LSR_ERR 0x80 // any error condition
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 // The modem status register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 #define SIO_MSR_DCTS 0x01 // delta clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 #define SIO_MSR_DDSR 0x02 // delta data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 #define SIO_MSR_TERI 0x04 // trailing edge ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 #define SIO_MSR_DDCD 0x08 // delta data carrier detect
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 #define SIO_MSR_CTS 0x10 // clear to send
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 #define SIO_MSR_DSR 0x20 // data set ready
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 #define SIO_MSR_RI 0x40 // ring indicator
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 #define SIO_MSR_DCD 0x80 // data carrier detect
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 // The line control register bits.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 #define SIO_LCR_WLS0 0x01 // word length select bit 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 #define SIO_LCR_WLS1 0x02 // word length select bit 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 #define SIO_LCR_STB 0x04 // number of stop bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 #define SIO_LCR_PEN 0x08 // parity enable
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 #define SIO_LCR_EPS 0x10 // even parity select
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 #define SIO_LCR_SP 0x20 // stick parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 #define SIO_LCR_SB 0x40 // set break
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 #define SIO_LCR_DLAB 0x80 // divisor latch access bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 // Interrupt Enable Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 #define SIO_IER_RCV 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 #define SIO_IER_XMT 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 #define SIO_IER_LS 0x04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 #define SIO_IER_MS 0x08
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 // Modem Control Register
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 #define SIO_MCR_DTR 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 #define SIO_MCR_RTS 0x02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 #define SIO_MCR_INT 0x08 // Enable interrupts
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 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 static cyg_interrupt gdb_interrupt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 static cyg_handle_t gdb_interrupt_handle;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 #endif
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 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 // This ISR is called only for serial receive interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 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
184 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 cyg_uint8 c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 c = hal_pid_get_char(); // Fetch the character
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 if( 3 == c ) { // ^C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 // 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
190 // correct program context when stopping rather than the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 // interrupt handler.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 cyg_hal_gdb_interrupt (regs->pc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 cyg_drv_interrupt_acknowledge(CYG_DEVICE_SERIAL_INT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 return 0; // No need to run DSR
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 hal_pid_interruptible(int state)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 if (state) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 } else {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 cyg_drv_interrupt_mask(CYG_DEVICE_SERIAL_INT);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 return 0;
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 // Initialize the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 void hal_pid_init_serial(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 cyg_uint8 lcr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 // 8-1-no parity.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 SIO_LCR_WLS0 | SIO_LCR_WLS1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 lcr |= SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 CYG_DEVICE_SERIAL_RS232_BAUD_LSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 CYG_DEVICE_SERIAL_RS232_BAUD_MSB);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 lcr &= ~SIO_LCR_DLAB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 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
230
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 cyg_drv_interrupt_create(CYG_DEVICE_SERIAL_INT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 99, // Priority - what goes here?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 0, // Data item passed to interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 cyg_hal_gdb_isr,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 &gdb_interrupt_handle,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 &gdb_interrupt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 cyg_drv_interrupt_attach(gdb_interrupt_handle);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 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
242 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
243 #endif
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 // Write C to the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 void hal_pid_put_char(int c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 } while ((lsr & SIO_LSR_THRE) == 0);
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 HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 // Read one character from the current serial port.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 int hal_pid_get_char(void)
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 char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 cyg_uint8 lsr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 do {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 } while ((lsr & SIO_LSR_DR) == 0);
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 HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 return c;
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 //-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 // End of plf_stub.c