source: rtems/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 6.3 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup arm_lpc32xx
5 *
6 * @brief Console configuration.
7 */
8
9/*
10 * Copyright (c) 2009
11 * embedded brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * <rtems@embedded-brains.de>
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
19 * http://www.rtems.org/license/LICENSE.
20 */
21
22#include <libchip/serial.h>
23#include <libchip/ns16550.h>
24
25#include <bsp.h>
26#include <bsp/lpc32xx.h>
27#include <bsp/irq.h>
28
29extern const console_fns lpc32xx_hsu_fns;
30
31static uint8_t lpc32xx_uart_get_register(uintptr_t addr, uint8_t i)
32{
33  volatile uint32_t *reg = (volatile uint32_t *) addr;
34
35  return (uint8_t) reg [i];
36}
37
38static void lpc32xx_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val)
39{
40  volatile uint32_t *reg = (volatile uint32_t *) addr;
41
42  reg [i] = val;
43}
44
45#ifdef LPC32XX_UART_3_BAUD
46  static bool lpc32xx_uart_probe_3(int minor)
47  {
48    LPC32XX_UARTCLK_CTRL |= BSP_BIT32(0);
49    LPC32XX_U3CLK = LPC32XX_CONFIG_U3CLK;
50    LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 4, 5);
51
52    return true;
53  }
54#endif
55
56#ifdef LPC32XX_UART_4_BAUD
57  static bool lpc32xx_uart_probe_4(int minor)
58  {
59    volatile lpc32xx_gpio *gpio = &lpc32xx.gpio;
60
61    /*
62     * Set GPO_21/U4_TX/LCDVD[3] to U4_TX.  This works only if LCD module is
63     * disabled.
64     */
65    gpio->p2_mux_set = BSP_BIT32(2);
66
67    LPC32XX_UARTCLK_CTRL |= BSP_BIT32(1);
68    LPC32XX_U4CLK = LPC32XX_CONFIG_U4CLK;
69    LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 6, 7);
70
71    return true;
72  }
73#endif
74
75#ifdef LPC32XX_UART_6_BAUD
76  static bool lpc32xx_uart_probe_6(int minor)
77  {
78    /* Bypass the IrDA modulator/demodulator */
79    LPC32XX_UART_CTRL |= BSP_BIT32(5);
80
81    LPC32XX_UARTCLK_CTRL |= BSP_BIT32(3);
82    LPC32XX_U6CLK = LPC32XX_CONFIG_U6CLK;
83    LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 10, 11);
84
85    return true;
86  }
87#endif
88
89/* FIXME: Console selection */
90
91console_tbl Console_Configuration_Ports [] = {
92  #ifdef LPC32XX_UART_5_BAUD
93    {
94      .sDeviceName = "/dev/ttyS5",
95      .deviceType = SERIAL_NS16550,
96      .pDeviceFns = &ns16550_fns,
97      .deviceProbe = NULL,
98      .pDeviceFlow = NULL,
99      .ulMargin = 16,
100      .ulHysteresis = 8,
101      .pDeviceParams = (void *) LPC32XX_UART_5_BAUD,
102      .ulCtrlPort1 = LPC32XX_BASE_UART_5,
103      .ulCtrlPort2 = 0,
104      .ulDataPort = LPC32XX_BASE_UART_5,
105      .getRegister = lpc32xx_uart_get_register,
106      .setRegister = lpc32xx_uart_set_register,
107      .getData = NULL,
108      .setData = NULL,
109      .ulClock = 16 * LPC32XX_UART_5_BAUD,
110      .ulIntVector = LPC32XX_IRQ_UART_5
111    },
112  #endif
113  #ifdef LPC32XX_UART_3_BAUD
114    {
115      .sDeviceName = "/dev/ttyS3",
116      .deviceType = SERIAL_NS16550,
117      .pDeviceFns = &ns16550_fns,
118      .deviceProbe = lpc32xx_uart_probe_3,
119      .pDeviceFlow = NULL,
120      .ulMargin = 16,
121      .ulHysteresis = 8,
122      .pDeviceParams = (void *) LPC32XX_UART_3_BAUD,
123      .ulCtrlPort1 = LPC32XX_BASE_UART_3,
124      .ulCtrlPort2 = 0,
125      .ulDataPort = LPC32XX_BASE_UART_3,
126      .getRegister = lpc32xx_uart_get_register,
127      .setRegister = lpc32xx_uart_set_register,
128      .getData = NULL,
129      .setData = NULL,
130      .ulClock = 16 * LPC32XX_UART_3_BAUD,
131      .ulIntVector = LPC32XX_IRQ_UART_3
132    },
133  #endif
134  #ifdef LPC32XX_UART_4_BAUD
135    {
136      .sDeviceName = "/dev/ttyS4",
137      .deviceType = SERIAL_NS16550,
138      .pDeviceFns = &ns16550_fns,
139      .deviceProbe = lpc32xx_uart_probe_4,
140      .pDeviceFlow = NULL,
141      .ulMargin = 16,
142      .ulHysteresis = 8,
143      .pDeviceParams = (void *) LPC32XX_UART_4_BAUD,
144      .ulCtrlPort1 = LPC32XX_BASE_UART_4,
145      .ulCtrlPort2 = 0,
146      .ulDataPort = LPC32XX_BASE_UART_4,
147      .getRegister = lpc32xx_uart_get_register,
148      .setRegister = lpc32xx_uart_set_register,
149      .getData = NULL,
150      .setData = NULL,
151      .ulClock = 16 * LPC32XX_UART_4_BAUD,
152      .ulIntVector = LPC32XX_IRQ_UART_4
153    },
154  #endif
155  #ifdef LPC32XX_UART_6_BAUD
156    {
157      .sDeviceName = "/dev/ttyS6",
158      .deviceType = SERIAL_NS16550,
159      .pDeviceFns = &ns16550_fns,
160      .deviceProbe = lpc32xx_uart_probe_6,
161      .pDeviceFlow = NULL,
162      .ulMargin = 16,
163      .ulHysteresis = 8,
164      .pDeviceParams = (void *) LPC32XX_UART_6_BAUD,
165      .ulCtrlPort1 = LPC32XX_BASE_UART_6,
166      .ulCtrlPort2 = 0,
167      .ulDataPort = LPC32XX_BASE_UART_6,
168      .getRegister = lpc32xx_uart_get_register,
169      .setRegister = lpc32xx_uart_set_register,
170      .getData = NULL,
171      .setData = NULL,
172      .ulClock = 16 * LPC32XX_UART_6_BAUD,
173      .ulIntVector = LPC32XX_IRQ_UART_6
174    },
175  #endif
176  #ifdef LPC32XX_UART_1_BAUD
177    {
178      .sDeviceName = "/dev/ttyS1",
179      .deviceType = SERIAL_CUSTOM,
180      .pDeviceFns = &lpc32xx_hsu_fns,
181      .deviceProbe = NULL,
182      .pDeviceFlow = NULL,
183      .ulMargin = 16,
184      .ulHysteresis = 8,
185      .pDeviceParams = (void *) LPC32XX_UART_1_BAUD,
186      .ulCtrlPort1 = LPC32XX_BASE_UART_1,
187      .ulCtrlPort2 = 0,
188      .ulDataPort = 0,
189      .getRegister = NULL,
190      .setRegister = NULL,
191      .getData = NULL,
192      .setData = NULL,
193      .ulClock = 16,
194      .ulIntVector = LPC32XX_IRQ_UART_1
195    },
196  #endif
197  #ifdef LPC32XX_UART_2_BAUD
198    {
199      .sDeviceName = "/dev/ttyS2",
200      .deviceType = SERIAL_CUSTOM,
201      .pDeviceFns = &lpc32xx_hsu_fns,
202      .deviceProbe = NULL,
203      .pDeviceFlow = NULL,
204      .ulMargin = 16,
205      .ulHysteresis = 8,
206      .pDeviceParams = (void *) LPC32XX_UART_2_BAUD,
207      .ulCtrlPort1 = LPC32XX_BASE_UART_2,
208      .ulCtrlPort2 = 0,
209      .ulDataPort = 0,
210      .getRegister = NULL,
211      .setRegister = NULL,
212      .getData = NULL,
213      .setData = NULL,
214      .ulClock = 16,
215      .ulIntVector = LPC32XX_IRQ_UART_2
216    },
217  #endif
218  #ifdef LPC32XX_UART_7_BAUD
219    {
220      .sDeviceName = "/dev/ttyS7",
221      .deviceType = SERIAL_CUSTOM,
222      .pDeviceFns = &lpc32xx_hsu_fns,
223      .deviceProbe = NULL,
224      .pDeviceFlow = NULL,
225      .ulMargin = 16,
226      .ulHysteresis = 8,
227      .pDeviceParams = (void *) LPC32XX_UART_7_BAUD,
228      .ulCtrlPort1 = LPC32XX_BASE_UART_7,
229      .ulCtrlPort2 = 0,
230      .ulDataPort = 0,
231      .getRegister = NULL,
232      .setRegister = NULL,
233      .getData = NULL,
234      .setData = NULL,
235      .ulClock = 16,
236      .ulIntVector = LPC32XX_IRQ_UART_7
237    },
238  #endif
239};
240
241#define LPC32XX_UART_COUNT \
242  (sizeof(Console_Configuration_Ports) / sizeof(Console_Configuration_Ports [0]))
243
244unsigned long Console_Configuration_Count = LPC32XX_UART_COUNT;
Note: See TracBrowser for help on using the repository browser.