Mercurial > ecos-v2_0-branch
annotate packages/hal/powerpc/quicc/current/src/quicc_smc1.c @ 438:4ad7466aa844
Fix BD allocator problem.
| author | gthomas |
|---|---|
| date | Tue, 26 Nov 2002 15:36:55 +0000 |
| parents | a6484a9a16c6 |
| children | 65a9cab241ce |
| rev | line source |
|---|---|
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
3 // quicc_smc1.c |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
5 // PowerPC QUICC basic Serial IO using port(s) SMC1/SMC2/SCC1/SCC2/SCC3 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
8 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
9 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
| 237 | 12 // Copyright (C) 2002 Gary Thomas |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
13 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
14 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
15 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
16 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
17 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
21 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
22 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
23 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
24 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
26 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
27 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
28 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
29 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
30 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
31 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
32 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
33 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
34 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
35 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
36 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
38 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
39 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
151
diff
changeset
|
40 //####ECOSGPLCOPYRIGHTEND#### |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
41 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
42 //#####DESCRIPTIONBEGIN#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
43 // |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
36
diff
changeset
|
44 // Author(s): Red Hat |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
45 // Contributors: hmt, gthomas |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
46 // Date: 1999-06-08 |
| 237 | 47 // Purpose: Provide basic Serial IO for MPC8xx boards (like Motorola MBX) |
| 48 // Description: Serial IO for MPC8xx boards which connect their debug channel | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
49 // to SMCx or SCCx; or any QUICC user who wants to use SMCx/SCCx |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
50 // Usage: |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
51 // Notes: |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
52 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
53 //####DESCRIPTIONEND#### |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
54 // |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
55 //========================================================================== |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
56 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
57 #include <pkgconf/hal.h> |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
58 #include <pkgconf/hal_powerpc_quicc.h> |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
59 #include <cyg/infra/cyg_type.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
60 #include <cyg/hal/hal_cache.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
61 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
62 #include <cyg/hal/hal_arch.h> |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
63 |
|
68
f74b2666b30d
Merge from eCos master repository on 2000-02-04-07:47:04-GMT
jlarmour
parents:
66
diff
changeset
|
64 #ifdef CYGPKG_HAL_POWERPC_MPC860 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
65 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
66 // eCos headers decribing PowerQUICC: |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
67 #include <cyg/hal/quicc/ppc8xx.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
68 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
69 #include <cyg/hal/quicc/quicc_smc1.h> |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
70 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
71 #include <cyg/hal/hal_stub.h> // target_register_t |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
72 #include <cyg/hal/hal_intr.h> // HAL_INTERRUPT_UNMASK(...) |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
73 #include <cyg/hal/hal_if.h> // Calling interface definitions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
74 #include <cyg/hal/hal_misc.h> // Helper functions |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
76
diff
changeset
|
75 #include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
76 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
77 #define UART_BIT_RATE(n) (((int)(CYGHWR_HAL_POWERPC_BOARD_SPEED*1000000)/16)/n) |
| 225 | 78 #define UART_BAUD_RATE CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
79 |
| 237 | 80 // Note: buffers will be placed just after descriptors |
| 81 // Sufficient space should be provided between descrptors | |
| 82 // for the buffers (single characters) | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
83 |
| 237 | 84 struct port_info { |
| 85 int Txnum; // Number of Tx buffers | |
| 86 int Rxnum; // Number of Rx buffers | |
| 87 int intnum; // Interrupt bit | |
| 88 int timeout; // Timeout in msec | |
| 89 int pram; // [Pointer] to PRAM data | |
| 90 int regs; // [Pointer] to control registers | |
| 91 volatile struct cp_bufdesc *next_rxbd; | |
| 92 int irq; // Interrupt state | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
93 int init; // Has port been initialized? |
| 237 | 94 }; |
| 95 | |
| 96 static struct port_info ports[] = { | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
97 #if CYGNUM_HAL_QUICC_SMC1 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
98 { 1, 4, CYGNUM_HAL_INTERRUPT_CPM_SMC1, 1000, |
| 237 | 99 (int)&((EPPC *)0)->pram[2].scc.pothers.smc_modem.psmc.u, |
| 100 (int)&((EPPC *)0)->smc_regs[0] | |
| 101 }, | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
102 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
103 #if CYGNUM_HAL_QUICC_SMC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
104 { 1, 4, CYGNUM_HAL_INTERRUPT_CPM_SMC2_PIP, 1000, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
105 (int)&((EPPC *)0)->pram[3].scc.pothers.smc_modem.psmc.u, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
106 (int)&((EPPC *)0)->smc_regs[1] |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
107 }, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
108 #endif |
| 237 | 109 #if CYGNUM_HAL_QUICC_SCC1 > 0 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
110 { 1, 4, CYGNUM_HAL_INTERRUPT_CPM_SCC1, 1000, |
| 237 | 111 (int)&((EPPC *)0)->pram[0].scc.pscc.u, |
| 112 (int)&((EPPC *)0)->scc_regs[0] | |
| 113 }, | |
| 114 #endif | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
115 #if CYGNUM_HAL_QUICC_SCC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
116 { 1, 4, CYGNUM_HAL_INTERRUPT_CPM_SCC2, 1000, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
117 (int)&((EPPC *)0)->pram[1].scc.pscc.u, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
118 (int)&((EPPC *)0)->scc_regs[1] |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
119 }, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
120 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
121 #if CYGNUM_HAL_QUICC_SCC3 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
122 { 1, 4, CYGNUM_HAL_INTERRUPT_CPM_SCC3, 1000, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
123 (int)&((EPPC *)0)->pram[2].scc.pscc.u, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
124 (int)&((EPPC *)0)->scc_regs[2] |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
125 }, |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
126 #endif |
| 237 | 127 }; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
128 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
129 // SMC Events (interrupts) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
130 #define QUICC_SMCE_BRK 0x10 // Break received |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
131 #define QUICC_SMCE_BSY 0x04 // Busy - receive buffer overrun |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
132 #define QUICC_SMCE_TX 0x02 // Tx interrupt |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
133 #define QUICC_SMCE_RX 0x01 // Rx interrupt |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
134 |
| 237 | 135 /* |
| 136 * Reset the communications processor | |
| 137 */ | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
138 |
| 438 | 139 static short nextBd = QUICC_BD_BASE + 0x400; |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
140 |
| 237 | 141 static void |
| 142 reset_cpm(void) | |
| 143 { | |
| 144 EPPC *eppc = eppc_base(); | |
| 145 int i; | |
| 146 static int init_done = 0; | |
| 147 | |
| 148 if (init_done) return; | |
| 149 init_done++; | |
| 150 | |
| 151 eppc->cp_cr = QUICC_CPM_CR_RESET | QUICC_CPM_CR_BUSY; | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
152 memset(eppc->pram, 0, 0x400); |
| 237 | 153 for (i = 0; i < 100000; i++); |
| 154 | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
155 nextBd = QUICC_BD_BASE; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
156 |
| 237 | 157 } |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
158 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
159 // |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
160 // Allocate a chunk of memory in the shared CPM memory, typically |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
161 // used for buffer descriptors, etc. The length will be aligned |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
162 // to a multiple of 8 bytes. |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
163 // |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
164 unsigned short |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
165 cyg_hal_allocBd(int len) |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
166 { |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
167 unsigned short bd = nextBd; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
168 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
169 len = (len + 7) & ~7; // Multiple of 8 bytes |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
170 nextBd += len; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
171 return bd; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
172 } |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
173 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
174 /* |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
175 * Initialize SMCX as a uart. |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
176 * |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
177 * Comments below reference Motorola's "MPC860 User Manual". |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
178 * The basic initialization steps are from Section 16.15.8 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
179 * of that manual. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
180 */ |
| 237 | 181 static void |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
182 cyg_hal_smcx_init_channel(struct port_info *info, int port) |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
183 { |
| 237 | 184 EPPC *eppc = eppc_base(); |
|
121
6bd9d475ed4b
Merge from eCos master repository on 2000-09-04-20:50:20-BST
jlarmour
parents:
107
diff
changeset
|
185 int i; |
| 237 | 186 volatile struct smc_uart_pram *uart_pram = (volatile struct smc_uart_pram *)((char *)eppc + info->pram); |
| 187 volatile struct smc_regs *regs = (volatile struct smc_regs *)((char *)eppc + info->regs); | |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
188 struct cp_bufdesc *txbd, *rxbd; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
189 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
190 if (info->init) return; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
191 info->init = 1; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
192 |
| 237 | 193 reset_cpm(); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
194 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
195 switch (port) { |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
196 #if CYGNUM_HAL_QUICC_SMC1 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
197 case QUICC_CPM_SMC1: |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
198 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
199 * Set up the PortB pins for UART operation. |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
200 * Set PAR and DIR to allow SMCTXD1 and SMRXD1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
201 * (Table 16-39) |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
202 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
203 eppc->pip_pbpar |= 0xc0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
204 eppc->pip_pbdir &= ~0xc0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
205 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
206 /* Configure baud rate generator (Section 16.13.2) */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
207 eppc->brgc1 = 0x10000 | (UART_BIT_RATE(UART_BAUD_RATE)<<1); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
208 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
209 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
210 * NMSI mode, BRG1 to SMC1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
211 * (Section 16.12.5.2) |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
212 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
213 eppc->si_simode = 0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
214 break; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
215 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
216 #if CYGNUM_HAL_QUICC_SMC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
217 case QUICC_CPM_SMC2: |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
218 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
219 * Set up the PortA pins for UART operation. |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
220 * Set PAR and DIR to allow SMCTXD2 and SMRXD2 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
221 * (Table 16-39) |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
222 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
223 eppc->pio_papar |= 0xc0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
224 eppc->pio_padir &= ~0xc0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
225 eppc->pio_paodr &= ~0xc0; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
226 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
227 /* Configure baud rate generator (Section 16.13.2) */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
228 eppc->brgc1 = 0x10000 | (UART_BIT_RATE(UART_BAUD_RATE)<<1); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
229 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
230 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
231 * NMSI mode, BRG1 to SMC2 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
232 * (Section 16.12.5.2) |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
233 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
234 eppc->si_simode = 0x00000000; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
235 break; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
236 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
237 } |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
238 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
239 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
240 * Set pointers to buffer descriptors. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
241 * (Sections 16.15.4.1, 16.15.7.12, and 16.15.7.13) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
242 */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
243 uart_pram->rbase = cyg_hal_allocBd(sizeof(struct cp_bufdesc)*info->Rxnum + info->Rxnum); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
244 uart_pram->tbase = cyg_hal_allocBd(sizeof(struct cp_bufdesc)*info->Txnum + info->Txnum); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
245 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
246 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
247 * SDMA & LCD bus request level 5 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
248 * (Section 16.10.2.1) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
249 */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
250 eppc->dma_sdcr = 1; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
251 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
252 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
253 * Set Rx and Tx function code |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
254 * (Section 16.15.4.2) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
255 */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
256 uart_pram->rfcr = 0x18; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
257 uart_pram->tfcr = 0x18; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
258 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
259 /* max receive buffer length */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
260 uart_pram->mrblr = 1; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
261 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
262 /* disable max_idle feature */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
263 uart_pram->max_idl = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
264 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
265 /* no last brk char received */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
266 uart_pram->brkln = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
267 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
268 /* no break condition occurred */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
269 uart_pram->brkec = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
270 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
271 /* 1 break char sent on top XMIT */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
272 uart_pram->brkcr = 1; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
273 |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
274 /* setup RX buffer descriptors */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
275 rxbd = (struct cp_bufdesc *)((char *)eppc + uart_pram->rbase); |
| 237 | 276 info->next_rxbd = rxbd; |
| 277 for (i = 0; i < info->Rxnum; i++) { | |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
278 rxbd->length = 0; |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
279 rxbd->buffer = ((char *)eppc + (uart_pram->rbase+(info->Rxnum*sizeof(struct cp_bufdesc))))+i; |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
280 rxbd->ctrl = QUICC_BD_CTL_Ready | QUICC_BD_CTL_Int; |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
281 rxbd++; |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
282 } |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
283 rxbd--; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
284 rxbd->ctrl |= QUICC_BD_CTL_Wrap; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
285 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
286 /* setup TX buffer descriptor */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
287 txbd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbase); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
288 txbd->length = 1; |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
289 txbd->buffer = ((char *)eppc + (uart_pram->tbase+(info->Txnum*sizeof(struct cp_bufdesc)))); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
290 txbd->ctrl = 0x2000; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
291 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
292 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
293 * Clear any previous events. Mask interrupts. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
294 * (Section 16.15.7.14 and 16.15.7.15) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
295 */ |
| 237 | 296 regs->smc_smce = 0xff; |
| 297 regs->smc_smcm = 5; | |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
298 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
299 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
300 * Set 8,n,1 characters, then also enable rx and tx. |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
301 * (Section 16.15.7.11) |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
302 */ |
| 237 | 303 regs->smc_smcmr = 0x4820; |
| 304 regs->smc_smcmr = 0x4823; | |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
305 |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
306 /* |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
307 * Init Rx & Tx params for SMCx |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
308 */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
309 eppc->cp_cr = QUICC_CPM_CR_INIT_TXRX | port | QUICC_CPM_CR_BUSY; |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
310 |
| 237 | 311 info->irq = 0; // Interrupts not enabled |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
312 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
313 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
314 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
315 //#define UART_BUFSIZE 32 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
316 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
317 //static bsp_queue_t uart_queue; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
318 //static char uart_buffer[UART_BUFSIZE]; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
319 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
320 #define QUICC_SMCE_TX 0x02 // Tx interrupt |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
321 #define QUICC_SMCE_RX 0x01 // Rx interrupt |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
322 #define QUICC_SMCMR_TEN (1<<1) // Enable transmitter |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
323 #define QUICC_SMCMR_REN (1<<0) // Enable receiver |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
324 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
325 #ifdef CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
326 extern int enable_diag_uart; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
327 #endif // CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
328 |
| 237 | 329 static void |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
330 cyg_hal_smcx_putc(void* __ch_data, cyg_uint8 ch) |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
331 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
332 volatile struct cp_bufdesc *bd, *first; |
| 237 | 333 EPPC *eppc = eppc_base(); |
| 334 struct port_info *info = (struct port_info *)__ch_data; | |
| 335 volatile struct smc_uart_pram *uart_pram = (volatile struct smc_uart_pram *)((char *)eppc + info->pram); | |
| 336 volatile struct smc_regs *regs = (volatile struct smc_regs *)((char *)eppc + info->regs); | |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
337 int timeout; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
338 CYGARC_HAL_SAVE_GP(); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
339 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
340 /* tx buffer descriptor */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
341 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbptr); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
342 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
343 // Scan for a free buffer |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
344 first = bd; |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
345 while (bd->ctrl & QUICC_BD_CTL_Ready) { |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
346 if (bd->ctrl & QUICC_BD_CTL_Wrap) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
347 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbase); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
348 } else { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
349 bd++; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
350 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
351 if (bd == first) break; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
352 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
353 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
354 while (bd->ctrl & QUICC_BD_CTL_Ready) ; // Wait for buffer free |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
355 if (bd->ctrl & QUICC_BD_CTL_Int) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
356 // This buffer has just completed interrupt output. Reset bits |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
357 bd->ctrl &= ~QUICC_BD_CTL_Int; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
358 bd->length = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
359 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
360 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
361 bd->buffer[bd->length++] = ch; |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
362 bd->ctrl |= QUICC_BD_CTL_Ready; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
363 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
364 #ifdef CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
365 enable_diag_uart = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
366 #endif // CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
367 timeout = 0; |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
368 while (bd->ctrl & QUICC_BD_CTL_Ready) { |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
369 // Wait until buffer free |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
370 if (++timeout == 0x7FFFF) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
371 // A really long time! |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
372 #ifdef CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
373 diag_printf("bd fail? bd: %x, ctrl: %x, tx state: %x\n", bd, bd->ctrl, uart_pram->tstate); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
374 #endif // CYGDBG_DIAG_BUF |
| 237 | 375 regs->smc_smcmr &= ~QUICC_SMCMR_TEN; // Disable transmitter |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
376 bd->ctrl &= ~QUICC_BD_CTL_Ready; |
| 237 | 377 regs->smc_smcmr |= QUICC_SMCMR_TEN; // Enable transmitter |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
378 bd->ctrl |= QUICC_BD_CTL_Ready; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
379 timeout = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
380 #ifdef CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
381 diag_printf("bd retry? bd: %x, ctrl: %x, tx state: %x\n", bd, bd->ctrl, uart_pram->tstate); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
382 first = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbase); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
383 while (true) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
384 diag_printf("bd: %x, ctrl: %x, length: %x\n", first, first->ctrl, first->length); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
385 if (first->ctrl & QUICC_BD_CTL_Wrap) break; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
386 first++; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
387 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
388 #endif // CYGDBG_DIAG_BUF |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
389 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
390 } |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
391 while (bd->ctrl & QUICC_BD_CTL_Ready) ; // Wait until buffer free |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
392 bd->length = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
393 #ifdef CYGDBG_DIAG_BUF |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
394 enable_diag_uart = 1; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
395 #endif // CYGDBG_DIAG_BUF |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
396 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
397 CYGARC_HAL_RESTORE_GP(); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
398 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
399 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
400 |
| 237 | 401 /* |
| 402 * Get a character from a port, non-blocking | |
| 403 * This function can be called on either an SMC or SCC port | |
| 404 */ | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
405 static cyg_bool |
| 237 | 406 cyg_hal_sxx_getc_nonblock(void* __ch_data, cyg_uint8* ch) |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
407 { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
408 volatile struct cp_bufdesc *bd; |
| 237 | 409 EPPC *eppc = eppc_base(); |
| 410 struct port_info *info = (struct port_info *)__ch_data; | |
| 411 volatile struct smc_uart_pram *uart_pram = (volatile struct smc_uart_pram *)((char *)eppc + info->pram); | |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
412 int cache_state; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
413 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
414 /* rx buffer descriptor */ |
| 237 | 415 bd = info->next_rxbd; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
416 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
417 if (bd->ctrl & QUICC_BD_CTL_Ready) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
418 return false; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
419 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
420 *ch = bd->buffer[0]; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
421 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
422 bd->length = 0; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
423 bd->buffer[0] = '\0'; |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
424 bd->ctrl |= QUICC_BD_CTL_Ready; |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
425 if (bd->ctrl & QUICC_BD_CTL_Wrap) { |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
426 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->rbase); |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
427 } else { |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
428 bd++; |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
429 } |
| 237 | 430 info->next_rxbd = bd; |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
431 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
432 // Note: the MBX860 does not seem to snoop/invalidate the data cache properly! |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
433 HAL_DCACHE_IS_ENABLED(cache_state); |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
434 if (cache_state) { |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
435 HAL_DCACHE_INVALIDATE(bd->buffer, uart_pram->mrblr); // Make sure no stale data |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
436 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
437 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
438 return true; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
439 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
440 |
| 237 | 441 /* |
| 442 * Get a character from a port, blocking | |
| 443 * This function can be called on either an SMC or SCC port | |
| 444 */ | |
| 445 static cyg_uint8 | |
| 446 cyg_hal_sxx_getc(void* __ch_data) | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
447 { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
448 cyg_uint8 ch; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
449 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
450 |
| 237 | 451 while(!cyg_hal_sxx_getc_nonblock(__ch_data, &ch)); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
452 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
453 CYGARC_HAL_RESTORE_GP(); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
454 return ch; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
455 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
456 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
457 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
458 static void |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
459 cyg_hal_smcx_write(void* __ch_data, const cyg_uint8* __buf, |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
460 cyg_uint32 __len) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
461 { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
462 CYGARC_HAL_SAVE_GP(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
463 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
464 while(__len-- > 0) |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
465 cyg_hal_smcx_putc(__ch_data, *__buf++); |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
466 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
467 CYGARC_HAL_RESTORE_GP(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
468 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
469 |
| 237 | 470 /* |
| 471 * Read a sequence of characters from a port | |
| 472 * This function can be called on either an SMC or SCC port | |
| 473 */ | |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
474 static void |
| 237 | 475 cyg_hal_sxx_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
476 { |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
477 CYGARC_HAL_SAVE_GP(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
478 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
479 while(__len-- > 0) |
| 237 | 480 *__buf++ = cyg_hal_sxx_getc(__ch_data); |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
481 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
482 CYGARC_HAL_RESTORE_GP(); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
483 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
484 |
| 237 | 485 /* |
| 486 * Read a character from a port, with a timeout | |
| 487 * This function can be called on either an SMC or SCC port | |
| 488 */ | |
| 489 static cyg_bool | |
| 490 cyg_hal_sxx_getc_timeout(void* __ch_data, cyg_uint8* ch) | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
491 { |
| 237 | 492 struct port_info *info = (struct port_info *)__ch_data; |
| 493 int delay_count = info->timeout * 10; // delay in .1 ms steps | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
494 cyg_bool res; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
495 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
496 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
497 for(;;) { |
| 237 | 498 res = cyg_hal_sxx_getc_nonblock(__ch_data, ch); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
499 if (res || 0 == delay_count--) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
500 break; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
501 |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
502 CYGACC_CALL_IF_DELAY_US(100); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
503 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
504 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
505 CYGARC_HAL_RESTORE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
506 return res; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
507 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
508 |
| 237 | 509 /* |
| 510 * Control/query the state of a port | |
| 511 * This function can be called on either an SMC or SCC port | |
| 512 */ | |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
513 static int |
| 237 | 514 cyg_hal_sxx_control(void *__ch_data, __comm_control_cmd_t __func, ...) |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
515 { |
| 237 | 516 struct port_info *info = (struct port_info *)__ch_data; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
517 int ret = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
518 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
519 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
520 switch (__func) { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
521 case __COMMCTL_IRQ_ENABLE: |
| 237 | 522 HAL_INTERRUPT_UNMASK(info->intnum); |
| 523 info->irq = 1; | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
524 break; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
525 case __COMMCTL_IRQ_DISABLE: |
| 237 | 526 ret = info->irq; |
| 527 info->irq = 0; | |
| 528 HAL_INTERRUPT_MASK(info->intnum); | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
529 break; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
530 case __COMMCTL_DBG_ISR_VECTOR: |
| 237 | 531 ret = info->intnum; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
532 break; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
533 case __COMMCTL_SET_TIMEOUT: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
534 { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
535 va_list ap; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
536 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
537 va_start(ap, __func); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
538 |
| 237 | 539 ret = info->timeout; |
| 540 info->timeout = va_arg(ap, cyg_uint32); | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
541 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
542 va_end(ap); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
543 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
544 default: |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
545 break; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
546 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
547 CYGARC_HAL_RESTORE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
548 return ret; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
549 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
550 |
| 237 | 551 /* |
| 552 * Low-level interrupt (ISR) handler | |
| 553 * This function can be called on only an SMC port | |
| 554 */ | |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
555 static int |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
556 cyg_hal_smcx_isr(void *__ch_data, int* __ctrlc, |
| 237 | 557 CYG_ADDRWORD __vector, CYG_ADDRWORD __data) |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
558 { |
| 237 | 559 EPPC *eppc = eppc_base(); |
|
212
94b558c9fb67
Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents:
210
diff
changeset
|
560 volatile struct cp_bufdesc *bd; |
| 237 | 561 struct port_info *info = (struct port_info *)__ch_data; |
| 562 volatile struct smc_regs *regs = (volatile struct smc_regs *)((char *)eppc + info->regs); | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
563 volatile struct smc_uart_pram *uart_pram = (volatile struct smc_uart_pram *)((char *)eppc + info->pram); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
564 char ch; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
565 int res = 0; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
566 CYGARC_HAL_SAVE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
567 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
568 *__ctrlc = 0; |
| 237 | 569 if (regs->smc_smce & QUICC_SMCE_RX) { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
570 |
| 237 | 571 regs->smc_smce = QUICC_SMCE_RX; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
572 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
573 /* rx buffer descriptors */ |
| 237 | 574 bd = info->next_rxbd; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
575 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
576 if ((bd->ctrl & QUICC_BD_CTL_Ready) == 0) { |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
577 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
578 // then there be a character waiting |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
579 ch = bd->buffer[0]; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
580 bd->length = 1; |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
581 bd->ctrl |= QUICC_BD_CTL_Ready | QUICC_BD_CTL_Int; |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
582 if (bd->ctrl & QUICC_BD_CTL_Wrap) { |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
583 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->rbase); |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
584 } else { |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
585 bd++; |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
121
diff
changeset
|
586 } |
| 237 | 587 info->next_rxbd = bd; |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
588 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
589 if( cyg_hal_is_break( &ch , 1 ) ) |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
590 *__ctrlc = 1; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
591 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
592 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
593 // Interrupt handled. Acknowledge it. |
| 237 | 594 HAL_INTERRUPT_ACKNOWLEDGE(info->intnum); |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
595 res = CYG_ISR_HANDLED; |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
596 } |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
597 |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
598 CYGARC_HAL_RESTORE_GP(); |
|
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
599 return res; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
600 } |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
601 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
602 #if (CYGNUM_HAL_QUICC_SCC1+CYGNUM_HAL_QUICC_SCC2+CYGNUM_HAL_QUICC_SCC3) > 0 |
| 237 | 603 /* |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
604 * Initialize an SCC as a uart. |
| 237 | 605 * |
| 606 * Comments below reference Motorola's "MPC860 User Manual". | |
| 607 * The basic initialization steps are from Section 16.15.8 | |
| 608 * of that manual. | |
| 609 */ | |
| 610 static void | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
611 cyg_hal_sccx_init_channel(struct port_info *info, int port) |
| 237 | 612 { |
| 613 EPPC *eppc = eppc_base(); | |
| 614 int i; | |
| 615 volatile struct uart_pram *uart_pram = (volatile struct uart_pram *)((char *)eppc + info->pram); | |
| 616 volatile struct scc_regs *regs = (volatile struct scc_regs *)((char *)eppc + info->regs); | |
| 617 struct cp_bufdesc *txbd, *rxbd; | |
| 618 | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
619 if (info->init) return; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
620 info->init = 1; |
| 237 | 621 |
| 622 reset_cpm(); | |
| 623 | |
| 624 /* | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
625 * Set up the Port pins for UART operation. |
| 237 | 626 */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
627 switch (port) { |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
628 #if CYGNUM_HAL_QUICC_SCC1 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
629 case QUICC_CPM_SCC1: |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
630 eppc->pio_papar |= 0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
631 eppc->pio_padir &= ~0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
632 eppc->pio_paodr &= ~0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
633 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
634 /* CTS on PortC.11 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
635 eppc->pio_pcdir &= 0x800; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
636 eppc->pio_pcpar &= 0x800; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
637 eppc->pio_pcso |= 0x800; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
638 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
639 /* RTS on PortB.19 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
640 eppc->pip_pbpar |= 0x1000; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
641 eppc->pip_pbdir |= 0x1000; |
| 237 | 642 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
643 /* Configure baud rate generator (Section 16.13.2) */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
644 eppc->brgc2 = 0x10000 | (UART_BIT_RATE(UART_BAUD_RATE)<<1); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
645 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
646 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
647 * NMSI mode, BRG2 to SCC1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
648 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
649 eppc->si_sicr |= (1<<3)|(1<<0); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
650 break; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
651 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
652 #if CYGNUM_HAL_QUICC_SCC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
653 case QUICC_CPM_SCC2: |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
654 #error FIXME |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
655 eppc->pio_papar |= 0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
656 eppc->pio_padir &= ~0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
657 eppc->pio_paodr &= ~0x03; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
658 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
659 /* CTS on PortC.11 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
660 eppc->pio_pcdir &= 0x800; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
661 eppc->pio_pcpar &= 0x800; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
662 eppc->pio_pcso |= 0x800; |
| 237 | 663 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
664 /* RTS on PortB.19 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
665 eppc->pip_pbpar |= 0x1000; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
666 eppc->pip_pbdir |= 0x1000; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
667 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
668 /* Configure baud rate generator (Section 16.13.2) */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
669 eppc->brgc2 = 0x10000 | (UART_BIT_RATE(UART_BAUD_RATE)<<1); |
| 237 | 670 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
671 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
672 * NMSI mode, BRG2 to SCC1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
673 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
674 eppc->si_sicr |= (1<<3)|(1<<0); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
675 break; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
676 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
677 #if CYGNUM_HAL_QUICC_SCC3 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
678 case QUICC_CPM_SCC3: |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
679 #if 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
680 // CAUTION! Enabling these bits made the port get stuck :-( |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
681 /* CTS/RTS/CD on PortC.4/5/13 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
682 eppc->pio_pcdir &= 0x0C04; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
683 eppc->pio_pcpar &= 0x0C00; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
684 // eppc->pio_pcpar |= 0x0004; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
685 eppc->pio_pcso |= 0x0C00; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
686 #endif |
| 237 | 687 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
688 /* RxD/TxD on PortB.24/25 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
689 eppc->pip_pbpar |= 0x00C0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
690 eppc->pip_pbdir |= 0x00C0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
691 eppc->pip_pbodr &= ~0x00C0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
692 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
693 /* Configure baud rate generator (Section 16.13.2) */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
694 eppc->brgc4 = 0x10000 | (UART_BIT_RATE(UART_BAUD_RATE)<<1); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
695 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
696 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
697 * NMSI mode, BRG4 to SCC3 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
698 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
699 eppc->si_sicr &= ~(0xFF << 16); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
700 eppc->si_sicr |= (3<<19)|(3<<16); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
701 break; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
702 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
703 } |
| 237 | 704 |
| 705 /* | |
| 706 * Set pointers to buffer descriptors. | |
| 707 */ | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
708 memset((void *)uart_pram, 0xFF, 0x100); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
709 uart_pram->rbase = cyg_hal_allocBd(sizeof(struct cp_bufdesc)*info->Rxnum + info->Rxnum); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
710 uart_pram->tbase = cyg_hal_allocBd(sizeof(struct cp_bufdesc)*info->Txnum + info->Txnum); |
| 237 | 711 |
| 712 /* | |
| 713 * SDMA & LCD bus request level 5 | |
| 714 */ | |
| 715 eppc->dma_sdcr = 1; | |
| 716 | |
| 717 /* | |
| 718 * Set Rx and Tx function code | |
| 719 */ | |
| 720 uart_pram->rfcr = 0x18; | |
| 721 uart_pram->tfcr = 0x18; | |
| 722 | |
| 723 /* max receive buffer length */ | |
| 724 uart_pram->mrblr = 1; | |
| 725 | |
| 726 /* disable max_idle feature */ | |
| 727 uart_pram->max_idl = 0; | |
| 728 | |
| 729 /* no last brk char received */ | |
| 730 uart_pram->brkln = 0; | |
| 731 | |
| 732 /* no break condition occurred */ | |
| 733 uart_pram->brkec = 0; | |
| 734 | |
| 735 /* 1 break char sent on top XMIT */ | |
| 736 uart_pram->brkcr = 1; | |
| 737 | |
| 738 /* character mask */ | |
| 739 uart_pram->rccm = 0xC0FF; | |
| 740 | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
741 /* control characters */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
742 for (i = 0; i < 8; i++) { |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
743 uart_pram->cc[i] = 0x8000; // Mark unused |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
744 } |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
745 |
| 237 | 746 /* setup RX buffer descriptors */ |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
747 rxbd = (struct cp_bufdesc *)((char *)eppc + uart_pram->rbase); |
| 237 | 748 info->next_rxbd = rxbd; |
| 749 for (i = 0; i < info->Rxnum; i++) { | |
| 750 rxbd->length = 0; | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
751 rxbd->buffer = ((char *)eppc + (uart_pram->rbase+(info->Rxnum*sizeof(struct cp_bufdesc))))+i; |
| 237 | 752 rxbd->ctrl = QUICC_BD_CTL_Ready | QUICC_BD_CTL_Int; |
| 753 rxbd++; | |
| 754 } | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
755 rxbd--; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
756 rxbd->ctrl |= QUICC_BD_CTL_Wrap; |
| 237 | 757 |
| 758 /* setup TX buffer descriptor */ | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
759 txbd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbase); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
760 txbd->length = 0; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
761 txbd->buffer = ((char *)eppc + (uart_pram->tbase+(info->Txnum*sizeof(struct cp_bufdesc)))); |
| 237 | 762 txbd->ctrl = 0x2000; |
| 763 | |
| 764 /* | |
| 765 * Clear any previous events. Mask interrupts. | |
| 766 * (Section 16.15.7.14 and 16.15.7.15) | |
| 767 */ | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
768 regs->scc_scce = 0xffff; |
| 237 | 769 regs->scc_sccm = 5; |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
770 regs->scc_sccm = 3; |
| 237 | 771 |
| 772 /* | |
| 773 * Set 8,n,1 characters | |
| 774 */ | |
| 775 regs->scc_psmr = (3<<12); | |
| 776 regs->scc_gsmr_h = 0x20; // 8bit FIFO | |
| 777 regs->scc_gsmr_l = 0x00028004; // 16x TxCLK, 16x RxCLK, UART | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
778 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
779 /* |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
780 * Init Rx & Tx params for SCCX |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
781 */ |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
782 eppc->cp_cr = QUICC_CPM_CR_INIT_TXRX | port | QUICC_CPM_CR_BUSY; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
783 |
| 237 | 784 regs->scc_gsmr_l |= 0x30; // Enable Rx, Tx |
| 785 | |
| 786 info->irq = 0; | |
| 787 } | |
| 788 | |
| 789 static void | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
790 cyg_hal_sccx_putc(void* __ch_data, cyg_uint8 ch) |
| 237 | 791 { |
| 792 volatile struct cp_bufdesc *bd, *first; | |
| 793 EPPC *eppc = eppc_base(); | |
| 794 struct port_info *info = (struct port_info *)__ch_data; | |
| 795 volatile struct uart_pram *uart_pram = (volatile struct uart_pram *)((char *)eppc + info->pram); | |
| 796 CYGARC_HAL_SAVE_GP(); | |
| 797 | |
| 798 /* tx buffer descriptor */ | |
| 799 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbptr); | |
| 800 | |
| 801 // Scan for a free buffer | |
| 802 first = bd; | |
| 803 while (bd->ctrl & QUICC_BD_CTL_Ready) { | |
| 804 if (bd->ctrl & QUICC_BD_CTL_Wrap) { | |
| 805 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->tbase); | |
| 806 } else { | |
| 807 bd++; | |
| 808 } | |
| 809 if (bd == first) break; | |
| 810 } | |
| 811 | |
| 812 while (bd->ctrl & QUICC_BD_CTL_Ready) ; // Wait for buffer free | |
| 813 if (bd->ctrl & QUICC_BD_CTL_Int) { | |
| 814 // This buffer has just completed interrupt output. Reset bits | |
| 815 bd->ctrl &= ~QUICC_BD_CTL_Int; | |
| 816 bd->length = 0; | |
| 817 } | |
| 818 | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
819 bd->length = 0; |
| 237 | 820 bd->buffer[bd->length++] = ch; |
| 821 bd->ctrl |= QUICC_BD_CTL_Ready; | |
| 822 | |
| 823 while (bd->ctrl & QUICC_BD_CTL_Ready) ; // Wait until buffer free | |
| 824 | |
| 825 CYGARC_HAL_RESTORE_GP(); | |
| 826 } | |
| 827 | |
| 828 static void | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
829 cyg_hal_sccx_write(void* __ch_data, const cyg_uint8* __buf, |
| 237 | 830 cyg_uint32 __len) |
| 831 { | |
| 832 CYGARC_HAL_SAVE_GP(); | |
| 833 | |
| 834 while(__len-- > 0) | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
835 cyg_hal_sccx_putc(__ch_data, *__buf++); |
| 237 | 836 |
| 837 CYGARC_HAL_RESTORE_GP(); | |
| 838 } | |
| 839 | |
| 840 static int | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
841 cyg_hal_sccx_isr(void *__ch_data, int* __ctrlc, |
| 237 | 842 CYG_ADDRWORD __vector, CYG_ADDRWORD __data) |
| 843 { | |
| 844 EPPC *eppc = eppc_base(); | |
| 845 volatile struct cp_bufdesc *bd; | |
| 846 struct port_info *info = (struct port_info *)__ch_data; | |
| 847 volatile struct scc_regs *regs = (volatile struct scc_regs *)((char *)eppc + info->regs); | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
848 volatile struct uart_pram *uart_pram = (volatile struct uart_pram *)((char *)eppc + info->pram); |
| 237 | 849 char ch; |
| 850 int res = 0; | |
| 851 CYGARC_HAL_SAVE_GP(); | |
| 852 | |
| 853 *__ctrlc = 0; | |
| 854 if (regs->scc_scce & QUICC_SMCE_RX) { | |
| 855 | |
| 856 regs->scc_scce = QUICC_SMCE_RX; | |
| 857 | |
| 858 /* rx buffer descriptors */ | |
| 859 bd = info->next_rxbd; | |
| 860 | |
| 861 if ((bd->ctrl & QUICC_BD_CTL_Ready) == 0) { | |
| 862 | |
| 863 // then there be a character waiting | |
| 864 ch = bd->buffer[0]; | |
| 865 bd->length = 1; | |
| 866 bd->ctrl |= QUICC_BD_CTL_Ready | QUICC_BD_CTL_Int; | |
| 867 if (bd->ctrl & QUICC_BD_CTL_Wrap) { | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
868 bd = (struct cp_bufdesc *)((char *)eppc + uart_pram->rbase); |
| 237 | 869 } else { |
| 870 bd++; | |
| 871 } | |
| 872 info->next_rxbd = bd; | |
| 873 | |
| 874 if( cyg_hal_is_break( &ch , 1 ) ) | |
| 875 *__ctrlc = 1; | |
| 876 } | |
| 877 | |
| 878 // Interrupt handled. Acknowledge it. | |
| 879 HAL_INTERRUPT_ACKNOWLEDGE(info->intnum); | |
| 880 res = CYG_ISR_HANDLED; | |
| 881 } | |
| 882 | |
| 883 CYGARC_HAL_RESTORE_GP(); | |
| 884 return res; | |
| 885 } | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
886 #endif // CYGNUM_HAL_QUICC_SCCX |
| 237 | 887 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
888 /* |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
889 * Early initialization of comm channels. Must not rely |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
890 * on interrupts, yet. Interrupt operation can be enabled |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
891 * in _bsp_board_init(). |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
892 */ |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
893 void |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
894 cyg_hal_plf_serial_init(void) |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
895 { |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
896 hal_virtual_comm_table_t* comm; |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
897 int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
898 |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
899 static int init = 0; // It's wrong to do this more than once |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
900 int chan = 0; |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
901 if (init) return; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
902 init++; |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
903 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
904 // Setup procs in the vector table |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
905 |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
906 #if CYGNUM_HAL_QUICC_SMC1 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
907 // Set up SMC1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
908 cyg_hal_smcx_init_channel(&ports[chan], QUICC_CPM_SMC1); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
909 CYGACC_CALL_IF_SET_CONSOLE_COMM(chan);// Should be configurable! |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
910 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
911 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ports[chan]); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
912 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_smcx_write); |
| 237 | 913 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_sxx_read); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
914 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_smcx_putc); |
| 237 | 915 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_sxx_getc); |
| 916 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_sxx_control); | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
917 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_smcx_isr); |
| 237 | 918 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_sxx_getc_timeout); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
919 chan++; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
920 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
921 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
922 #if CYGNUM_HAL_QUICC_SMC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
923 // Set up SMC2 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
924 cyg_hal_smcx_init_channel(&ports[chan], QUICC_CPM_SMC2); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
925 CYGACC_CALL_IF_SET_CONSOLE_COMM(chan);// Should be configurable! |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
926 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
927 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ports[chan]); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
928 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_smcx_write); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
929 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_sxx_read); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
930 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_smcx_putc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
931 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_sxx_getc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
932 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_sxx_control); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
933 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_smcx_isr); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
934 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_sxx_getc_timeout); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
935 chan++; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
936 #endif |
| 237 | 937 |
| 938 #if CYGNUM_HAL_QUICC_SCC1 > 0 | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
939 // Set up SCC1 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
940 cyg_hal_sccx_init_channel(&ports[chan], QUICC_CPM_SCC1); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
941 CYGACC_CALL_IF_SET_CONSOLE_COMM(chan);// Should be configurable! |
| 237 | 942 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
943 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ports[chan]); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
944 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_sccx_write); |
| 237 | 945 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_sxx_read); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
946 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_sccx_putc); |
| 237 | 947 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_sxx_getc); |
| 948 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_sxx_control); | |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
949 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_sccx_isr); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
950 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_sxx_getc_timeout); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
951 chan++; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
952 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
953 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
954 #if CYGNUM_HAL_QUICC_SCC2 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
955 // Set up SCC2 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
956 cyg_hal_sccx_init_channel(&ports[chan], QUICC_CPM_SCC2); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
957 CYGACC_CALL_IF_SET_CONSOLE_COMM(chan);// Should be configurable! |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
958 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
959 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ports[chan]); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
960 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_sccx_write); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
961 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_sxx_read); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
962 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_sccx_putc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
963 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_sxx_getc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
964 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_sxx_control); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
965 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_sccx_isr); |
| 237 | 966 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_sxx_getc_timeout); |
|
435
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
967 chan++; |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
968 #endif |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
969 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
970 #if CYGNUM_HAL_QUICC_SCC3 > 0 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
971 // Set up SCC3 |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
972 cyg_hal_sccx_init_channel(&ports[chan], QUICC_CPM_SCC3); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
973 CYGACC_CALL_IF_SET_CONSOLE_COMM(chan);// Should be configurable! |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
974 comm = CYGACC_CALL_IF_CONSOLE_PROCS(); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
975 CYGACC_COMM_IF_CH_DATA_SET(*comm, &ports[chan]); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
976 CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_sccx_write); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
977 CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_sxx_read); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
978 CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_sccx_putc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
979 CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_sxx_getc); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
980 CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_sxx_control); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
981 CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_sccx_isr); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
982 CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_sxx_getc_timeout); |
|
a6484a9a16c6
Improve generalized support for MPC/QUICC based platforms
gthomas
parents:
244
diff
changeset
|
983 chan++; |
| 237 | 984 #endif |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
101
diff
changeset
|
985 |
|
105
5a0cc6c243a9
Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents:
103
diff
changeset
|
986 // Restore original console |
|
107
7f461c3a372c
Merge from eCos master repository on 2000-07-04-08:04:30-BST
jlarmour
parents:
105
diff
changeset
|
987 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
988 } |
|
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
989 |
|
68
f74b2666b30d
Merge from eCos master repository on 2000-02-04-07:47:04-GMT
jlarmour
parents:
66
diff
changeset
|
990 #endif // CYGPKG_HAL_POWERPC_MPC860 |
|
32
5af43b635655
Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents:
diff
changeset
|
991 // EOF quicc_smc1.c |
