annotate packages/io/serial/current/src/mn10300/mn10300_serial.c @ 32:5af43b635655 ecos-sw-1999-08-18

Merge from eCos master repository on 1999-08-18-15:20:01-BST
author jlarmour
date Wed, 18 Aug 1999 15:33:44 +0000
parents 641b639be825
children 7a6ac9edc838
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 // mn10300_serial.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 // Serial device driver for mn10300 on-chip serial devices
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. All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
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 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
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 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // Contributors: nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Date: 1999-02-25
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Purpose: MN10300 serial device driver
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Description: MN10300 serial device driver
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 #include <pkgconf/io_serial.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 #include <cyg/hal/hal_io.h>
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/io/io.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 #include <cyg/io/devtab.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <cyg/io/serial.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_intr.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #ifdef CYGPKG_IO_SERIAL_MN10300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
53 #define CYG_HAL_MN10300_SERIAL_RX_FIFO
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
54
2
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 extern void diag_printf(const char *fmt, ...);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 // Forward definitions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 static bool mn10300_serial_init(struct cyg_devtab_entry *tab);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 static bool mn10300_serial_putc(serial_channel *chan, unsigned char c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 static Cyg_ErrNo mn10300_serial_lookup(struct cyg_devtab_entry **tab,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 struct cyg_devtab_entry *sub_tab,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 const char *name);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 static unsigned char mn10300_serial_getc(serial_channel *chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 static bool mn10300_serial_set_config(serial_channel *chan, cyg_serial_info_t *config);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 static void mn10300_serial_start_xmit(serial_channel *chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 static void mn10300_serial_stop_xmit(serial_channel *chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 static cyg_uint32 mn10300_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 static cyg_uint32 mn10300_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 static void mn10300_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 static void mn10300_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 #define BUFSIZE 128
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 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 // MN10300 serial line control register values:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 // Offsets to serial control registers from base
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 #define SERIAL_CTR 0x0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 #define SERIAL_ICR 0x4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 #define SERIAL_TXB 0x8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 #define SERIAL_RXB 0x9
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 #define SERIAL_STR 0xc
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 #define SERIAL_TIM 0xd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 // Status register bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 #define SR_RBF 0x10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 #define SR_TBF 0x20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 #define SR_RXF 0x40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 #define SR_TXF 0x80
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 // Control register bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 #define LCR_SB1 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #define LCR_SB1_5 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 #define LCR_SB2 0x04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 #define LCR_PN 0x00 // Parity mode - none
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 #define LCR_PS 0x40 // Forced "space" parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 #define LCR_PM 0x50 // Forced "mark" parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define LCR_PE 0x60 // Parity mode - even
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 #define LCR_PO 0x70 // Parity mode - odd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 #define LCR_WL5 0x00 // not supported - use 7bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #define LCR_WL6 0x00 // not supported - use 7bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 #define LCR_WL7 0x00 // 7 bit chars
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #define LCR_WL8 0x80 // 8 bit chars
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 #define LCR_RXE 0x4000 // receive enable
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 #define LCR_TXE 0x8000 // transmit enable
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
115
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
116 #if defined(CYG_HAL_MN10300_AM31)
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
117 #define LCR_TWE 0x0100 // interrupt enable (only on serial2/AM31)
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
118 #else
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
119 #define LCR_TWE 0x0000 // Bit does not exist in other variants
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
120 #endif
2
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 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 // MN10300 timer registers:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 #undef TIMER_BR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 #undef TIMER_MD
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 #define TIMER_MD 0x00
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 #define TIMER_BR 0x10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 //-------------------------------------------------------------------------
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
131 // Serial and timer base registers:
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
132
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
133 #if defined(CYG_HAL_MN10300_AM31)
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
134
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
135 #define SERIAL0_BASE 0x34000800
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
136 #define SERIAL1_BASE 0x34000810
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
137 #define SERIAL2_BASE 0x34000820
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
138
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
139 #define TIMER0_BASE 0x34001000
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
140 #define TIMER1_BASE 0x34001001
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
141 #define TIMER2_BASE 0x34001002
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
142
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
143 #define SERIAL0_TIMER_SELECT 0x0004 // timer 0
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
144 #define SERIAL1_TIMER_SELECT 0x0004 // timer 1
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
145 #define SERIAL2_TIMER_SELECT 0x0001 // timer 2
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
146
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
147 #ifdef CYG_HAL_MN10300_AM31_STDEVAL1
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
148 // The use of PORT3 to provide CTS/CTR is specific to
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
149 // the STDEVAL1 board only.
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
150 #define PORT3_MD 0x36008025
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
151 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
153 #define ENABLE_TRANSMIT_INTERRUPT(mn10300_chan) \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
154 CYG_MACRO_START \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
155 if( mn10300_chan->is_serial2 ) \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
156 cr |= LCR_TWE; \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
157 else \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
158 cr |= LCR_TXE; \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
159 CYG_MACRO_END
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
160
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
161 #define DISABLE_TRANSMIT_INTERRUPT(mn10300_chan) \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
162 CYG_MACRO_START \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
163 if( mn10300_chan->is_serial2 ) \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
164 cr &= ~LCR_TWE; \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
165 else \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
166 cr &= ~LCR_TXE; \
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
167 CYG_MACRO_END
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
168
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
169 #else
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
170
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
171 #error Unsupported MN10300 variant
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
172
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
173 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 // Tables to map input values to hardware settings
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 static unsigned char select_word_length[] = {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 LCR_WL5, // 5 bits / word (char)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 LCR_WL6,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 LCR_WL7,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 LCR_WL8
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 static unsigned char select_stop_bits[] = {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 LCR_SB1, // 1 stop bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 LCR_SB1_5, // 1.5 stop bit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 LCR_SB2 // 2 stop bits
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 static unsigned char select_parity[] = {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 LCR_PN, // No parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 LCR_PE, // Even parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 LCR_PO, // Odd parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 LCR_PM, // Mark parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 LCR_PS, // Space parity
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
200 #if defined(CYG_HAL_MN10300_AM31)
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
201
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 static unsigned short select_baud_01[] = {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 0, // Unused
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 0, // 50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 0, // 75
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 0, // 110
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 0, // 134.5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 0, // 150
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 0, // 200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 0, // 300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 0, // 600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 0, // 1200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 0, // 1800
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 0, // 2400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 0, // 3600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 0, // 4800
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 0, // 7200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 195, // 9600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 130, // 14400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 98, // 19200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 48, // 38400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 32, // 57600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 16, // 115200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 8, // 230400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 // Serial 2 has its own timer register in addition to using timer 2 to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 // supply the baud rate generator. Both of these must be proframmed to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 // get the right baud rate. The following values come from Matsushita
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 // with some modifications from Cygmon.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 static struct
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 cyg_uint8 serial2_val;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 cyg_uint8 timer2_val;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 } select_baud_2[] = {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 { 0, 0 }, // Unused
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 { 0, 0 }, // 50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 { 0, 0 }, // 75
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 { 0, 0 }, // 110
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 { 0, 0 }, // 134.5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 { 0, 0 }, // 150
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 { 0, 0 }, // 200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 { 0, 0 }, // 300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 { 126, 196 }, // 600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 { 125, 98 }, // 1200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 { 0, 0 }, // 1800
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 { 124, 49 }, // 2400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 { 0, 0 }, // 3600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 { 124, 24 }, // 4800
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 { 0, 0 }, // 7200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 { 70, 21 }, // 9600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 { 0, 0 }, // 14400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 { 70, 10 }, // 19200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 { 22, 16 }, // 38400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 { 88, 2 }, // 57600
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 { 64, 1 }, // 115200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 { 62, 0 }, // 230400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
260 #else
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
261
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
262 #error Unsupported MN10300 variant
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
263
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
264 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265
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 // Info for each serial device controlled
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 typedef struct mn10300_serial_info {
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
270 CYG_ADDRWORD base;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
271 CYG_ADDRWORD timer_base;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
272 CYG_WORD timer_select;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
273 CYG_WORD rx_int;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
274 CYG_WORD tx_int;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
275 cyg_bool is_serial2;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
276 cyg_interrupt rx_interrupt;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
277 cyg_interrupt tx_interrupt;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
278 cyg_handle_t rx_interrupt_handle;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
279 cyg_handle_t tx_interrupt_handle;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
280 #ifdef CYG_HAL_MN10300_SERIAL_RX_FIFO
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
281 volatile cyg_int32 fifo_head;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
282 volatile cyg_int32 fifo_tail;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
283 volatile cyg_uint8 fifo[16];
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
284 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 } mn10300_serial_info;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 // Callback functions exported by this driver
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 static SERIAL_FUNS(mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 mn10300_serial_putc,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 mn10300_serial_getc,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 mn10300_serial_set_config,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 mn10300_serial_start_xmit,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 mn10300_serial_stop_xmit
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 // Hardware info for each serial line
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 #ifndef CYG_HAL_MN10300_STDEVAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 static mn10300_serial_info mn10300_serial_info0 = {
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
304 SERIAL0_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
305 TIMER0_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
306 SERIAL0_TIMER_SELECT,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 CYGNUM_HAL_INTERRUPT_SERIAL_0_RX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 CYGNUM_HAL_INTERRUPT_SERIAL_0_TX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 false
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 #if CYGNUM_IO_SERIAL_MN10300_SERIAL0_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 static unsigned char mn10300_serial_out_buf0[CYGNUM_IO_SERIAL_MN10300_SERIAL0_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 static unsigned char mn10300_serial_in_buf0[CYGNUM_IO_SERIAL_MN10300_SERIAL0_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 static mn10300_serial_info mn10300_serial_info1 = {
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
320 SERIAL1_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
321 TIMER1_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
322 SERIAL1_TIMER_SELECT,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 CYGNUM_HAL_INTERRUPT_SERIAL_1_RX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 CYGNUM_HAL_INTERRUPT_SERIAL_1_TX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325 false
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 #if CYGNUM_IO_SERIAL_MN10300_SERIAL1_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 static unsigned char mn10300_serial_out_buf1[CYGNUM_IO_SERIAL_MN10300_SERIAL1_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 static unsigned char mn10300_serial_in_buf1[CYGNUM_IO_SERIAL_MN10300_SERIAL1_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 static mn10300_serial_info mn10300_serial_info2 = {
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
335 SERIAL2_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
336 TIMER2_BASE,
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
337 SERIAL2_TIMER_SELECT,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 CYGNUM_HAL_INTERRUPT_SERIAL_2_RX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 CYGNUM_HAL_INTERRUPT_SERIAL_2_TX,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 true
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 #if CYGNUM_IO_SERIAL_MN10300_SERIAL2_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 static unsigned char mn10300_serial_out_buf2[CYGNUM_IO_SERIAL_MN10300_SERIAL2_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 static unsigned char mn10300_serial_in_buf2[CYGNUM_IO_SERIAL_MN10300_SERIAL2_BUFSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 // Channel descriptions:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 #ifdef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 #define SIZEOF_BUF(_x_) 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 #define SIZEOF_BUF(_x_) sizeof(_x_)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 #ifndef CYG_HAL_MN10300_STDEVAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 #if CYGNUM_IO_SERIAL_MN10300_SERIAL0_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 static SERIAL_CHANNEL_USING_INTERRUPTS(mn10300_serial_channel0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 mn10300_serial_info0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL0_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 CYG_SERIAL_FLAGS_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369 &mn10300_serial_out_buf0[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 SIZEOF_BUF(mn10300_serial_out_buf0),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 &mn10300_serial_in_buf0[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 SIZEOF_BUF(mn10300_serial_in_buf0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 static SERIAL_CHANNEL(mn10300_serial_channel0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 mn10300_serial_info0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL0_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 CYG_SERIAL_FLAGS_DEFAULT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 #if CYGNUM_IO_SERIAL_MN10300_SERIAL1_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 static SERIAL_CHANNEL_USING_INTERRUPTS(mn10300_serial_channel1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 mn10300_serial_info1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL1_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 CYG_SERIAL_FLAGS_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 &mn10300_serial_out_buf1[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 SIZEOF_BUF(mn10300_serial_out_buf1),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 &mn10300_serial_in_buf1[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 SIZEOF_BUF(mn10300_serial_in_buf1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 static SERIAL_CHANNEL(mn10300_serial_channel1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 mn10300_serial_info1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL1_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 CYG_SERIAL_FLAGS_DEFAULT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 #if CYGNUM_IO_SERIAL_MN10300_SERIAL2_BUFSIZE > 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 static SERIAL_CHANNEL_USING_INTERRUPTS(mn10300_serial_channel2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 mn10300_serial_info2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL2_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 CYG_SERIAL_FLAGS_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 &mn10300_serial_out_buf2[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 SIZEOF_BUF(mn10300_serial_out_buf2),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 &mn10300_serial_in_buf2[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 SIZEOF_BUF(mn10300_serial_in_buf2)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 static SERIAL_CHANNEL(mn10300_serial_channel2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 mn10300_serial_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 mn10300_serial_info2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MN10300_SERIAL2_BAUD),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 CYG_SERIAL_FLAGS_DEFAULT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 // And finally, the device table entries:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 #ifndef CYG_HAL_MN10300_STDEVAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 // On the standard eval board serial0 is not connected. If enabled, it
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 // generates continuous frame error and overrun interrupts. Hence we do
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 // not touch it.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 DEVTAB_ENTRY(mn10300_serial_io0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 CYGDAT_IO_SERIAL_MN10300_SERIAL0_NAME,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 0, // Does not depend on a lower level interface
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 &serial_devio,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456 mn10300_serial_init,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 mn10300_serial_lookup, // Serial driver may need initializing
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 &mn10300_serial_channel0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 DEVTAB_ENTRY(mn10300_serial_io1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 CYGDAT_IO_SERIAL_MN10300_SERIAL1_NAME,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 0, // Does not depend on a lower level interface
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467 &serial_devio,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 mn10300_serial_init,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 mn10300_serial_lookup, // Serial driver may need initializing
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 &mn10300_serial_channel1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 #ifdef CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 DEVTAB_ENTRY(mn10300_serial_io2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 CYGDAT_IO_SERIAL_MN10300_SERIAL2_NAME,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 0, // Does not depend on a lower level interface
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 &serial_devio,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 mn10300_serial_init,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 mn10300_serial_lookup, // Serial driver may need initializing
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 &mn10300_serial_channel2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 #endif // CYGPKG_IO_SERIAL_MN10300_SERIAL2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 // Read the serial line's status register. Serial 2 has an 8 bit status
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 // register while serials 0 and 1 have 16 bit registers. This function
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 // uses the correct size access, but passes back a 16 bit quantity for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 // both.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 static cyg_uint16 mn10300_read_sr( mn10300_serial_info *mn10300_chan )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 cyg_uint16 sr = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 if( mn10300_chan->is_serial2 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496 cyg_uint8 sr8;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 HAL_READ_UINT8(mn10300_chan->base+SERIAL_STR, sr8);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 sr = sr8;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 HAL_READ_UINT16(mn10300_chan->base+SERIAL_STR, sr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 return sr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510 static bool
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511 mn10300_serial_config_port(serial_channel *chan, cyg_serial_info_t *new_config, bool init)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514 cyg_uint16 cr = 0;
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
515 cyg_uint16 sr;
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
516
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
517 // wait for the device to become quiescent. This could take some time
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
518 // if the device had been transmitting at a low baud rate.
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
519 do {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
520 sr = mn10300_read_sr(mn10300_chan);
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
521 } while (sr & (SR_RXF|SR_TXF));
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
523 // Disable device entirely.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
524 HAL_WRITE_UINT16(mn10300_chan->base+SERIAL_CTR, 0);
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
525
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 4
diff changeset
526 // Set up the Interrupt Mode Register
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
527 HAL_WRITE_UINT8(mn10300_chan->base+SERIAL_ICR, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
528
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
529 // Set up baud rate
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 if( mn10300_chan->is_serial2 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
532 // Serial 2 is a bit different from 0 and 1 in the way that the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
533 // baud rate is controlled.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
534
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
535 cyg_uint8 baud_divisor = select_baud_2[new_config->baud].timer2_val;
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
536
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
537 if (baud_divisor == 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
538 return false; // Invalid baud rate selected
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
539
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
540 HAL_WRITE_UINT8(mn10300_chan->timer_base+TIMER_BR, baud_divisor);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
541
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
542 HAL_WRITE_UINT8(mn10300_chan->timer_base+TIMER_MD, 0x80 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
543
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
544 baud_divisor = select_baud_2[new_config->baud].serial2_val;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
545
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
546 HAL_WRITE_UINT8(mn10300_chan->base+SERIAL_TIM, baud_divisor);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
547
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
548 cr |= mn10300_chan->timer_select;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
549 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
550 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551 {
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
552 cyg_uint16 baud_divisor = select_baud_01[new_config->baud];
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
553 cyg_uint8 timer_mode = 0x80;
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
554
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
555 if (baud_divisor == 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
556 return false; // Invalid baud rate selected
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
557
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
558
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
559 HAL_WRITE_UINT8(mn10300_chan->timer_base+TIMER_BR, baud_divisor);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
560
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
561 HAL_WRITE_UINT8(mn10300_chan->timer_base+TIMER_MD, timer_mode );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
562
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
563 cr |= mn10300_chan->timer_select;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
564 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
565
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
566 #ifdef PORT3_MD
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
567 HAL_WRITE_UINT8( PORT3_MD, 0x01 );
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
568 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
569
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
570 // set up other config values:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
571
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
572 cr |= select_word_length[new_config->word_length - CYGNUM_SERIAL_WORD_LENGTH_5];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
573 cr |= select_stop_bits[new_config->stop];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
574 cr |= select_parity[new_config->parity];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
575
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
576 cr |= LCR_RXE | LCR_TXE; // enable Rx and Tx
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
577
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
578 #ifdef CYG_HAL_MN10300_AM31
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
579 if( mn10300_chan->is_serial2 )
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
580 {
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
581 // AM31 has an extra TX interrupt enable bit for serial 2.
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
582 DISABLE_TRANSMIT_INTERRUPT(mn10300_chan);
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
583 }
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
584 #endif
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
585
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
586 // Write CR into hardware
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
587 HAL_WRITE_UINT16(mn10300_chan->base+SERIAL_CTR, cr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
588
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
589 sr = mn10300_read_sr(mn10300_chan);
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
590
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
591 if (new_config != &chan->config) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
592 chan->config = *new_config;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
593 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
594 return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
595 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
596
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
597 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
598 // Function to initialize the device. Called at bootstrap time.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
599
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
600 bool mn10300_serial_init(struct cyg_devtab_entry *tab)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
601 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
602 serial_channel *chan = (serial_channel *)tab->priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
603 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
604
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
605 (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
606
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
607 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
608 if (chan->out_cbuf.len != 0) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
609 // Install and enable the receive interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
610 cyg_drv_interrupt_create(mn10300_chan->rx_int,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
611 4, // Priority - what goes here?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
612 (cyg_addrword_t)chan, // Data item passed to interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
613 mn10300_serial_rx_ISR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
614 mn10300_serial_rx_DSR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
615 &mn10300_chan->rx_interrupt_handle,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
616 &mn10300_chan->rx_interrupt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
617 cyg_drv_interrupt_attach(mn10300_chan->rx_interrupt_handle);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
618 cyg_drv_interrupt_unmask(mn10300_chan->rx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
619
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
620 // Install and enable the transmit interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
621 cyg_drv_interrupt_create(mn10300_chan->tx_int,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
622 4, // Priority - what goes here?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
623 (cyg_addrword_t)chan, // Data item passed to interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
624 mn10300_serial_tx_ISR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
625 mn10300_serial_tx_DSR,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
626 &mn10300_chan->tx_interrupt_handle,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
627 &mn10300_chan->tx_interrupt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
628 cyg_drv_interrupt_attach(mn10300_chan->tx_interrupt_handle);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
629 cyg_drv_interrupt_mask(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
630 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
631 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
632
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
633 mn10300_serial_config_port(chan, &chan->config, true);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
634
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
635 return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
636 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
637
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
638 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
639 // This routine is called when the device is "looked" up (i.e. attached)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
640
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
641 static Cyg_ErrNo
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
642 mn10300_serial_lookup(struct cyg_devtab_entry **tab,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
643 struct cyg_devtab_entry *sub_tab,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
644 const char *name)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
645 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
646 serial_channel *chan = (serial_channel *)(*tab)->priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
647 (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
648 return ENOERR;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
649 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
650
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
651 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
652 // Return 'true' if character is sent to device
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
653
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
654 bool
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
655 mn10300_serial_putc(serial_channel *chan, unsigned char c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
656 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
657 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
658 cyg_uint8 sr = mn10300_read_sr( mn10300_chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
659
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
660 if( (sr & SR_TBF) == 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
661 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
662 HAL_WRITE_UINT8( mn10300_chan->base+SERIAL_TXB, c );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
663
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
664 return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
665 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
666 else return false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
667 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
668
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
669 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
670
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
671 unsigned char
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
672 mn10300_serial_getc(serial_channel *chan)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
673 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
674 unsigned char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
675 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
676 do
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
677 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
678 cyg_uint8 sr = mn10300_read_sr( mn10300_chan );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
679
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
680 if( (sr & SR_RBF) != 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
681 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
682 HAL_READ_UINT8( mn10300_chan->base+SERIAL_RXB, c );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
683
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
684 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
685 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
686
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
687 } while(1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
688
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
689 return c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
690 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
691
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
692 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
693
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
694 bool
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
695 mn10300_serial_set_config(serial_channel *chan, cyg_serial_info_t *config)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
696 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
697 return mn10300_serial_config_port(chan, config, false);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
698 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
699
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
700 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
701 // Enable the transmitter on the device
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
702
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
703 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
704 mn10300_serial_start_xmit(serial_channel *chan)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
705 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
706 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
707 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
708 cyg_uint16 cr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
709
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
710 HAL_READ_UINT16( mn10300_chan->base+SERIAL_CTR, cr );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
711
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
712 ENABLE_TRANSMIT_INTERRUPT(mn10300_chan);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
713
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
714 HAL_WRITE_UINT16( mn10300_chan->base+SERIAL_CTR, cr );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
715
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
716 cyg_drv_interrupt_unmask(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
717
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
718 (chan->callbacks->xmt_char)(chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
719 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
720 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
721
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
722 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
723 // Disable the transmitter on the device
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
724
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
725 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
726 mn10300_serial_stop_xmit(serial_channel *chan)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
727 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
728 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
729 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
730 cyg_uint16 cr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
731 cyg_uint16 sr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
732
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
733 // Wait until the transmitter has actually stopped before turning it off.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
734
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
735 do
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
736 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
737 sr = mn10300_read_sr( mn10300_chan );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
738
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
739 } while( sr & SR_TXF );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
740
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
741 HAL_READ_UINT16( mn10300_chan->base+SERIAL_CTR, cr );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
742
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
743 DISABLE_TRANSMIT_INTERRUPT(mn10300_chan);
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
744
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
745 HAL_WRITE_UINT16( mn10300_chan->base+SERIAL_CTR, cr );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
746
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
747 cyg_drv_interrupt_mask(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
748
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
749 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
750 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
751
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
752 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
753 // Serial I/O - low level interrupt handlers (ISR)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
754
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
755 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
756
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
757 #ifdef CYG_HAL_MN10300_SERIAL_RX_FIFO
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
758
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
759 // This version of the RX ISR implements a simple receive FIFO. The
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
760 // MN10300 serial devices do not have hardware FIFOs (as found in
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
761 // 16550s for example), and it can be difficult at times to keep up
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
762 // with higher baud rates without overrunning. This ISR implements a
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
763 // software equivalent of the hardware FIFO, placing recieved
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
764 // characters into the FIFO as soon as they arrive. Whenever the DSR
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
765 // is run, it collects all the pending characters from the FIFO for
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
766 // delivery to the application. Neither the ISR or DSR disable
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
767 // interrupts, instead we rely on being able to write the head and
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
768 // tail pointers atomically, to implement lock-free synchronization.
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
769
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
770 static cyg_uint32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
771 mn10300_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data)
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
772 {
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
773 serial_channel *chan = (serial_channel *)data;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
774 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
775 cyg_uint8 sr = mn10300_read_sr( mn10300_chan);
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
776
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
777 while( (sr & SR_RBF) != 0 )
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
778 {
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
779 register cyg_int32 head = mn10300_chan->fifo_head;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
780 cyg_uint8 c;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
781 int i;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
782 HAL_READ_UINT8( mn10300_chan->base+SERIAL_RXB, c );
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
783
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
784 mn10300_chan->fifo[head++] = c;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
785
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
786 if( head >= sizeof(mn10300_chan->fifo) )
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
787 head = 0;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
788
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
789 mn10300_chan->fifo_head = head;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
790
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
791 sr = mn10300_read_sr( mn10300_chan);
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
792
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
793 }
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
794
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
795 cyg_drv_interrupt_acknowledge(mn10300_chan->rx_int);
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
796
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
797 return CYG_ISR_CALL_DSR; // Cause DSR to be run
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
798 }
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
799
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
800 #else
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
801
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
802 static cyg_uint32
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
803 mn10300_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
804 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
805 serial_channel *chan = (serial_channel *)data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
806 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 10
diff changeset
807
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
808 cyg_drv_interrupt_mask(mn10300_chan->rx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
809 cyg_drv_interrupt_acknowledge(mn10300_chan->rx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
810
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
811 return CYG_ISR_CALL_DSR; // Cause DSR to be run
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
812 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
813
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
814 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
815
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
816 static cyg_uint32
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
817 mn10300_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
818 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
819 serial_channel *chan = (serial_channel *)data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
820 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
821
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
822 cyg_drv_interrupt_mask(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
823 cyg_drv_interrupt_acknowledge(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
824
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
825 return CYG_ISR_CALL_DSR; // Cause DSR to be run
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
826 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
827
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
828 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
829
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
830 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
831 // Serial I/O - high level interrupt handler (DSR)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
832
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
833 #ifndef CYGPKG_IO_SERIAL_MN10300_POLLED_MODE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
834
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
835 #ifdef CYG_HAL_MN10300_SERIAL_RX_FIFO
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
836
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
837 static void
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
838 mn10300_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
839 {
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
840 serial_channel *chan = (serial_channel *)data;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
841 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
842 register cyg_int32 head = mn10300_chan->fifo_head;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
843 register cyg_int32 tail = mn10300_chan->fifo_tail;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
844
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
845 while( head != tail )
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
846 {
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
847 cyg_uint8 c = mn10300_chan->fifo[tail++];
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
848
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
849 if( tail >= sizeof(mn10300_chan->fifo) ) tail = 0;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
850
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
851 (chan->callbacks->rcv_char)(chan, c);
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
852 }
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
853
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
854 mn10300_chan->fifo_tail = tail;
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
855 }
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
856
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
857 #else
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
858
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
859 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
860 mn10300_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
861 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
862 serial_channel *chan = (serial_channel *)data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
863 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
864 cyg_uint8 sr = mn10300_read_sr( mn10300_chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
865
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
866 if( (sr & SR_RBF) != 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
867 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
868 cyg_uint8 rxb;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
869 HAL_READ_UINT8( mn10300_chan->base+SERIAL_RXB, rxb );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
870
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
871 (chan->callbacks->rcv_char)(chan, rxb);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
872 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
873
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
874 cyg_drv_interrupt_unmask(mn10300_chan->rx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
875 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
876
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
877 #endif
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 30
diff changeset
878
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
879 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
880 mn10300_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
881 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
882 serial_channel *chan = (serial_channel *)data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
883 mn10300_serial_info *mn10300_chan = (mn10300_serial_info *)chan->dev_priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
884 cyg_uint8 sr = mn10300_read_sr( mn10300_chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
885
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
886 if( (sr & SR_TBF) == 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
887 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
888 (chan->callbacks->xmt_char)(chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
889 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
890
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
891 cyg_drv_interrupt_unmask(mn10300_chan->tx_int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
892 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
893
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
894 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
895
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
896 #endif // CYGPKG_IO_SERIAL_MN10300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
897
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
898 //-------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
899 // EOF mn10300.c