annotate packages/hal/sh/sh4/current/src/sh4_scif.c @ 134:d2f49caf9e38 ecos-sw-2000-11-03

Merge from eCos master repository on 2000-11-03-09:00:49-GMT
author jlarmour
date Fri, 03 Nov 2000 21:17:40 +0000
parents
children 25e238959bae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
1 //=============================================================================
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
2 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
3 // sh4_scif.c
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
4 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
5 // Simple driver for the SH4 Serial Communication Interface with FIFO
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
6 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
7 //=============================================================================
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
9 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
10 // -------------------------------------------
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
14 // http://www.redhat.com/
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
15 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
19 // the License.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
20 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
22 // released September 30, 1998.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
23 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
25 // Portions created by Red Hat are
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
27 // All Rights Reserved.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
28 // -------------------------------------------
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
29 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
31 //=============================================================================
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
33 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
34 // Author(s): jskov
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
35 // Contributors:Haruki Kashiwaya
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
36 // Date: 2000-08-09
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
37 // Description: Simple driver for the SH Serial Communication Interface
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
38 // The driver can be used for the SCIF modules.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
39 // Clients of this file can configure the behavior with:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
40 // CYGNUM_SCIF_PORTS: number of SCI ports
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
41 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
43 //
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
44 //=============================================================================
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
45
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
46 #include <pkgconf/hal.h>
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
47
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
48 #ifdef CYGNUM_HAL_SH_SH4_SCIF_PORTS
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
49
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
50 #include <cyg/hal/hal_io.h> // IO macros
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
51 #include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
52 #include <cyg/hal/hal_misc.h> // Helper functions
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
53 #include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
54 #include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
55 #include <cyg/hal/hal_if.h> // Calling-if API
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
56 #include <cyg/hal/sh_regs.h> // serial register definitions
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
57 #include <cyg/hal/sh_stub.h> // target_register_t
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
58
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
59 #include <cyg/hal/sh4_scif.h> // our header
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
60
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
61 //--------------------------------------------------------------------------
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
62
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
63 void
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
64 cyg_hal_plf_scif_init_channel(const channel_data_t* chan)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
65 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
66 cyg_uint8* base = chan->base;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
67 cyg_uint16 tmp;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
68 cyg_uint16 sr;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
69
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
70 // Disable everything.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
71 HAL_WRITE_UINT16(base+_REG_SCSCR, 0);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
72
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
73 // Reset FIFO.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
74 HAL_WRITE_UINT16(base+_REG_SCFCR,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
75 CYGARC_REG_SCFCR2_TFRST|CYGARC_REG_SCFCR2_RFRST);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
76
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
77 // 8-1-no parity.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
78 HAL_WRITE_UINT16(base+_REG_SCSMR, 0);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
79
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
80 // Set speed to 38400
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
81 HAL_READ_UINT16(base+_REG_SCSMR, tmp);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
82 tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
83 tmp |= CYGARC_SCBRR_CKSx(38400);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
84 HAL_WRITE_UINT16(base+_REG_SCSMR, tmp);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
85 HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(38400));
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
86
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
87 // Let things settle: Here we should should wait the equivalent of
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
88 // one bit interval, i.e. 1/38400 second, but until we have
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
89 // something like the Linux delay loop, it's hard to do reliably. So
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
90 // just move on and hope for the best (this is unlikely to cause
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
91 // problems since the CPU has just come out of reset anyway).
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
92
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
93 // Clear status register (read back first).
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
94 HAL_READ_UINT16(base+_REG_SCFSR, sr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
95 HAL_WRITE_UINT16(base+_REG_SCFSR, 0);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
96
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
97 // Bring FIFO out of reset and set to trigger on every char in
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
98 // FIFO (or C-c input would not be processed).
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
99 HAL_WRITE_UINT16(base+_REG_SCFCR,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
100 CYGARC_REG_SCFCR2_RTRG_1|CYGARC_REG_SCFCR2_TTRG_1);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
101
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
102 // Leave Tx/Rx interrupts disabled, but enable Tx/Rx
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
103 HAL_WRITE_UINT16(base+_REG_SCSCR,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
104 CYGARC_REG_SCSCR2_TE|CYGARC_REG_SCSCR2_RE);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
105 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
106
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
107 static cyg_bool
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
108 cyg_hal_plf_scif_getc_nonblock(void* __ch_data, cyg_uint8* ch)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
109 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
110 cyg_uint8* base = ((channel_data_t*)__ch_data)->base;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
111 cyg_uint16 fdr, sr;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
112
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
113 HAL_READ_UINT16(base+_REG_SCFDR, fdr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
114 if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) == 0)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
115 return false;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
116
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
117 HAL_READ_UINT8(base+_REG_SCFRDR, *ch);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
118
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
119 // Clear FIFO full flag (read before clearing)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
120 HAL_READ_UINT16(base+_REG_SCFSR, sr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
121 HAL_WRITE_UINT16(base+_REG_SCFSR,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
122 CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
123
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
124 return true;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
125 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
126
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
127 cyg_uint8
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
128 cyg_hal_plf_scif_getc(void* __ch_data)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
129 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
130 cyg_uint8 ch;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
131 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
132
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
133 while(!cyg_hal_plf_scif_getc_nonblock(__ch_data, &ch));
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
134
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
135 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
136 return ch;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
137 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
138
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
139 void
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
140 cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
141 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
142 cyg_uint8* base = ((channel_data_t*)__ch_data)->base;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
143 cyg_uint16 fdr, sr;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
144 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
145
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
146 do {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
147 HAL_READ_UINT16(base+_REG_SCFDR, fdr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
148 } while (((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) >> CYGARC_REG_SCFDR2_TCOUNT_shift) == 16);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
149
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
150 HAL_WRITE_UINT8(base+_REG_SCFTDR, c);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
151
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
152 // Clear FIFO-empty/transmit end flags (read back SR first)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
153 HAL_READ_UINT16(base+_REG_SCFSR, sr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
154 HAL_WRITE_UINT16(base+_REG_SCFSR, CYGARC_REG_SCSSR2_CLEARMASK
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
155 & ~(CYGARC_REG_SCSSR2_TDFE | CYGARC_REG_SCSSR2_TEND ));
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
156
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
157 // Hang around until the character has been safely sent.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
158 do {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
159 HAL_READ_UINT16(base+_REG_SCFDR, fdr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
160 } while ((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) != 0);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
161
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
162 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
163 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
164
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
165 #if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
166 || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
167
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
168 static channel_data_t channels[CYGNUM_HAL_SH_SH4_SCIF_PORTS];
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
169
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
170 static void
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
171 cyg_hal_plf_scif_write(void* __ch_data, const cyg_uint8* __buf,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
172 cyg_uint32 __len)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
173 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
174 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
175
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
176 while(__len-- > 0)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
177 cyg_hal_plf_scif_putc(__ch_data, *__buf++);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
178
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
179 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
180 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
181
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
182 static void
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
183 cyg_hal_plf_scif_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
184 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
185 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
186
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
187 while(__len-- > 0)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
188 *__buf++ = cyg_hal_plf_scif_getc(__ch_data);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
189
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
190 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
191 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
192
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
193 cyg_bool
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
194 cyg_hal_plf_scif_getc_timeout(void* __ch_data, cyg_uint8* ch)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
195 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
196 channel_data_t* chan = (channel_data_t*)__ch_data;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
197 int delay_count;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
198 cyg_bool res;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
199 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
200
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
201 delay_count = chan->msec_timeout * 10; // delay in .1 ms steps
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
202
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
203 for(;;) {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
204 res = cyg_hal_plf_scif_getc_nonblock(__ch_data, ch);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
205 if (res || 0 == delay_count--)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
206 break;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
207
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
208 CYGACC_CALL_IF_DELAY_US(100);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
209 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
210
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
211 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
212 return res;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
213 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
214
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
215 static int
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
216 cyg_hal_plf_scif_control(void *__ch_data, __comm_control_cmd_t __func, ...)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
217 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
218 static int irq_state = 0;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
219 channel_data_t* chan = (channel_data_t*)__ch_data;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
220 cyg_uint8 scr;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
221 int ret = 0;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
222 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
223
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
224 switch (__func) {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
225 case __COMMCTL_IRQ_ENABLE:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
226 irq_state = 1;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
227 HAL_INTERRUPT_UNMASK(chan->isr_vector);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
228 HAL_READ_UINT16(chan->base+_REG_SCSCR, scr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
229 scr |= CYGARC_REG_SCSCR2_RIE;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
230 HAL_WRITE_UINT16(chan->base+_REG_SCSCR, scr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
231 break;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
232 case __COMMCTL_IRQ_DISABLE:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
233 ret = irq_state;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
234 irq_state = 0;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
235 HAL_INTERRUPT_UNMASK(chan->isr_vector);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
236 HAL_READ_UINT16(chan->base+_REG_SCSCR, scr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
237 scr &= ~CYGARC_REG_SCSCR2_RIE;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
238 HAL_WRITE_UINT16(chan->base+_REG_SCSCR, scr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
239 break;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
240 case __COMMCTL_DBG_ISR_VECTOR:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
241 ret = chan->isr_vector;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
242 break;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
243 case __COMMCTL_SET_TIMEOUT:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
244 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
245 va_list ap;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
246
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
247 va_start(ap, __func);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
248
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
249 ret = chan->msec_timeout;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
250 chan->msec_timeout = va_arg(ap, cyg_uint32);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
251
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
252 va_end(ap);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
253 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
254 default:
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
255 break;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
256 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
257 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
258 return ret;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
259 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
260
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
261 static int
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
262 cyg_hal_plf_scif_isr(void *__ch_data, int* __ctrlc,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
263 CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
264 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
265 cyg_uint8 c;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
266 cyg_uint16 fdr, sr;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
267 cyg_uint8* base = ((channel_data_t*)__ch_data)->base;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
268 int res = 0;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
269 CYGARC_HAL_SAVE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
270
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
271 *__ctrlc = 0;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
272 HAL_READ_UINT16(base+_REG_SCFDR, fdr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
273 if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) != 0) {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
274 HAL_READ_UINT8(base+_REG_SCFRDR, c);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
275
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
276 // Clear buffer full flag (read back first).
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
277 HAL_READ_UINT16(base+_REG_SCFSR, sr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
278 HAL_WRITE_UINT16(base+_REG_SCFSR,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
279 CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
280
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
281 if( cyg_hal_is_break( &c , 1 ) )
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
282 *__ctrlc = 1;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
283
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
284 res = CYG_ISR_HANDLED;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
285 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
286
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
287 CYGARC_HAL_RESTORE_GP();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
288 return res;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
289 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
290
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
291 void
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
292 cyg_hal_plf_scif_init(int scif_index, int comm_index,
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
293 int rcv_vect, cyg_uint8* base)
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
294 {
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
295 channel_data_t* chan = &channels[scif_index];
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
296 hal_virtual_comm_table_t* comm;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
297 int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
298
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
299 // Initialize channel table
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
300 chan->base = base;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
301 chan->isr_vector = rcv_vect;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
302 chan->msec_timeout = 1000;
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
303
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
304 // Disable interrupts.
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
305 HAL_INTERRUPT_MASK(chan->isr_vector);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
306
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
307 // Init channel
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
308 cyg_hal_plf_scif_init_channel(chan);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
309
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
310 // Setup procs in the vector table
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
311
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
312 // Initialize channel procs
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
313 CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
314 comm = CYGACC_CALL_IF_CONSOLE_PROCS();
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
315 CYGACC_COMM_IF_CH_DATA_SET(*comm, chan);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
316 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_scif_write);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
317 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_scif_read);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
318 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_scif_putc);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
319 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_scif_getc);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
320 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_scif_control);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
321 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_scif_isr);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
322 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_scif_getc_timeout);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
323
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
324 // Restore original console
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
325 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
326 }
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
327
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
328 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
329
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
330 #endif // CYGNUM_HAL_SH_SH4_SCIF_PORTS
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
331
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
332 //-----------------------------------------------------------------------------
d2f49caf9e38 Merge from eCos master repository on 2000-11-03-09:00:49-GMT
jlarmour
parents:
diff changeset
333 // end of sh4_scif.c