source: rtems/bsps/arm/lpc24xx/include/bsp/io.h @ 2afb22b

5
Last change on this file since 2afb22b was 2afb22b, checked in by Chris Johns <chrisj@…>, on 12/23/17 at 07:18:56

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • Property mode set to 100644
File size: 32.2 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup lpc24xx_io
5 *
6 * @brief Input and output module.
7 */
8
9/*
10 * Copyright (c) 2009-2012 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Obere Lagerstr. 30
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifndef LIBBSP_ARM_LPC24XX_IO_H
24#define LIBBSP_ARM_LPC24XX_IO_H
25
26#include <rtems.h>
27
28#include <bsp/lpc24xx.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif /* __cplusplus */
33
34/**
35 * @defgroup lpc24xx_io IO Support and Configuration
36 *
37 * @ingroup lpc24xx
38 *
39 * @brief Input and output module.
40 *
41 * @{
42 */
43
44#define LPC24XX_IO_PORT_COUNT 5U
45
46#define LPC24XX_IO_INDEX_MAX (LPC24XX_IO_PORT_COUNT * 32U)
47
48#define LPC24XX_IO_INDEX_BY_PORT(port, bit) (((port) << 5U) + (bit))
49
50#define LPC24XX_IO_PORT(index) ((index) >> 5U)
51
52#define LPC24XX_IO_PORT_BIT(index) ((index) & 0x1fU)
53
54typedef enum {
55  #ifdef ARM_MULTILIB_ARCH_V4
56    LPC24XX_MODULE_ACF,
57  #endif
58    LPC24XX_MODULE_ADC,
59  #ifdef ARM_MULTILIB_ARCH_V4
60    LPC24XX_MODULE_BAT_RAM,
61  #endif
62  LPC24XX_MODULE_CAN_0,
63  LPC24XX_MODULE_CAN_1,
64  LPC24XX_MODULE_DAC,
65  LPC24XX_MODULE_EMC,
66  LPC24XX_MODULE_ETHERNET,
67  LPC24XX_MODULE_GPDMA,
68  LPC24XX_MODULE_GPIO,
69  LPC24XX_MODULE_I2C_0,
70  LPC24XX_MODULE_I2C_1,
71  LPC24XX_MODULE_I2C_2,
72  LPC24XX_MODULE_I2S,
73  LPC24XX_MODULE_LCD,
74  LPC24XX_MODULE_MCI,
75  #ifdef ARM_MULTILIB_ARCH_V7M
76    LPC24XX_MODULE_MCPWM,
77  #endif
78  LPC24XX_MODULE_PCB,
79  LPC24XX_MODULE_PWM_0,
80  LPC24XX_MODULE_PWM_1,
81  #ifdef ARM_MULTILIB_ARCH_V7M
82    LPC24XX_MODULE_QEI,
83  #endif
84  LPC24XX_MODULE_RTC,
85  #ifdef ARM_MULTILIB_ARCH_V4
86    LPC24XX_MODULE_SPI,
87  #endif
88  LPC24XX_MODULE_SSP_0,
89  LPC24XX_MODULE_SSP_1,
90  #ifdef ARM_MULTILIB_ARCH_V7M
91    LPC24XX_MODULE_SSP_2,
92  #endif
93  LPC24XX_MODULE_SYSCON,
94  LPC24XX_MODULE_TIMER_0,
95  LPC24XX_MODULE_TIMER_1,
96  LPC24XX_MODULE_TIMER_2,
97  LPC24XX_MODULE_TIMER_3,
98  LPC24XX_MODULE_UART_0,
99  LPC24XX_MODULE_UART_1,
100  LPC24XX_MODULE_UART_2,
101  LPC24XX_MODULE_UART_3,
102  #ifdef ARM_MULTILIB_ARCH_V7M
103    LPC24XX_MODULE_UART_4,
104  #endif
105  #ifdef ARM_MULTILIB_ARCH_V4
106    LPC24XX_MODULE_WDT,
107  #endif
108  LPC24XX_MODULE_USB
109} lpc24xx_module;
110
111#define LPC24XX_MODULE_COUNT (LPC24XX_MODULE_USB + 1)
112
113typedef enum {
114  LPC24XX_MODULE_PCLK_DEFAULT = 0x4U,
115  LPC24XX_MODULE_CCLK = 0x1U,
116  LPC24XX_MODULE_CCLK_2 = 0x2U,
117  LPC24XX_MODULE_CCLK_4 = 0x0U,
118  LPC24XX_MODULE_CCLK_6 = 0x3U,
119  LPC24XX_MODULE_CCLK_8 = 0x3U
120} lpc24xx_module_clock;
121
122#define LPC24XX_MODULE_CLOCK_MASK 0x3U
123
124typedef enum {
125  LPC24XX_GPIO_DEFAULT = 0x0U,
126  LPC24XX_GPIO_RESISTOR_PULL_UP = 0x0U,
127  LPC24XX_GPIO_RESISTOR_NONE = 0x1U,
128  LPC24XX_GPIO_RESISTOR_PULL_DOWN = 0x2U,
129  LPC24XX_GPIO_INPUT = 0x0U,
130  #ifdef ARM_MULTILIB_ARCH_V7M
131    LPC17XX_GPIO_REPEATER = 0x3U,
132    LPC17XX_GPIO_HYSTERESIS = IOCON_HYS,
133    LPC17XX_GPIO_INPUT_INVERT = IOCON_INV,
134    LPC17XX_GPIO_FAST_MODE = IOCON_SLEW,
135    LPC17XX_GPIO_OPEN_DRAIN = IOCON_OD,
136    LPC17XX_GPIO_INPUT_FILTER = IOCON_FILTER,
137  #endif
138  LPC24XX_GPIO_OUTPUT = 0x8000U
139} lpc24xx_gpio_settings;
140
141rtems_status_code lpc24xx_module_enable(
142  lpc24xx_module module,
143  lpc24xx_module_clock clock
144);
145
146rtems_status_code lpc24xx_module_disable(
147  lpc24xx_module module
148);
149
150bool lpc24xx_module_is_enabled(lpc24xx_module module);
151
152rtems_status_code lpc24xx_gpio_config(
153  unsigned index,
154  lpc24xx_gpio_settings settings
155);
156
157static inline void lpc24xx_gpio_set(unsigned index)
158{
159  if (index <= LPC24XX_IO_INDEX_MAX) {
160    unsigned port = LPC24XX_IO_PORT(index);
161    unsigned bit = LPC24XX_IO_PORT_BIT(index);
162
163    LPC24XX_FIO [port].set = 1U << bit;
164  }
165}
166
167static inline void lpc24xx_gpio_clear(unsigned index)
168{
169  if (index <= LPC24XX_IO_INDEX_MAX) {
170    unsigned port = LPC24XX_IO_PORT(index);
171    unsigned bit = LPC24XX_IO_PORT_BIT(index);
172
173    LPC24XX_FIO [port].clr = 1U << bit;
174  }
175}
176
177static inline void lpc24xx_gpio_write(unsigned index, bool value)
178{
179  if (value) {
180    lpc24xx_gpio_set(index);
181  } else {
182    lpc24xx_gpio_clear(index);
183  }
184}
185
186static inline bool lpc24xx_gpio_get(unsigned index)
187{
188  if (index <= LPC24XX_IO_INDEX_MAX) {
189    unsigned port = LPC24XX_IO_PORT(index);
190    unsigned bit = LPC24XX_IO_PORT_BIT(index);
191
192    return (LPC24XX_FIO [port].pin & (1U << bit)) != 0;
193  } else {
194    return false;
195  }
196}
197
198typedef enum {
199  /**
200   * @brief Sets the pin function.
201   */
202  LPC24XX_PIN_SET_FUNCTION,
203
204  /**
205   * @brief Checks if all pins are configured with the specified function.
206   */
207  LPC24XX_PIN_CHECK_FUNCTION,
208
209  /**
210   * @brief Configures the pins as input.
211   */
212  LPC24XX_PIN_SET_INPUT,
213
214  /**
215   * @brief Checks if all pins are configured as input.
216   */
217  LPC24XX_PIN_CHECK_INPUT
218} lpc24xx_pin_action;
219
220typedef union {
221  struct {
222    uint16_t port : 3;
223    uint16_t port_bit : 5;
224    uint16_t function : 3;
225    uint16_t type : 4;
226    uint16_t range : 1;
227  } fields;
228  uint16_t value;
229} lpc24xx_pin_range;
230
231typedef enum {
232  LPC24XX_PIN_FUNCTION_00,
233  LPC24XX_PIN_FUNCTION_01,
234  LPC24XX_PIN_FUNCTION_10,
235  LPC24XX_PIN_FUNCTION_11
236} lpc24xx_pin_function;
237
238typedef enum {
239  LPC17XX_PIN_TYPE_DEFAULT,
240  LPC17XX_PIN_TYPE_ADC,
241  LPC17XX_PIN_TYPE_DAC,
242  LPC17XX_PIN_TYPE_I2C,
243  LPC17XX_PIN_TYPE_I2C_FAST_PLUS,
244  LPC17XX_PIN_TYPE_OPEN_DRAIN
245} lpc17xx_pin_type;
246
247#ifdef ARM_MULTILIB_ARCH_V4
248  #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f0, 0, 0 } }
249  #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f0, t, 0 } }
250  #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
251    { { p, i, f0, 0, 0 } }, { { p, j, f0, 0, 1 } }
252#else
253  #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f1, 0, 0 } }
254  #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f1, t, 0 } }
255  #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
256    { { p, i, f1, 0, 0 } }, { { p, j, f1, 0, 1 } }
257#endif
258
259#define LPC24XX_PIN_TERMINAL { { 0x7, 0x1f, 0x7, 0xf, 0x1 } }
260
261/**
262 * @brief Performs the @a action with the @a pins
263 *
264 * @code
265 * #include <assert.h>
266 * #include <bsp/io.h>
267 *
268 * void example(void)
269 * {
270 *   static const lpc24xx_pin_range pins [] = {
271 *     LPC24XX_PIN_I2S_RX_CLK_P0_4,
272 *     LPC24XX_PIN_I2S_RX_WS_P0_5,
273 *     LPC24XX_PIN_I2S_RX_SDA_P0_6,
274 *     LPC24XX_PIN_I2S_TX_CLK_P0_7,
275 *     LPC24XX_PIN_I2S_TX_WS_P0_8,
276 *     LPC24XX_PIN_I2S_TX_SDA_P0_9,
277 *     LPC24XX_PIN_TERMINAL
278 *   };
279 *   rtems_status_code sc = RTEMS_SUCCESSFUL;
280 *
281 *   sc = lpc24xx_module_enable(LPC24XX_MODULE_I2S, LPC24XX_MODULE_CCLK_8);
282 *   assert(sc == RTEMS_SUCCESSFUL);
283 *   sc = lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
284 *   assert(sc == RTEMS_SUCCESSFUL);
285 * }
286 * @endcode
287 *
288 * @retval RTEMS_SUCCESSFUL Successful operation.
289 * @retval RTEMS_IO_ERROR Check failed.
290 * @retval RTEMS_NOT_DEFINED Invalid action.
291 */
292rtems_status_code lpc24xx_pin_config(
293  const lpc24xx_pin_range *pins,
294  lpc24xx_pin_action action
295);
296
297/**
298 * @brief Returns the first pin index of a pin range.
299 */
300static inline unsigned lpc24xx_pin_get_first_index(
301  const lpc24xx_pin_range *range
302)
303{
304  return LPC24XX_IO_INDEX_BY_PORT(range->fields.port, range->fields.port_bit);
305}
306
307/**
308 * @name ADC Pins
309 *
310 * @{
311 */
312
313#define LPC24XX_PIN_ADC_CHANNEL_0 \
314  LPC24XX_PIN_WITH_TYPE(0, 23, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
315#define LPC24XX_PIN_ADC_CHANNEL_1 \
316  LPC24XX_PIN_WITH_TYPE(0, 24, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
317#define LPC24XX_PIN_ADC_CHANNEL_2 \
318  LPC24XX_PIN_WITH_TYPE(0, 25, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
319#define LPC24XX_PIN_ADC_CHANNEL_3 \
320  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
321#define LPC24XX_PIN_ADC_CHANNEL_4 \
322  LPC24XX_PIN_WITH_TYPE(1, 30, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
323#define LPC24XX_PIN_ADC_CHANNEL_5 \
324  LPC24XX_PIN_WITH_TYPE(1, 31, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
325#define LPC24XX_PIN_ADC_CHANNEL_6 \
326  LPC24XX_PIN_WITH_TYPE(0, 12, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
327#define LPC24XX_PIN_ADC_CHANNEL_7 \
328  LPC24XX_PIN_WITH_TYPE(0, 13, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
329
330/** @} */
331
332/**
333 * @name CAN 0 Pins
334 *
335 * @{
336 */
337
338#define LPC24XX_PIN_CAN_0_RD_P0_0 \
339  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_01, 1)
340
341#define LPC24XX_PIN_CAN_0_RD_P0_21 \
342  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_11, 4)
343
344#define LPC24XX_PIN_CAN_0_TD_P0_1 \
345  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_01, 1)
346
347#define LPC24XX_PIN_CAN_0_TD_P0_22 \
348  LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_11, 4)
349
350/** @} */
351
352/**
353 * @name CAN 1 Pins
354 *
355 * @{
356 */
357
358#define LPC24XX_PIN_CAN_1_RD_P0_4 \
359  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_10, 2)
360
361#define LPC24XX_PIN_CAN_1_RD_P2_7 \
362  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_01, 1)
363
364#define LPC24XX_PIN_CAN_1_TD_P0_5 \
365  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_10, 2)
366
367#define LPC24XX_PIN_CAN_1_TD_P2_8 \
368  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_01, 1)
369
370/** @} */
371
372/**
373 * @name DAC Pins
374 *
375 * @{
376 */
377
378#define LPC24XX_PIN_DAC \
379  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_DAC)
380
381/** @} */
382
383/**
384 * @name Ethernet Pins
385 *
386 * @{
387 */
388
389#define LPC24XX_PIN_ETHERNET_MII \
390  LPC24XX_PIN_RANGE(1, 0, 17, LPC24XX_PIN_FUNCTION_01, 1)
391
392#define LPC24XX_PIN_ETHERNET_RMII_0 \
393  LPC24XX_PIN_RANGE(1, 0, 1, LPC24XX_PIN_FUNCTION_01, 1)
394#define LPC24XX_PIN_ETHERNET_RMII_1 \
395  LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_01, 1)
396#define LPC24XX_PIN_ETHERNET_RMII_2 \
397  LPC24XX_PIN_RANGE(1, 8, 10, LPC24XX_PIN_FUNCTION_01, 1)
398#define LPC24XX_PIN_ETHERNET_RMII_3 \
399  LPC24XX_PIN_RANGE(1, 14, 17, LPC24XX_PIN_FUNCTION_01, 1)
400
401/** @} */
402
403/**
404 * @name External Interrupt Pins
405 *
406 * @{
407 */
408
409#define LPC24XX_PIN_EINT_0 \
410  LPC24XX_PIN(2, 10, LPC24XX_PIN_FUNCTION_01, 1)
411#define LPC24XX_PIN_EINT_1 \
412  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 1)
413#define LPC24XX_PIN_EINT_2 \
414  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 1)
415#define LPC24XX_PIN_EINT_3 \
416  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 1)
417
418/** @} */
419
420/**
421 * @name External Memory Controller (EMC) Pins
422 *
423 * @{
424 */
425
426#define LPC24XX_PIN_EMC_CS_0 \
427  LPC24XX_PIN(4, 30, LPC24XX_PIN_FUNCTION_01, 1)
428#define LPC24XX_PIN_EMC_CS_1 \
429  LPC24XX_PIN(4, 31, LPC24XX_PIN_FUNCTION_01, 1)
430#define LPC24XX_PIN_EMC_CS_2 \
431  LPC24XX_PIN(2, 14, LPC24XX_PIN_FUNCTION_01, 1)
432#define LPC24XX_PIN_EMC_CS_3 \
433  LPC24XX_PIN(2, 15, LPC24XX_PIN_FUNCTION_01, 1)
434
435#define LPC24XX_PIN_EMC_DYCS_0 \
436  LPC24XX_PIN(2, 20, LPC24XX_PIN_FUNCTION_01, 1)
437#define LPC24XX_PIN_EMC_DYCS_1 \
438  LPC24XX_PIN(2, 21, LPC24XX_PIN_FUNCTION_01, 1)
439#define LPC24XX_PIN_EMC_DYCS_2 \
440  LPC24XX_PIN(2, 22, LPC24XX_PIN_FUNCTION_01, 1)
441#define LPC24XX_PIN_EMC_DYCS_3 \
442  LPC24XX_PIN(2, 23, LPC24XX_PIN_FUNCTION_01, 1)
443
444#define LPC24XX_PIN_EMC_OE \
445  LPC24XX_PIN(4, 24, LPC24XX_PIN_FUNCTION_01, 1)
446#define LPC24XX_PIN_EMC_WE \
447  LPC24XX_PIN(4, 25, LPC24XX_PIN_FUNCTION_01, 1)
448#define LPC24XX_PIN_EMC_CAS \
449  LPC24XX_PIN(2, 16, LPC24XX_PIN_FUNCTION_01, 1)
450#define LPC24XX_PIN_EMC_RAS \
451  LPC24XX_PIN(2, 17, LPC24XX_PIN_FUNCTION_01, 1)
452
453#define LPC24XX_PIN_EMC_CLK_0 \
454  LPC24XX_PIN(2, 18, LPC24XX_PIN_FUNCTION_01, 1)
455#define LPC24XX_PIN_EMC_CLK_1 \
456  LPC24XX_PIN(2, 19, LPC24XX_PIN_FUNCTION_01, 1)
457
458#define LPC24XX_PIN_EMC_CKE_0 \
459  LPC24XX_PIN(2, 24, LPC24XX_PIN_FUNCTION_01, 1)
460#define LPC24XX_PIN_EMC_CKE_1 \
461  LPC24XX_PIN(2, 25, LPC24XX_PIN_FUNCTION_01, 1)
462#define LPC24XX_PIN_EMC_CKE_2 \
463  LPC24XX_PIN(2, 26, LPC24XX_PIN_FUNCTION_01, 1)
464#define LPC24XX_PIN_EMC_CKE_3 \
465  LPC24XX_PIN(2, 27, LPC24XX_PIN_FUNCTION_01, 1)
466
467#define LPC24XX_PIN_EMC_DQM_0 \
468  LPC24XX_PIN(2, 28, LPC24XX_PIN_FUNCTION_01, 1)
469#define LPC24XX_PIN_EMC_DQM_1 \
470  LPC24XX_PIN(2, 29, LPC24XX_PIN_FUNCTION_01, 1)
471#define LPC24XX_PIN_EMC_DQM_2 \
472  LPC24XX_PIN(2, 30, LPC24XX_PIN_FUNCTION_01, 1)
473#define LPC24XX_PIN_EMC_DQM_3 \
474  LPC24XX_PIN(2, 31, LPC24XX_PIN_FUNCTION_01, 1)
475
476#define LPC24XX_PIN_EMC_BLS0 \
477  LPC24XX_PIN(4, 26, LPC24XX_PIN_FUNCTION_01, 1)
478#define LPC24XX_PIN_EMC_BLS1 \
479  LPC24XX_PIN(4, 27, LPC24XX_PIN_FUNCTION_01, 1)
480#define LPC24XX_PIN_EMC_BLS2 \
481  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_01, 1)
482#define LPC24XX_PIN_EMC_BLS3 \
483  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_01, 1)
484
485#define LPC24XX_PIN_EMC_D_0_15 \
486  LPC24XX_PIN_RANGE(3, 0, 15, LPC24XX_PIN_FUNCTION_01, 1)
487#define LPC24XX_PIN_EMC_D_15_31 \
488  LPC24XX_PIN_RANGE(3, 15, 31, LPC24XX_PIN_FUNCTION_01, 1)
489#define LPC24XX_PIN_EMC_D_0_31 \
490  LPC24XX_PIN_RANGE(3, 0, 31, LPC24XX_PIN_FUNCTION_01, 1)
491
492#define LPC24XX_PIN_EMC_A_0_12 \
493  LPC24XX_PIN_RANGE(4, 0, 12, LPC24XX_PIN_FUNCTION_01, 1)
494#define LPC24XX_PIN_EMC_A_0_13 \
495  LPC24XX_PIN_RANGE(4, 0, 13, LPC24XX_PIN_FUNCTION_01, 1)
496#define LPC24XX_PIN_EMC_A_0_14 \
497  LPC24XX_PIN_RANGE(4, 0, 14, LPC24XX_PIN_FUNCTION_01, 1)
498#define LPC24XX_PIN_EMC_A_0_15 \
499  LPC24XX_PIN_RANGE(4, 0, 15, LPC24XX_PIN_FUNCTION_01, 1)
500#define LPC24XX_PIN_EMC_A_0_16 \
501  LPC24XX_PIN_EMC_A_0_15, \
502  LPC24XX_PIN(4, 16, LPC24XX_PIN_FUNCTION_01, 1)
503#define LPC24XX_PIN_EMC_A_0_17 \
504  LPC24XX_PIN_EMC_A_0_15, \
505  LPC24XX_PIN_RANGE(4, 16, 17, LPC24XX_PIN_FUNCTION_01, 1)
506#define LPC24XX_PIN_EMC_A_0_18 \
507  LPC24XX_PIN_EMC_A_0_15, \
508  LPC24XX_PIN_RANGE(4, 16, 18, LPC24XX_PIN_FUNCTION_01, 1)
509#define LPC24XX_PIN_EMC_A_0_19 \
510  LPC24XX_PIN_EMC_A_0_15, \
511  LPC24XX_PIN_RANGE(4, 16, 19, LPC24XX_PIN_FUNCTION_01, 1)
512#define LPC24XX_PIN_EMC_A_0_20 \
513  LPC24XX_PIN_EMC_A_0_15, \
514  LPC24XX_PIN_RANGE(4, 16, 20, LPC24XX_PIN_FUNCTION_01, 1)
515#define LPC24XX_PIN_EMC_A_0_21 \
516  LPC24XX_PIN_EMC_A_0_15, \
517  LPC24XX_PIN_RANGE(4, 16, 21, LPC24XX_PIN_FUNCTION_01, 1)
518#define LPC24XX_PIN_EMC_A_0_22 \
519  LPC24XX_PIN_EMC_A_0_15, \
520  LPC24XX_PIN_RANGE(4, 16, 22, LPC24XX_PIN_FUNCTION_01, 1)
521#define LPC24XX_PIN_EMC_A_0_23 \
522  LPC24XX_PIN_EMC_A_0_15, \
523  LPC24XX_PIN_RANGE(4, 16, 23, LPC24XX_PIN_FUNCTION_01, 1)
524#define LPC24XX_PIN_EMC_A_0_24 \
525  LPC24XX_PIN_EMC_A_0_23, \
526  LPC24XX_PIN(5, 24, LPC24XX_PIN_FUNCTION_01, 1)
527#define LPC24XX_PIN_EMC_A_0_25 \
528  LPC24XX_PIN_EMC_A_0_23, \
529  LPC24XX_PIN_RANGE(5, 24, 25, LPC24XX_PIN_FUNCTION_01, 1)
530
531/** @} */
532
533/**
534 * @name I2C 0 Pins
535 *
536 * @{
537 */
538
539#define LPC24XX_PIN_I2C_0_SDA \
540  LPC24XX_PIN_WITH_TYPE(0, 27, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
541#define LPC24XX_PIN_I2C_0_SCL \
542  LPC24XX_PIN_WITH_TYPE(0, 28, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
543
544/** @} */
545
546/**
547 * @name I2C 1 Pins
548 *
549 * @{
550 */
551
552#define LPC24XX_PIN_I2C_1_SDA_P0_0 \
553  LPC24XX_PIN_WITH_TYPE(0, 0, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
554#define LPC24XX_PIN_I2C_1_SDA_P0_19 \
555  LPC24XX_PIN_WITH_TYPE(0, 19, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
556#define LPC24XX_PIN_I2C_1_SDA_P2_14 \
557  LPC24XX_PIN_WITH_TYPE(2, 14, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
558
559#define LPC24XX_PIN_I2C_1_SCL_P0_1 \
560  LPC24XX_PIN_WITH_TYPE(0, 1, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
561#define LPC24XX_PIN_I2C_1_SCL_P0_20 \
562  LPC24XX_PIN_WITH_TYPE(0, 20, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
563#define LPC24XX_PIN_I2C_1_SCL_P2_15 \
564  LPC24XX_PIN_WITH_TYPE(2, 15, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
565
566/** @} */
567
568/**
569 * @name I2C 2 Pins
570 *
571 * @{
572 */
573
574#define LPC24XX_PIN_I2C_2_SDA_P0_10 \
575  LPC24XX_PIN_WITH_TYPE(0, 10, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
576#define LPC24XX_PIN_I2C_2_SDA_P2_30 \
577  LPC24XX_PIN_WITH_TYPE(2, 30, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
578#define LPC24XX_PIN_I2C_2_SDA_P4_20 \
579  LPC24XX_PIN_WITH_TYPE(4, 20, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
580
581#define LPC24XX_PIN_I2C_2_SCL_P0_11 \
582  LPC24XX_PIN_WITH_TYPE(0, 11, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
583#define LPC24XX_PIN_I2C_2_SCL_P2_31 \
584  LPC24XX_PIN_WITH_TYPE(2, 31, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
585#define LPC24XX_PIN_I2C_2_SCL_P4_21 \
586  LPC24XX_PIN_WITH_TYPE(4, 21, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
587
588/** @} */
589
590/**
591 * @name I2S Pins
592 *
593 * @{
594 */
595
596#define LPC24XX_PIN_I2S_RX_CLK_P0_4 \
597  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 1)
598#define LPC24XX_PIN_I2S_RX_CLK_P0_23 \
599  LPC24XX_PIN(0, 23, LPC24XX_PIN_FUNCTION_10, 2)
600
601#define LPC24XX_PIN_I2S_RX_WS_P0_5 \
602  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 1)
603#define LPC24XX_PIN_I2S_RX_WS_P0_24 \
604  LPC24XX_PIN(0, 24, LPC24XX_PIN_FUNCTION_10, 2)
605
606#define LPC24XX_PIN_I2S_RX_SDA_P0_6 \
607  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 1)
608#define LPC24XX_PIN_I2S_RX_SDA_P0_25 \
609  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_10, 2)
610
611#define LPC24XX_PIN_I2S_TX_CLK_P0_7 \
612  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 1)
613#define LPC24XX_PIN_I2S_TX_CLK_P2_11 \
614  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_11, 3)
615
616#define LPC24XX_PIN_I2S_TX_WS_P0_8 \
617  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 1)
618#define LPC24XX_PIN_I2S_TX_WS_P2_12 \
619  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_11, 3)
620
621#define LPC24XX_PIN_I2S_TX_SDA_P0_9 \
622  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 1)
623#define LPC24XX_PIN_I2S_TX_SDA_P2_13 \
624  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_11, 3)
625
626/** @} */
627
628/**
629 * @name LCD Pins
630 *
631 * @{
632 */
633
634#define LPC24XX_PIN_LCD_PWR \
635  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_11, 7)
636#define LPC24XX_PIN_LCD_LE \
637  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_11, 7)
638#define LPC24XX_PIN_LCD_DCLK \
639  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_11, 7)
640#define LPC24XX_PIN_LCD_FP \
641  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_11, 7)
642#define LPC24XX_PIN_LCD_ENAB_M \
643  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_11, 7)
644#define LPC24XX_PIN_LCD_LP \
645  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_11, 7)
646#define LPC24XX_PIN_LCD_CLKIN \
647  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 7)
648
649#define LPC24XX_PIN_LCD_VD_0_P0_4 \
650  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 7)
651#define LPC24XX_PIN_LCD_VD_0_P2_6 \
652  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 6)
653#define LPC24XX_PIN_LCD_VD_1_P0_5 \
654  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 7)
655#define LPC24XX_PIN_LCD_VD_1_P2_7 \
656  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 6)
657#define LPC24XX_PIN_LCD_VD_2_P2_8 \
658  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 6)
659#define LPC24XX_PIN_LCD_VD_2_P4_28 \
660  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 7)
661#define LPC24XX_PIN_LCD_VD_3_P2_9 \
662  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 6)
663#define LPC24XX_PIN_LCD_VD_3_P2_12 \
664  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 5)
665#define LPC24XX_PIN_LCD_VD_3_P4_29 \
666  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 7)
667#define LPC24XX_PIN_LCD_VD_4_P2_6 \
668  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 7)
669#define LPC24XX_PIN_LCD_VD_4_P2_12 \
670  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 4)
671#define LPC24XX_PIN_LCD_VD_5_P2_7 \
672  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 7)
673#define LPC24XX_PIN_LCD_VD_5_P2_13 \
674  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 5)
675#define LPC24XX_PIN_LCD_VD_6_P1_20 \
676  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 6)
677#define LPC24XX_PIN_LCD_VD_6_P2_8 \
678  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 7)
679#define LPC24XX_PIN_LCD_VD_6_P4_28 \
680  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 5)
681#define LPC24XX_PIN_LCD_VD_7_P1_21 \
682  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 6)
683#define LPC24XX_PIN_LCD_VD_7_P2_9 \
684  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 7)
685#define LPC24XX_PIN_LCD_VD_7_P4_29 \
686  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 5)
687#define LPC24XX_PIN_LCD_VD_8_P0_6 \
688  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 7)
689#define LPC24XX_PIN_LCD_VD_8_P1_22 \
690  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 6)
691#define LPC24XX_PIN_LCD_VD_8_P2_12 \
692  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 6)
693#define LPC24XX_PIN_LCD_VD_9_P0_7 \
694  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 7)
695#define LPC24XX_PIN_LCD_VD_9_P1_23 \
696  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 6)
697#define LPC24XX_PIN_LCD_VD_9_P2_13 \
698  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 6)
699#define LPC24XX_PIN_LCD_VD_10_P1_20 \
700  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 7)
701#define LPC24XX_PIN_LCD_VD_10_P1_24 \
702  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 6)
703#define LPC24XX_PIN_LCD_VD_10_P4_28 \
704  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 6)
705#define LPC24XX_PIN_LCD_VD_11_P1_21 \
706  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 7)
707#define LPC24XX_PIN_LCD_VD_11_P1_25 \
708  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 6)
709#define LPC24XX_PIN_LCD_VD_11_P4_29 \
710  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 6)
711#define LPC24XX_PIN_LCD_VD_12_P1_22 \
712  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 7)
713#define LPC24XX_PIN_LCD_VD_12_P1_26 \
714  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 6)
715#define LPC24XX_PIN_LCD_VD_13_P1_23 \
716  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 7)
717#define LPC24XX_PIN_LCD_VD_13_P1_27 \
718  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 6)
719#define LPC24XX_PIN_LCD_VD_14_P1_24 \
720  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 7)
721#define LPC24XX_PIN_LCD_VD_14_P1_28 \
722  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 6)
723#define LPC24XX_PIN_LCD_VD_15_P1_25 \
724  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 7)
725#define LPC24XX_PIN_LCD_VD_15_P1_29 \
726  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 6)
727#define LPC24XX_PIN_LCD_VD_16_P0_8 \
728  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 7)
729#define LPC24XX_PIN_LCD_VD_17_P0_9 \
730  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 7)
731#define LPC24XX_PIN_LCD_VD_18_P2_12 \
732  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 7)
733#define LPC24XX_PIN_LCD_VD_19_P2_13 \
734  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 7)
735#define LPC24XX_PIN_LCD_VD_20_P1_26 \
736  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 7)
737#define LPC24XX_PIN_LCD_VD_21_P1_27 \
738  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 7)
739#define LPC24XX_PIN_LCD_VD_22_P1_28 \
740  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 7)
741#define LPC24XX_PIN_LCD_VD_23_P1_29 \
742  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 7)
743
744/** @} */
745
746/**
747 * @name PWM 0 Pins
748 *
749 * @{
750 */
751
752#define LPC24XX_PIN_PWM_0_CHANNEL_1_P1_2 \
753  LPC24XX_PIN(1, 2, LPC24XX_PIN_FUNCTION_11, 3)
754#define LPC24XX_PIN_PWM_0_CHANNEL_1_P3_16 \
755  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_10, 2)
756
757#define LPC24XX_PIN_PWM_0_CHANNEL_2_P1_3 \
758  LPC24XX_PIN(1, 3, LPC24XX_PIN_FUNCTION_11, 3)
759#define LPC24XX_PIN_PWM_0_CHANNEL_2_P3_17 \
760  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_10, 2)
761
762#define LPC24XX_PIN_PWM_0_CHANNEL_3_P1_5 \
763  LPC24XX_PIN(1, 5, LPC24XX_PIN_FUNCTION_11, 3)
764#define LPC24XX_PIN_PWM_0_CHANNEL_3_P3_18 \
765  LPC24XX_PIN(3, 18, LPC24XX_PIN_FUNCTION_10, 2)
766
767#define LPC24XX_PIN_PWM_0_CHANNEL_4_P1_6 \
768  LPC24XX_PIN(1, 6, LPC24XX_PIN_FUNCTION_11, 3)
769#define LPC24XX_PIN_PWM_0_CHANNEL_4_P3_19 \
770  LPC24XX_PIN(3, 19, LPC24XX_PIN_FUNCTION_10, 2)
771
772#define LPC24XX_PIN_PWM_0_CHANNEL_5_P1_7 \
773  LPC24XX_PIN(1, 7, LPC24XX_PIN_FUNCTION_11, 3)
774#define LPC24XX_PIN_PWM_0_CHANNEL_5_P3_20 \
775  LPC24XX_PIN(3, 20, LPC24XX_PIN_FUNCTION_10, 2)
776
777#define LPC24XX_PIN_PWM_0_CHANNEL_6_P1_11 \
778  LPC24XX_PIN(1, 11, LPC24XX_PIN_FUNCTION_11, 3)
779#define LPC24XX_PIN_PWM_0_CHANNEL_6_P3_21 \
780  LPC24XX_PIN(3, 21, LPC24XX_PIN_FUNCTION_10, 2)
781
782#define LPC24XX_PIN_PWM_0_CAPTURE_0_P1_12 \
783  LPC24XX_PIN(1, 12, LPC24XX_PIN_FUNCTION_11, 3)
784#define LPC24XX_PIN_PWM_0_CAPTURE_0_P3_22 \
785  LPC24XX_PIN(3, 22, LPC24XX_PIN_FUNCTION_10, 2)
786
787/** @} */
788
789/**
790 * @name PWM 1 Pins
791 *
792 * @{
793 */
794
795#define LPC24XX_PIN_PWM_1_CHANNEL_1_P1_18 \
796  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_10, 2)
797#define LPC24XX_PIN_PWM_1_CHANNEL_1_P2_0 \
798  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_01, 1)
799#define LPC24XX_PIN_PWM_1_CHANNEL_1_P3_24 \
800  LPC24XX_PIN(3, 24, LPC24XX_PIN_FUNCTION_11, 2)
801
802#define LPC24XX_PIN_PWM_1_CHANNEL_2_P1_20 \
803  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_10, 2)
804#define LPC24XX_PIN_PWM_1_CHANNEL_2_P2_1 \
805  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_01, 1)
806#define LPC24XX_PIN_PWM_1_CHANNEL_2_P3_25 \
807  LPC24XX_PIN(3, 25, LPC24XX_PIN_FUNCTION_11, 2)
808
809#define LPC24XX_PIN_PWM_1_CHANNEL_3_P1_21 \
810  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_10, 2)
811#define LPC24XX_PIN_PWM_1_CHANNEL_3_P2_2 \
812  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_01, 1)
813#define LPC24XX_PIN_PWM_1_CHANNEL_3_P3_26 \
814  LPC24XX_PIN(3, 26, LPC24XX_PIN_FUNCTION_11, 2)
815
816#define LPC24XX_PIN_PWM_1_CHANNEL_4_P1_23 \
817  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_10, 2)
818#define LPC24XX_PIN_PWM_1_CHANNEL_4_P2_3 \
819  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_01, 1)
820#define LPC24XX_PIN_PWM_1_CHANNEL_4_P3_27 \
821  LPC24XX_PIN(3, 27, LPC24XX_PIN_FUNCTION_11, 2)
822
823#define LPC24XX_PIN_PWM_1_CHANNEL_5_P1_24 \
824  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_10, 2)
825#define LPC24XX_PIN_PWM_1_CHANNEL_5_P2_4 \
826  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_01, 1)
827#define LPC24XX_PIN_PWM_1_CHANNEL_5_P3_28 \
828  LPC24XX_PIN(3, 28, LPC24XX_PIN_FUNCTION_11, 2)
829
830#define LPC24XX_PIN_PWM_1_CHANNEL_6_P1_26 \
831  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_10, 2)
832#define LPC24XX_PIN_PWM_1_CHANNEL_6_P2_5 \
833  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_01, 1)
834#define LPC24XX_PIN_PWM_1_CHANNEL_6_P3_29 \
835  LPC24XX_PIN(3, 29, LPC24XX_PIN_FUNCTIO9_11, 2)
836
837#define LPC24XX_PIN_PWM_1_CAPTURE_0_P1_28 \
838  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_10, 2)
839#define LPC24XX_PIN_PWM_1_CAPTURE_0_P2_7 \
840  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_01, 1)
841#define LPC24XX_PIN_PWM_1_CAPTURE_0_P3_23 \
842  LPC24XX_PIN(3, 23, LPC24XX_PIN_FUNCTION_11, 2)
843
844#define LPC24XX_PIN_PWM_1_CAPTURE_1_P1_29 \
845  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_10, 2)
846
847/** @} */
848
849#ifdef ARM_MULTILIB_ARCH_V4
850
851/**
852 * @name SPI Pins
853 *
854 * @{
855 */
856
857#define LPC24XX_PIN_SPI_SCK \
858  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_11)
859#define LPC24XX_PIN_SPI_SSEL \
860  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_11)
861#define LPC24XX_PIN_SPI_MISO \
862  LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_11)
863#define LPC24XX_PIN_SPI_MOSI \
864  LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_11)
865
866/** @} */
867
868#endif /* ARM_MULTILIB_ARCH_V4 */
869
870/**
871 * @name SSP 0 Pins
872 *
873 * @{
874 */
875
876#define LPC24XX_PIN_SSP_0_SCK_P0_15 \
877  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_10, 2)
878#define LPC24XX_PIN_SSP_0_SCK_P1_20 \
879  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_11, 5)
880#define LPC24XX_PIN_SSP_0_SCK_P2_22 \
881  LPC24XX_PIN(2, 22, LPC24XX_PIN_FUNCTION_11, 2)
882
883#define LPC24XX_PIN_SSP_0_SSEL_P0_16 \
884  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_10, 2)
885#define LPC24XX_PIN_SSP_0_SSEL_P1_21 \
886  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_11, 3)
887#define LPC24XX_PIN_SSP_0_SSEL_P2_23 \
888  LPC24XX_PIN(2, 23, LPC24XX_PIN_FUNCTION_11, 2)
889
890#define LPC24XX_PIN_SSP_0_MISO_P0_17 \
891  LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_10, 2)
892#define LPC24XX_PIN_SSP_0_MISO_P1_23 \
893  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_11, 5)
894#define LPC24XX_PIN_SSP_0_MISO_P2_26 \
895  LPC24XX_PIN(2, 26, LPC24XX_PIN_FUNCTION_11, 2)
896
897#define LPC24XX_PIN_SSP_0_MOSI_P0_18 \
898  LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_10, 2)
899#define LPC24XX_PIN_SSP_0_MOSI_P1_24 \
900  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_11, 5)
901#define LPC24XX_PIN_SSP_0_MOSI_P2_27 \
902  LPC24XX_PIN(2, 27, LPC24XX_PIN_FUNCTION_11, 2)
903
904/** @} */
905
906/**
907 * @name SSP 1 Pins
908 *
909 * @{
910 */
911
912#define LPC24XX_PIN_SSP_1_SCK_P0_6 \
913  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_10, 2)
914#define LPC24XX_PIN_SSP_1_SCK_P0_12 \
915  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_10, 2)
916#define LPC24XX_PIN_SSP_1_SCK_P4_20 \
917  LPC24XX_PIN(4, 20, LPC24XX_PIN_FUNCTION_11, 3)
918
919#define LPC24XX_PIN_SSP_1_SSEL_P0_7 \
920  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_10, 2)
921#define LPC24XX_PIN_SSP_1_SSEL_P0_13 \
922  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_11, 2)
923#define LPC24XX_PIN_SSP_1_SSEL_P4_21 \
924  LPC24XX_PIN(4, 21, LPC24XX_PIN_FUNCTION_11, 3)
925
926#define LPC24XX_PIN_SSP_1_MISO_P0_8 \
927  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_10, 2)
928#define LPC24XX_PIN_SSP_1_MISO_P0_14 \
929  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_10, 2)
930#define LPC24XX_PIN_SSP_1_MISO_P4_22 \
931  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_11, 3)
932
933#define LPC24XX_PIN_SSP_1_MOSI_P0_9 \
934  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_10, 2)
935#define LPC24XX_PIN_SSP_1_MOSI_P1_31 \
936  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_10, 2)
937#define LPC24XX_PIN_SSP_1_MOSI_P4_23 \
938  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_11, 3)
939
940/** @} */
941
942#ifdef ARM_MULTILIB_ARCH_V7M
943
944/**
945 * @name SSP 2 Pins
946 *
947 * @{
948 */
949
950#define LPC24XX_PIN_SSP_2_SCK_P1_0 \
951  LPC24XX_PIN(1, 0, LPC24XX_PIN_FUNCTION_00, 4)
952
953#define LPC24XX_PIN_SSP_2_SSEL_P1_8 \
954  LPC24XX_PIN(1, 8, LPC24XX_PIN_FUNCTION_00, 4)
955
956#define LPC24XX_PIN_SSP_2_MISO_P1_4 \
957  LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_00, 4)
958
959#define LPC24XX_PIN_SSP_2_MOSI_P1_1 \
960  LPC24XX_PIN(1, 1, LPC24XX_PIN_FUNCTION_00, 4)
961
962/** @} */
963
964#endif /* ARM_MULTILIB_ARCH_V7M */
965
966/**
967 * @name UART 0 Pins
968 *
969 * @{
970 */
971
972#define LPC24XX_PIN_UART_0_TXD \
973  LPC24XX_PIN(0, 2, LPC24XX_PIN_FUNCTION_01, 1)
974
975#define LPC24XX_PIN_UART_0_RXD \
976  LPC24XX_PIN(0, 3, LPC24XX_PIN_FUNCTION_01, 1)
977
978/** @} */
979
980/**
981 * @name UART 1 Pins
982 *
983 * @{
984 */
985
986#define LPC24XX_PIN_UART_1_TXD_P0_15 \
987  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_01, 1)
988#define LPC24XX_PIN_UART_1_TXD_P2_0 \
989  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_10, 2)
990#define LPC24XX_PIN_UART_1_TXD_P3_16 \
991  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_11, 3)
992
993#define LPC24XX_PIN_UART_1_RXD_P0_16 \
994  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_01, 1)
995#define LPC24XX_PIN_UART_1_RXD_P2_1 \
996  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_10, 2)
997#define LPC24XX_PIN_UART_1_RXD_P3_17 \
998  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_11, 3)
999
1000/** @} */
1001
1002/**
1003 * @name UART 2 Pins
1004 *
1005 * @{
1006 */
1007
1008#define LPC24XX_PIN_UART_2_TXD_P0_10 \
1009  LPC24XX_PIN(0, 10, LPC24XX_PIN_FUNCTION_01, 1)
1010#define LPC24XX_PIN_UART_2_TXD_P2_8 \
1011  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_10, 2)
1012#define LPC24XX_PIN_UART_2_TXD_P4_22 \
1013  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_10, 2)
1014
1015#define LPC24XX_PIN_UART_2_RXD_P0_11 \
1016  LPC24XX_PIN(0, 11, LPC24XX_PIN_FUNCTION_01, 1)
1017#define LPC24XX_PIN_UART_2_RXD_P2_9 \
1018  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_10, 2)
1019#define LPC24XX_PIN_UART_2_RXD_P4_23 \
1020  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_10, 2)
1021
1022/** @} */
1023
1024/**
1025 * @name UART 3 Pins
1026 *
1027 * @{
1028 */
1029
1030#define LPC24XX_PIN_UART_3_TXD_P0_0 \
1031  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_10, 2)
1032#define LPC24XX_PIN_UART_3_TXD_P0_25 \
1033  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_11, 3)
1034#define LPC24XX_PIN_UART_3_TXD_P4_28 \
1035  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_11, 2)
1036
1037#define LPC24XX_PIN_UART_3_RXD_P0_1 \
1038  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_10, 2)
1039#define LPC24XX_PIN_UART_3_RXD_P0_26 \
1040  LPC24XX_PIN(0, 26, LPC24XX_PIN_FUNCTION_11, 3)
1041#define LPC24XX_PIN_UART_3_RXD_P4_29 \
1042  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_11, 2)
1043
1044/** @} */
1045
1046#ifdef ARM_MULTILIB_ARCH_V7M
1047
1048/**
1049 * @name UART 4 Pins
1050 *
1051 * @{
1052 */
1053
1054#define LPC24XX_PIN_UART_4_TXD_P0_22 \
1055  LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_00, 3)
1056#define LPC24XX_PIN_UART_4_TXD_P1_29 \
1057  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_00, 5)
1058#define LPC24XX_PIN_UART_4_TXD_P5_4 \
1059  LPC24XX_PIN(5, 4, LPC24XX_PIN_FUNCTION_00, 4)
1060
1061#define LPC24XX_PIN_UART_4_RXD_P2_9 \
1062  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_00, 3)
1063#define LPC24XX_PIN_UART_4_RXD_P5_3 \
1064  LPC24XX_PIN(5, 3, LPC24XX_PIN_FUNCTION_00, 4)
1065
1066#define LPC24XX_PIN_UART_4_OE_P0_21 \
1067  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 3)
1068
1069#define LPC24XX_PIN_UART_4_SCLK_P0_21 \
1070  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 5)
1071
1072#endif /* ARM_MULTILIB_ARCH_V7M */
1073
1074/** @} */
1075
1076/**
1077 * @name USB Port 1 Pins
1078 *
1079 * @{
1080 */
1081
1082#define LPC24XX_PIN_USB_D_PLUS_1\
1083  LPC24XX_PIN(0, 29, LPC24XX_PIN_FUNCTION_01, 1)
1084#define LPC24XX_PIN_USB_D_MINUS_1\
1085  LPC24XX_PIN(0, 30, LPC24XX_PIN_FUNCTION_01, 1)
1086#define LPC24XX_PIN_USB_UP_LED_1\
1087  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_01, 1)
1088#define LPC24XX_PIN_USB_TX_E_1\
1089  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_01, 1)
1090#define LPC24XX_PIN_USB_PPWR_1\
1091  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_10, 2)
1092#define LPC24XX_PIN_USB_TX_DP_1\
1093  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 1)
1094#define LPC24XX_PIN_USB_TX_DM_1\
1095  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 1)
1096#define LPC24XX_PIN_USB_RCV_1\
1097  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 1)
1098#define LPC24XX_PIN_USB_PWRD_1\
1099  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_10, 2)
1100#define LPC24XX_PIN_USB_RX_DP_1\
1101  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 1)
1102#define LPC24XX_PIN_USB_RX_DM_1\
1103  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 1)
1104#define LPC24XX_PIN_USB_LS_1\
1105  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 1)
1106#define LPC24XX_PIN_USB_HSTEN_1\
1107  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_10, 2)
1108#define LPC24XX_PIN_USB_SSPND_1\
1109  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 1)
1110#define LPC24XX_PIN_USB_INT_1\
1111  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 1)
1112#define LPC24XX_PIN_USB_OVRCR_1\
1113  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2)
1114#define LPC24XX_PIN_USB_SCL_1\
1115  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1)
1116#define LPC24XX_PIN_USB_SDA_1 \
1117  LPC24XX_PIN_WITH_TYPE( \
1118    1, 29, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_OPEN_DRAIN \
1119  )
1120#define LPC24XX_PIN_USB_CONNECT_1\
1121  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1)
1122
1123/** @} */
1124
1125/**
1126 * @name USB Port 2 Pins
1127 *
1128 * @{
1129 */
1130
1131#define LPC24XX_PIN_USB_PPWR_2\
1132  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_01, 1)
1133#define LPC24XX_PIN_USB_UP_LED_2\
1134  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_01, 1)
1135#define LPC24XX_PIN_USB_HSTEN_2\
1136  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 1)
1137#define LPC24XX_PIN_USB_CONNECT_2\
1138  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 3)
1139#define LPC24XX_PIN_USB_D_PLUS_2\
1140  LPC24XX_PIN(0, 31, LPC24XX_PIN_FUNCTION_01, 1)
1141#define LPC24XX_PIN_USB_PWRD_2\
1142  LPC24XX_PIN(1, 30, LPC24XX_PIN_FUNCTION_01, 1)
1143#define LPC24XX_PIN_USB_OVRCR_2\
1144  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_01, 1)
1145
1146/** @} */
1147
1148/** @} */
1149
1150#ifdef __cplusplus
1151}
1152#endif /* __cplusplus */
1153
1154#endif /* LIBBSP_ARM_LPC24XX_IO_H */
Note: See TracBrowser for help on using the repository browser.