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

Last change on this file since cf5d5d80 was 50d8d32, checked in by Sebastian Huber <sebastian.huber@…>, on May 9, 2019 at 7:54:48 AM

bsp/lpc24xx: Use fast slew rate for EMC pins

  • Property mode set to 100644
File size: 32.0 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup RTEMSBSPsARMLPC24XX_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 RTEMSBSPsARMLPC24XX
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_FAST_SLEW_RATE
246} lpc17xx_pin_type;
247
248#ifdef ARM_MULTILIB_ARCH_V4
249  #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f0, 0, 0 } }
250  #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f0, t, 0 } }
251  #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
252    { { p, i, f0, 0, 0 } }, { { p, j, f0, 0, 1 } }
253  #define LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, f0, f1, t) \
254    { { p, i, f0, t, 0 } }, { { p, j, f0, t, 1 } }
255#else
256  #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f1, 0, 0 } }
257  #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f1, t, 0 } }
258  #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
259    { { p, i, f1, 0, 0 } }, { { p, j, f1, 0, 1 } }
260  #define LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, f0, f1, t) \
261    { { p, i, f1, t, 0 } }, { { p, j, f1, t, 1 } }
262#endif
263
264#define LPC24XX_PIN_TERMINAL { { 0x7, 0x1f, 0x7, 0xf, 0x1 } }
265
266/**
267 * @brief Performs the @a action with the @a pins
268 *
269 * @code
270 * #include <assert.h>
271 * #include <bsp/io.h>
272 *
273 * void example(void)
274 * {
275 *   static const lpc24xx_pin_range pins [] = {
276 *     LPC24XX_PIN_I2S_RX_CLK_P0_4,
277 *     LPC24XX_PIN_I2S_RX_WS_P0_5,
278 *     LPC24XX_PIN_I2S_RX_SDA_P0_6,
279 *     LPC24XX_PIN_I2S_TX_CLK_P0_7,
280 *     LPC24XX_PIN_I2S_TX_WS_P0_8,
281 *     LPC24XX_PIN_I2S_TX_SDA_P0_9,
282 *     LPC24XX_PIN_TERMINAL
283 *   };
284 *   rtems_status_code sc = RTEMS_SUCCESSFUL;
285 *
286 *   sc = lpc24xx_module_enable(LPC24XX_MODULE_I2S, LPC24XX_MODULE_CCLK_8);
287 *   assert(sc == RTEMS_SUCCESSFUL);
288 *   sc = lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
289 *   assert(sc == RTEMS_SUCCESSFUL);
290 * }
291 * @endcode
292 *
293 * @retval RTEMS_SUCCESSFUL Successful operation.
294 * @retval RTEMS_IO_ERROR Check failed.
295 * @retval RTEMS_NOT_DEFINED Invalid action.
296 */
297rtems_status_code lpc24xx_pin_config(
298  const lpc24xx_pin_range *pins,
299  lpc24xx_pin_action action
300);
301
302/**
303 * @brief Returns the first pin index of a pin range.
304 */
305static inline unsigned lpc24xx_pin_get_first_index(
306  const lpc24xx_pin_range *range
307)
308{
309  return LPC24XX_IO_INDEX_BY_PORT(range->fields.port, range->fields.port_bit);
310}
311
312/**
313 * @name ADC Pins
314 *
315 * @{
316 */
317
318#define LPC24XX_PIN_ADC_CHANNEL_0 \
319  LPC24XX_PIN_WITH_TYPE(0, 23, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
320#define LPC24XX_PIN_ADC_CHANNEL_1 \
321  LPC24XX_PIN_WITH_TYPE(0, 24, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
322#define LPC24XX_PIN_ADC_CHANNEL_2 \
323  LPC24XX_PIN_WITH_TYPE(0, 25, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
324#define LPC24XX_PIN_ADC_CHANNEL_3 \
325  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
326#define LPC24XX_PIN_ADC_CHANNEL_4 \
327  LPC24XX_PIN_WITH_TYPE(1, 30, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
328#define LPC24XX_PIN_ADC_CHANNEL_5 \
329  LPC24XX_PIN_WITH_TYPE(1, 31, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
330#define LPC24XX_PIN_ADC_CHANNEL_6 \
331  LPC24XX_PIN_WITH_TYPE(0, 12, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
332#define LPC24XX_PIN_ADC_CHANNEL_7 \
333  LPC24XX_PIN_WITH_TYPE(0, 13, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
334
335/** @} */
336
337/**
338 * @name CAN 0 Pins
339 *
340 * @{
341 */
342
343#define LPC24XX_PIN_CAN_0_RD_P0_0 \
344  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_01, 1)
345
346#define LPC24XX_PIN_CAN_0_RD_P0_21 \
347  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_11, 4)
348
349#define LPC24XX_PIN_CAN_0_TD_P0_1 \
350  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_01, 1)
351
352#define LPC24XX_PIN_CAN_0_TD_P0_22 \
353  LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_11, 4)
354
355/** @} */
356
357/**
358 * @name CAN 1 Pins
359 *
360 * @{
361 */
362
363#define LPC24XX_PIN_CAN_1_RD_P0_4 \
364  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_10, 2)
365
366#define LPC24XX_PIN_CAN_1_RD_P2_7 \
367  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_01, 1)
368
369#define LPC24XX_PIN_CAN_1_TD_P0_5 \
370  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_10, 2)
371
372#define LPC24XX_PIN_CAN_1_TD_P2_8 \
373  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_01, 1)
374
375/** @} */
376
377/**
378 * @name DAC Pins
379 *
380 * @{
381 */
382
383#define LPC24XX_PIN_DAC \
384  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_DAC)
385
386/** @} */
387
388/**
389 * @name Ethernet Pins
390 *
391 * @{
392 */
393
394#define LPC24XX_PIN_ETHERNET_MII \
395  LPC24XX_PIN_RANGE(1, 0, 17, LPC24XX_PIN_FUNCTION_01, 1)
396
397#define LPC24XX_PIN_ETHERNET_RMII_0 \
398  LPC24XX_PIN_RANGE(1, 0, 1, LPC24XX_PIN_FUNCTION_01, 1)
399#define LPC24XX_PIN_ETHERNET_RMII_1 \
400  LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_01, 1)
401#define LPC24XX_PIN_ETHERNET_RMII_2 \
402  LPC24XX_PIN_RANGE(1, 8, 10, LPC24XX_PIN_FUNCTION_01, 1)
403#define LPC24XX_PIN_ETHERNET_RMII_3 \
404  LPC24XX_PIN_RANGE(1, 14, 17, LPC24XX_PIN_FUNCTION_01, 1)
405
406/** @} */
407
408/**
409 * @name External Interrupt Pins
410 *
411 * @{
412 */
413
414#define LPC24XX_PIN_EINT_0 \
415  LPC24XX_PIN(2, 10, LPC24XX_PIN_FUNCTION_01, 1)
416#define LPC24XX_PIN_EINT_1 \
417  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 1)
418#define LPC24XX_PIN_EINT_2 \
419  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 1)
420#define LPC24XX_PIN_EINT_3 \
421  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 1)
422
423/** @} */
424
425/**
426 * @name External Memory Controller (EMC) Pins
427 *
428 * @{
429 */
430
431#define LPC24XX_PIN_EMC(p, i) \
432  LPC24XX_PIN_WITH_TYPE(p, i, LPC24XX_PIN_FUNCTION_01, 1, \
433    LPC17XX_PIN_TYPE_FAST_SLEW_RATE)
434
435#define LPC24XX_PIN_EMC_RANGE(p, i, j) \
436  LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, LPC24XX_PIN_FUNCTION_01, 1, \
437    LPC17XX_PIN_TYPE_FAST_SLEW_RATE)
438
439#define LPC24XX_PIN_EMC_CS_0 LPC24XX_PIN_EMC(4, 30)
440#define LPC24XX_PIN_EMC_CS_1 LPC24XX_PIN_EMC(4, 31)
441#define LPC24XX_PIN_EMC_CS_2 LPC24XX_PIN_EMC(2, 14)
442#define LPC24XX_PIN_EMC_CS_3 LPC24XX_PIN_EMC(2, 15)
443
444#define LPC24XX_PIN_EMC_DYCS_0 LPC24XX_PIN_EMC(2, 20)
445#define LPC24XX_PIN_EMC_DYCS_1 LPC24XX_PIN_EMC(2, 21)
446#define LPC24XX_PIN_EMC_DYCS_2 LPC24XX_PIN_EMC(2, 22)
447#define LPC24XX_PIN_EMC_DYCS_3 LPC24XX_PIN_EMC(2, 23)
448
449#define LPC24XX_PIN_EMC_OE LPC24XX_PIN_EMC(4, 24)
450#define LPC24XX_PIN_EMC_WE LPC24XX_PIN_EMC(4, 25)
451#define LPC24XX_PIN_EMC_CAS LPC24XX_PIN_EMC(2, 16)
452#define LPC24XX_PIN_EMC_RAS LPC24XX_PIN_EMC(2, 17)
453
454#define LPC24XX_PIN_EMC_CLK_0 LPC24XX_PIN_EMC(2, 18)
455#define LPC24XX_PIN_EMC_CLK_1 LPC24XX_PIN_EMC(2, 19)
456
457#define LPC24XX_PIN_EMC_CKE_0 LPC24XX_PIN_EMC(2, 24)
458#define LPC24XX_PIN_EMC_CKE_1 LPC24XX_PIN_EMC(2, 25)
459#define LPC24XX_PIN_EMC_CKE_2 LPC24XX_PIN_EMC(2, 26)
460#define LPC24XX_PIN_EMC_CKE_3 LPC24XX_PIN_EMC(2, 27)
461
462#define LPC24XX_PIN_EMC_DQM_0 LPC24XX_PIN_EMC(2, 28)
463#define LPC24XX_PIN_EMC_DQM_1 LPC24XX_PIN_EMC(2, 29)
464#define LPC24XX_PIN_EMC_DQM_2 LPC24XX_PIN_EMC(2, 30)
465#define LPC24XX_PIN_EMC_DQM_3 LPC24XX_PIN_EMC(2, 31)
466
467#define LPC24XX_PIN_EMC_BLS0 LPC24XX_PIN_EMC(4, 26)
468#define LPC24XX_PIN_EMC_BLS1 LPC24XX_PIN_EMC(4, 27)
469#define LPC24XX_PIN_EMC_BLS2 LPC24XX_PIN_EMC(4, 28)
470#define LPC24XX_PIN_EMC_BLS3 LPC24XX_PIN_EMC(4, 29)
471
472#define LPC24XX_PIN_EMC_D_0_15 LPC24XX_PIN_EMC_RANGE(3, 0, 15)
473#define LPC24XX_PIN_EMC_D_15_31 LPC24XX_PIN_EMC_RANGE(3, 15, 31)
474#define LPC24XX_PIN_EMC_D_0_31 LPC24XX_PIN_EMC_RANGE(3, 0, 31)
475
476#define LPC24XX_PIN_EMC_A_0_12 LPC24XX_PIN_EMC_RANGE(4, 0, 12)
477#define LPC24XX_PIN_EMC_A_0_13 LPC24XX_PIN_EMC_RANGE(4, 0, 13)
478#define LPC24XX_PIN_EMC_A_0_14 LPC24XX_PIN_EMC_RANGE(4, 0, 14)
479#define LPC24XX_PIN_EMC_A_0_15 LPC24XX_PIN_EMC_RANGE(4, 0, 15)
480#define LPC24XX_PIN_EMC_A_0_16 \
481  LPC24XX_PIN_EMC_A_0_15, \
482  LPC24XX_PIN_EMC(4, 16)
483#define LPC24XX_PIN_EMC_A_0_17 \
484  LPC24XX_PIN_EMC_A_0_15, \
485  LPC24XX_PIN_EMC_RANGE(4, 16, 17)
486#define LPC24XX_PIN_EMC_A_0_18 \
487  LPC24XX_PIN_EMC_A_0_15, \
488  LPC24XX_PIN_EMC_RANGE(4, 16, 18)
489#define LPC24XX_PIN_EMC_A_0_19 \
490  LPC24XX_PIN_EMC_A_0_15, \
491  LPC24XX_PIN_EMC_RANGE(4, 16, 19)
492#define LPC24XX_PIN_EMC_A_0_20 \
493  LPC24XX_PIN_EMC_A_0_15, \
494  LPC24XX_PIN_EMC_RANGE(4, 16, 20)
495#define LPC24XX_PIN_EMC_A_0_21 \
496  LPC24XX_PIN_EMC_A_0_15, \
497  LPC24XX_PIN_EMC_RANGE(4, 16, 21)
498#define LPC24XX_PIN_EMC_A_0_22 \
499  LPC24XX_PIN_EMC_A_0_15, \
500  LPC24XX_PIN_EMC_RANGE(4, 16, 22)
501#define LPC24XX_PIN_EMC_A_0_23 \
502  LPC24XX_PIN_EMC_A_0_15, \
503  LPC24XX_PIN_EMC_RANGE(4, 16, 23)
504#define LPC24XX_PIN_EMC_A_0_24 \
505  LPC24XX_PIN_EMC_A_0_23, \
506  LPC24XX_PIN_EMC(5, 24)
507#define LPC24XX_PIN_EMC_A_0_25 \
508  LPC24XX_PIN_EMC_A_0_23, \
509  LPC24XX_PIN_EMC_RANGE(5, 24, 25)
510
511/** @} */
512
513/**
514 * @name I2C 0 Pins
515 *
516 * @{
517 */
518
519#define LPC24XX_PIN_I2C_0_SDA \
520  LPC24XX_PIN_WITH_TYPE(0, 27, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
521#define LPC24XX_PIN_I2C_0_SCL \
522  LPC24XX_PIN_WITH_TYPE(0, 28, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
523
524/** @} */
525
526/**
527 * @name I2C 1 Pins
528 *
529 * @{
530 */
531
532#define LPC24XX_PIN_I2C_1_SDA_P0_0 \
533  LPC24XX_PIN_WITH_TYPE(0, 0, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
534#define LPC24XX_PIN_I2C_1_SDA_P0_19 \
535  LPC24XX_PIN_WITH_TYPE(0, 19, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
536#define LPC24XX_PIN_I2C_1_SDA_P2_14 \
537  LPC24XX_PIN_WITH_TYPE(2, 14, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
538
539#define LPC24XX_PIN_I2C_1_SCL_P0_1 \
540  LPC24XX_PIN_WITH_TYPE(0, 1, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
541#define LPC24XX_PIN_I2C_1_SCL_P0_20 \
542  LPC24XX_PIN_WITH_TYPE(0, 20, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
543#define LPC24XX_PIN_I2C_1_SCL_P2_15 \
544  LPC24XX_PIN_WITH_TYPE(2, 15, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
545
546/** @} */
547
548/**
549 * @name I2C 2 Pins
550 *
551 * @{
552 */
553
554#define LPC24XX_PIN_I2C_2_SDA_P0_10 \
555  LPC24XX_PIN_WITH_TYPE(0, 10, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
556#define LPC24XX_PIN_I2C_2_SDA_P2_30 \
557  LPC24XX_PIN_WITH_TYPE(2, 30, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
558#define LPC24XX_PIN_I2C_2_SDA_P4_20 \
559  LPC24XX_PIN_WITH_TYPE(4, 20, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
560
561#define LPC24XX_PIN_I2C_2_SCL_P0_11 \
562  LPC24XX_PIN_WITH_TYPE(0, 11, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
563#define LPC24XX_PIN_I2C_2_SCL_P2_31 \
564  LPC24XX_PIN_WITH_TYPE(2, 31, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
565#define LPC24XX_PIN_I2C_2_SCL_P4_21 \
566  LPC24XX_PIN_WITH_TYPE(4, 21, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
567
568/** @} */
569
570/**
571 * @name I2S Pins
572 *
573 * @{
574 */
575
576#define LPC24XX_PIN_I2S_RX_CLK_P0_4 \
577  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 1)
578#define LPC24XX_PIN_I2S_RX_CLK_P0_23 \
579  LPC24XX_PIN(0, 23, LPC24XX_PIN_FUNCTION_10, 2)
580
581#define LPC24XX_PIN_I2S_RX_WS_P0_5 \
582  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 1)
583#define LPC24XX_PIN_I2S_RX_WS_P0_24 \
584  LPC24XX_PIN(0, 24, LPC24XX_PIN_FUNCTION_10, 2)
585
586#define LPC24XX_PIN_I2S_RX_SDA_P0_6 \
587  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 1)
588#define LPC24XX_PIN_I2S_RX_SDA_P0_25 \
589  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_10, 2)
590
591#define LPC24XX_PIN_I2S_TX_CLK_P0_7 \
592  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 1)
593#define LPC24XX_PIN_I2S_TX_CLK_P2_11 \
594  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_11, 3)
595
596#define LPC24XX_PIN_I2S_TX_WS_P0_8 \
597  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 1)
598#define LPC24XX_PIN_I2S_TX_WS_P2_12 \
599  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_11, 3)
600
601#define LPC24XX_PIN_I2S_TX_SDA_P0_9 \
602  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 1)
603#define LPC24XX_PIN_I2S_TX_SDA_P2_13 \
604  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_11, 3)
605
606/** @} */
607
608/**
609 * @name LCD Pins
610 *
611 * @{
612 */
613
614#define LPC24XX_PIN_LCD_PWR \
615  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_11, 7)
616#define LPC24XX_PIN_LCD_LE \
617  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_11, 7)
618#define LPC24XX_PIN_LCD_DCLK \
619  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_11, 7)
620#define LPC24XX_PIN_LCD_FP \
621  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_11, 7)
622#define LPC24XX_PIN_LCD_ENAB_M \
623  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_11, 7)
624#define LPC24XX_PIN_LCD_LP \
625  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_11, 7)
626#define LPC24XX_PIN_LCD_CLKIN \
627  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 7)
628
629#define LPC24XX_PIN_LCD_VD_0_P0_4 \
630  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 7)
631#define LPC24XX_PIN_LCD_VD_0_P2_6 \
632  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 6)
633#define LPC24XX_PIN_LCD_VD_1_P0_5 \
634  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 7)
635#define LPC24XX_PIN_LCD_VD_1_P2_7 \
636  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 6)
637#define LPC24XX_PIN_LCD_VD_2_P2_8 \
638  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 6)
639#define LPC24XX_PIN_LCD_VD_2_P4_28 \
640  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 7)
641#define LPC24XX_PIN_LCD_VD_3_P2_9 \
642  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 6)
643#define LPC24XX_PIN_LCD_VD_3_P2_12 \
644  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 5)
645#define LPC24XX_PIN_LCD_VD_3_P4_29 \
646  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 7)
647#define LPC24XX_PIN_LCD_VD_4_P2_6 \
648  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 7)
649#define LPC24XX_PIN_LCD_VD_4_P2_12 \
650  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 4)
651#define LPC24XX_PIN_LCD_VD_5_P2_7 \
652  LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 7)
653#define LPC24XX_PIN_LCD_VD_5_P2_13 \
654  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 5)
655#define LPC24XX_PIN_LCD_VD_6_P1_20 \
656  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 6)
657#define LPC24XX_PIN_LCD_VD_6_P2_8 \
658  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 7)
659#define LPC24XX_PIN_LCD_VD_6_P4_28 \
660  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 5)
661#define LPC24XX_PIN_LCD_VD_7_P1_21 \
662  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 6)
663#define LPC24XX_PIN_LCD_VD_7_P2_9 \
664  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 7)
665#define LPC24XX_PIN_LCD_VD_7_P4_29 \
666  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 5)
667#define LPC24XX_PIN_LCD_VD_8_P0_6 \
668  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 7)
669#define LPC24XX_PIN_LCD_VD_8_P1_22 \
670  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 6)
671#define LPC24XX_PIN_LCD_VD_8_P2_12 \
672  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 6)
673#define LPC24XX_PIN_LCD_VD_9_P0_7 \
674  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 7)
675#define LPC24XX_PIN_LCD_VD_9_P1_23 \
676  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 6)
677#define LPC24XX_PIN_LCD_VD_9_P2_13 \
678  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 6)
679#define LPC24XX_PIN_LCD_VD_10_P1_20 \
680  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 7)
681#define LPC24XX_PIN_LCD_VD_10_P1_24 \
682  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 6)
683#define LPC24XX_PIN_LCD_VD_10_P4_28 \
684  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 6)
685#define LPC24XX_PIN_LCD_VD_11_P1_21 \
686  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 7)
687#define LPC24XX_PIN_LCD_VD_11_P1_25 \
688  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 6)
689#define LPC24XX_PIN_LCD_VD_11_P4_29 \
690  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 6)
691#define LPC24XX_PIN_LCD_VD_12_P1_22 \
692  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 7)
693#define LPC24XX_PIN_LCD_VD_12_P1_26 \
694  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 6)
695#define LPC24XX_PIN_LCD_VD_13_P1_23 \
696  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 7)
697#define LPC24XX_PIN_LCD_VD_13_P1_27 \
698  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 6)
699#define LPC24XX_PIN_LCD_VD_14_P1_24 \
700  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 7)
701#define LPC24XX_PIN_LCD_VD_14_P1_28 \
702  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 6)
703#define LPC24XX_PIN_LCD_VD_15_P1_25 \
704  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 7)
705#define LPC24XX_PIN_LCD_VD_15_P1_29 \
706  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 6)
707#define LPC24XX_PIN_LCD_VD_16_P0_8 \
708  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 7)
709#define LPC24XX_PIN_LCD_VD_17_P0_9 \
710  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 7)
711#define LPC24XX_PIN_LCD_VD_18_P2_12 \
712  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 7)
713#define LPC24XX_PIN_LCD_VD_19_P2_13 \
714  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 7)
715#define LPC24XX_PIN_LCD_VD_20_P1_26 \
716  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 7)
717#define LPC24XX_PIN_LCD_VD_21_P1_27 \
718  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 7)
719#define LPC24XX_PIN_LCD_VD_22_P1_28 \
720  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 7)
721#define LPC24XX_PIN_LCD_VD_23_P1_29 \
722  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 7)
723
724/** @} */
725
726/**
727 * @name PWM 0 Pins
728 *
729 * @{
730 */
731
732#define LPC24XX_PIN_PWM_0_CHANNEL_1_P1_2 \
733  LPC24XX_PIN(1, 2, LPC24XX_PIN_FUNCTION_11, 3)
734#define LPC24XX_PIN_PWM_0_CHANNEL_1_P3_16 \
735  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_10, 2)
736
737#define LPC24XX_PIN_PWM_0_CHANNEL_2_P1_3 \
738  LPC24XX_PIN(1, 3, LPC24XX_PIN_FUNCTION_11, 3)
739#define LPC24XX_PIN_PWM_0_CHANNEL_2_P3_17 \
740  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_10, 2)
741
742#define LPC24XX_PIN_PWM_0_CHANNEL_3_P1_5 \
743  LPC24XX_PIN(1, 5, LPC24XX_PIN_FUNCTION_11, 3)
744#define LPC24XX_PIN_PWM_0_CHANNEL_3_P3_18 \
745  LPC24XX_PIN(3, 18, LPC24XX_PIN_FUNCTION_10, 2)
746
747#define LPC24XX_PIN_PWM_0_CHANNEL_4_P1_6 \
748  LPC24XX_PIN(1, 6, LPC24XX_PIN_FUNCTION_11, 3)
749#define LPC24XX_PIN_PWM_0_CHANNEL_4_P3_19 \
750  LPC24XX_PIN(3, 19, LPC24XX_PIN_FUNCTION_10, 2)
751
752#define LPC24XX_PIN_PWM_0_CHANNEL_5_P1_7 \
753  LPC24XX_PIN(1, 7, LPC24XX_PIN_FUNCTION_11, 3)
754#define LPC24XX_PIN_PWM_0_CHANNEL_5_P3_20 \
755  LPC24XX_PIN(3, 20, LPC24XX_PIN_FUNCTION_10, 2)
756
757#define LPC24XX_PIN_PWM_0_CHANNEL_6_P1_11 \
758  LPC24XX_PIN(1, 11, LPC24XX_PIN_FUNCTION_11, 3)
759#define LPC24XX_PIN_PWM_0_CHANNEL_6_P3_21 \
760  LPC24XX_PIN(3, 21, LPC24XX_PIN_FUNCTION_10, 2)
761
762#define LPC24XX_PIN_PWM_0_CAPTURE_0_P1_12 \
763  LPC24XX_PIN(1, 12, LPC24XX_PIN_FUNCTION_11, 3)
764#define LPC24XX_PIN_PWM_0_CAPTURE_0_P3_22 \
765  LPC24XX_PIN(3, 22, LPC24XX_PIN_FUNCTION_10, 2)
766
767/** @} */
768
769/**
770 * @name PWM 1 Pins
771 *
772 * @{
773 */
774
775#define LPC24XX_PIN_PWM_1_CHANNEL_1_P1_18 \
776  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_10, 2)
777#define LPC24XX_PIN_PWM_1_CHANNEL_1_P2_0 \
778  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_01, 1)
779#define LPC24XX_PIN_PWM_1_CHANNEL_1_P3_24 \
780  LPC24XX_PIN(3, 24, LPC24XX_PIN_FUNCTION_11, 2)
781
782#define LPC24XX_PIN_PWM_1_CHANNEL_2_P1_20 \
783  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_10, 2)
784#define LPC24XX_PIN_PWM_1_CHANNEL_2_P2_1 \
785  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_01, 1)
786#define LPC24XX_PIN_PWM_1_CHANNEL_2_P3_25 \
787  LPC24XX_PIN(3, 25, LPC24XX_PIN_FUNCTION_11, 2)
788
789#define LPC24XX_PIN_PWM_1_CHANNEL_3_P1_21 \
790  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_10, 2)
791#define LPC24XX_PIN_PWM_1_CHANNEL_3_P2_2 \
792  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_01, 1)
793#define LPC24XX_PIN_PWM_1_CHANNEL_3_P3_26 \
794  LPC24XX_PIN(3, 26, LPC24XX_PIN_FUNCTION_11, 2)
795
796#define LPC24XX_PIN_PWM_1_CHANNEL_4_P1_23 \
797  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_10, 2)
798#define LPC24XX_PIN_PWM_1_CHANNEL_4_P2_3 \
799  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_01, 1)
800#define LPC24XX_PIN_PWM_1_CHANNEL_4_P3_27 \
801  LPC24XX_PIN(3, 27, LPC24XX_PIN_FUNCTION_11, 2)
802
803#define LPC24XX_PIN_PWM_1_CHANNEL_5_P1_24 \
804  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_10, 2)
805#define LPC24XX_PIN_PWM_1_CHANNEL_5_P2_4 \
806  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_01, 1)
807#define LPC24XX_PIN_PWM_1_CHANNEL_5_P3_28 \
808  LPC24XX_PIN(3, 28, LPC24XX_PIN_FUNCTION_11, 2)
809
810#define LPC24XX_PIN_PWM_1_CHANNEL_6_P1_26 \
811  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_10, 2)
812#define LPC24XX_PIN_PWM_1_CHANNEL_6_P2_5 \
813  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_01, 1)
814#define LPC24XX_PIN_PWM_1_CHANNEL_6_P3_29 \
815  LPC24XX_PIN(3, 29, LPC24XX_PIN_FUNCTIO9_11, 2)
816
817#define LPC24XX_PIN_PWM_1_CAPTURE_0_P1_28 \
818  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_10, 2)
819#define LPC24XX_PIN_PWM_1_CAPTURE_0_P2_7 \
820  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_01, 1)
821#define LPC24XX_PIN_PWM_1_CAPTURE_0_P3_23 \
822  LPC24XX_PIN(3, 23, LPC24XX_PIN_FUNCTION_11, 2)
823
824#define LPC24XX_PIN_PWM_1_CAPTURE_1_P1_29 \
825  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_10, 2)
826
827/** @} */
828
829#ifdef ARM_MULTILIB_ARCH_V4
830
831/**
832 * @name SPI Pins
833 *
834 * @{
835 */
836
837#define LPC24XX_PIN_SPI_SCK \
838  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_11)
839#define LPC24XX_PIN_SPI_SSEL \
840  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_11)
841#define LPC24XX_PIN_SPI_MISO \
842  LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_11)
843#define LPC24XX_PIN_SPI_MOSI \
844  LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_11)
845
846/** @} */
847
848#endif /* ARM_MULTILIB_ARCH_V4 */
849
850/**
851 * @name SSP 0 Pins
852 *
853 * @{
854 */
855
856#define LPC24XX_PIN_SSP_0_SCK_P0_15 \
857  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_10, 2)
858#define LPC24XX_PIN_SSP_0_SCK_P1_20 \
859  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_11, 5)
860#define LPC24XX_PIN_SSP_0_SCK_P2_22 \
861  LPC24XX_PIN(2, 22, LPC24XX_PIN_FUNCTION_11, 2)
862
863#define LPC24XX_PIN_SSP_0_SSEL_P0_16 \
864  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_10, 2)
865#define LPC24XX_PIN_SSP_0_SSEL_P1_21 \
866  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_11, 3)
867#define LPC24XX_PIN_SSP_0_SSEL_P2_23 \
868  LPC24XX_PIN(2, 23, LPC24XX_PIN_FUNCTION_11, 2)
869
870#define LPC24XX_PIN_SSP_0_MISO_P0_17 \
871  LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_10, 2)
872#define LPC24XX_PIN_SSP_0_MISO_P1_23 \
873  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_11, 5)
874#define LPC24XX_PIN_SSP_0_MISO_P2_26 \
875  LPC24XX_PIN(2, 26, LPC24XX_PIN_FUNCTION_11, 2)
876
877#define LPC24XX_PIN_SSP_0_MOSI_P0_18 \
878  LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_10, 2)
879#define LPC24XX_PIN_SSP_0_MOSI_P1_24 \
880  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_11, 5)
881#define LPC24XX_PIN_SSP_0_MOSI_P2_27 \
882  LPC24XX_PIN(2, 27, LPC24XX_PIN_FUNCTION_11, 2)
883
884/** @} */
885
886/**
887 * @name SSP 1 Pins
888 *
889 * @{
890 */
891
892#define LPC24XX_PIN_SSP_1_SCK_P0_6 \
893  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_10, 2)
894#define LPC24XX_PIN_SSP_1_SCK_P0_12 \
895  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_10, 2)
896#define LPC24XX_PIN_SSP_1_SCK_P4_20 \
897  LPC24XX_PIN(4, 20, LPC24XX_PIN_FUNCTION_11, 3)
898
899#define LPC24XX_PIN_SSP_1_SSEL_P0_7 \
900  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_10, 2)
901#define LPC24XX_PIN_SSP_1_SSEL_P0_13 \
902  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_11, 2)
903#define LPC24XX_PIN_SSP_1_SSEL_P4_21 \
904  LPC24XX_PIN(4, 21, LPC24XX_PIN_FUNCTION_11, 3)
905
906#define LPC24XX_PIN_SSP_1_MISO_P0_8 \
907  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_10, 2)
908#define LPC24XX_PIN_SSP_1_MISO_P0_14 \
909  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_10, 2)
910#define LPC24XX_PIN_SSP_1_MISO_P4_22 \
911  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_11, 3)
912
913#define LPC24XX_PIN_SSP_1_MOSI_P0_9 \
914  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_10, 2)
915#define LPC24XX_PIN_SSP_1_MOSI_P1_31 \
916  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_10, 2)
917#define LPC24XX_PIN_SSP_1_MOSI_P4_23 \
918  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_11, 3)
919
920/** @} */
921
922#ifdef ARM_MULTILIB_ARCH_V7M
923
924/**
925 * @name SSP 2 Pins
926 *
927 * @{
928 */
929
930#define LPC24XX_PIN_SSP_2_SCK_P1_0 \
931  LPC24XX_PIN(1, 0, LPC24XX_PIN_FUNCTION_00, 4)
932#define LPC24XX_PIN_SSP_2_SCK_P5_2 \
933  LPC24XX_PIN(5, 2, LPC24XX_PIN_FUNCTION_00, 2)
934
935#define LPC24XX_PIN_SSP_2_SSEL_P1_8 \
936  LPC24XX_PIN(1, 8, LPC24XX_PIN_FUNCTION_00, 4)
937#define LPC24XX_PIN_SSP_2_SSEL_P5_3 \
938  LPC24XX_PIN(5, 3, LPC24XX_PIN_FUNCTION_00, 2)
939
940#define LPC24XX_PIN_SSP_2_MISO_P1_4 \
941  LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_00, 4)
942#define LPC24XX_PIN_SSP_2_MISO_P5_1 \
943  LPC24XX_PIN(5, 1, LPC24XX_PIN_FUNCTION_00, 2)
944
945#define LPC24XX_PIN_SSP_2_MOSI_P1_1 \
946  LPC24XX_PIN(1, 1, LPC24XX_PIN_FUNCTION_00, 4)
947#define LPC24XX_PIN_SSP_2_MOSI_P5_0 \
948  LPC24XX_PIN(5, 0, LPC24XX_PIN_FUNCTION_00, 2)
949
950/** @} */
951
952#endif /* ARM_MULTILIB_ARCH_V7M */
953
954/**
955 * @name UART 0 Pins
956 *
957 * @{
958 */
959
960#define LPC24XX_PIN_UART_0_TXD \
961  LPC24XX_PIN(0, 2, LPC24XX_PIN_FUNCTION_01, 1)
962
963#define LPC24XX_PIN_UART_0_RXD \
964  LPC24XX_PIN(0, 3, LPC24XX_PIN_FUNCTION_01, 1)
965
966/** @} */
967
968/**
969 * @name UART 1 Pins
970 *
971 * @{
972 */
973
974#define LPC24XX_PIN_UART_1_TXD_P0_15 \
975  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_01, 1)
976#define LPC24XX_PIN_UART_1_TXD_P2_0 \
977  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_10, 2)
978#define LPC24XX_PIN_UART_1_TXD_P3_16 \
979  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_11, 3)
980
981#define LPC24XX_PIN_UART_1_RXD_P0_16 \
982  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_01, 1)
983#define LPC24XX_PIN_UART_1_RXD_P2_1 \
984  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_10, 2)
985#define LPC24XX_PIN_UART_1_RXD_P3_17 \
986  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_11, 3)
987
988/** @} */
989
990/**
991 * @name UART 2 Pins
992 *
993 * @{
994 */
995
996#define LPC24XX_PIN_UART_2_TXD_P0_10 \
997  LPC24XX_PIN(0, 10, LPC24XX_PIN_FUNCTION_01, 1)
998#define LPC24XX_PIN_UART_2_TXD_P2_8 \
999  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_10, 2)
1000#define LPC24XX_PIN_UART_2_TXD_P4_22 \
1001  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_10, 2)
1002
1003#define LPC24XX_PIN_UART_2_RXD_P0_11 \
1004  LPC24XX_PIN(0, 11, LPC24XX_PIN_FUNCTION_01, 1)
1005#define LPC24XX_PIN_UART_2_RXD_P2_9 \
1006  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_10, 2)
1007#define LPC24XX_PIN_UART_2_RXD_P4_23 \
1008  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_10, 2)
1009
1010/** @} */
1011
1012/**
1013 * @name UART 3 Pins
1014 *
1015 * @{
1016 */
1017
1018#define LPC24XX_PIN_UART_3_TXD_P0_0 \
1019  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_10, 2)
1020#define LPC24XX_PIN_UART_3_TXD_P0_25 \
1021  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_11, 3)
1022#define LPC24XX_PIN_UART_3_TXD_P4_28 \
1023  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_11, 2)
1024
1025#define LPC24XX_PIN_UART_3_RXD_P0_1 \
1026  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_10, 2)
1027#define LPC24XX_PIN_UART_3_RXD_P0_26 \
1028  LPC24XX_PIN(0, 26, LPC24XX_PIN_FUNCTION_11, 3)
1029#define LPC24XX_PIN_UART_3_RXD_P4_29 \
1030  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_11, 2)
1031
1032/** @} */
1033
1034#ifdef ARM_MULTILIB_ARCH_V7M
1035
1036/**
1037 * @name UART 4 Pins
1038 *
1039 * @{
1040 */
1041
1042#define LPC24XX_PIN_UART_4_TXD_P0_22 \
1043  LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_00, 3)
1044#define LPC24XX_PIN_UART_4_TXD_P1_29 \
1045  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_00, 5)
1046#define LPC24XX_PIN_UART_4_TXD_P5_4 \
1047  LPC24XX_PIN(5, 4, LPC24XX_PIN_FUNCTION_00, 4)
1048
1049#define LPC24XX_PIN_UART_4_RXD_P2_9 \
1050  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_00, 3)
1051#define LPC24XX_PIN_UART_4_RXD_P5_3 \
1052  LPC24XX_PIN(5, 3, LPC24XX_PIN_FUNCTION_00, 4)
1053
1054#define LPC24XX_PIN_UART_4_OE_P0_21 \
1055  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 3)
1056
1057#define LPC24XX_PIN_UART_4_SCLK_P0_21 \
1058  LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 5)
1059
1060#endif /* ARM_MULTILIB_ARCH_V7M */
1061
1062/** @} */
1063
1064/**
1065 * @name USB Port 1 Pins
1066 *
1067 * @{
1068 */
1069
1070#define LPC24XX_PIN_USB_D_PLUS_1\
1071  LPC24XX_PIN(0, 29, LPC24XX_PIN_FUNCTION_01, 1)
1072#define LPC24XX_PIN_USB_D_MINUS_1\
1073  LPC24XX_PIN(0, 30, LPC24XX_PIN_FUNCTION_01, 1)
1074#define LPC24XX_PIN_USB_UP_LED_1\
1075  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_01, 1)
1076#define LPC24XX_PIN_USB_TX_E_1\
1077  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_01, 1)
1078#define LPC24XX_PIN_USB_PPWR_1\
1079  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_10, 2)
1080#define LPC24XX_PIN_USB_TX_DP_1\
1081  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 1)
1082#define LPC24XX_PIN_USB_TX_DM_1\
1083  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 1)
1084#define LPC24XX_PIN_USB_RCV_1\
1085  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 1)
1086#define LPC24XX_PIN_USB_PWRD_1\
1087  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_10, 2)
1088#define LPC24XX_PIN_USB_RX_DP_1\
1089  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 1)
1090#define LPC24XX_PIN_USB_RX_DM_1\
1091  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 1)
1092#define LPC24XX_PIN_USB_LS_1\
1093  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 1)
1094#define LPC24XX_PIN_USB_HSTEN_1\
1095  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_10, 2)
1096#define LPC24XX_PIN_USB_SSPND_1\
1097  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 1)
1098#define LPC24XX_PIN_USB_INT_1\
1099  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 1)
1100#define LPC24XX_PIN_USB_OVRCR_1\
1101  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2)
1102#define LPC24XX_PIN_USB_SCL_1\
1103  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1)
1104#define LPC24XX_PIN_USB_SDA_1 \
1105  LPC24XX_PIN_WITH_TYPE( \
1106    1, 29, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_OPEN_DRAIN \
1107  )
1108#define LPC24XX_PIN_USB_CONNECT_1\
1109  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1)
1110
1111/** @} */
1112
1113/**
1114 * @name USB Port 2 Pins
1115 *
1116 * @{
1117 */
1118
1119#define LPC24XX_PIN_USB_PPWR_2\
1120  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_01, 1)
1121#define LPC24XX_PIN_USB_UP_LED_2\
1122  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_01, 1)
1123#define LPC24XX_PIN_USB_HSTEN_2\
1124  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 1)
1125#define LPC24XX_PIN_USB_CONNECT_2\
1126  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 3)
1127#define LPC24XX_PIN_USB_D_PLUS_2\
1128  LPC24XX_PIN(0, 31, LPC24XX_PIN_FUNCTION_01, 1)
1129#define LPC24XX_PIN_USB_PWRD_2\
1130  LPC24XX_PIN(1, 30, LPC24XX_PIN_FUNCTION_01, 1)
1131#define LPC24XX_PIN_USB_OVRCR_2\
1132  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_01, 1)
1133
1134/** @} */
1135
1136/** @} */
1137
1138#ifdef __cplusplus
1139}
1140#endif /* __cplusplus */
1141
1142#endif /* LIBBSP_ARM_LPC24XX_IO_H */
Note: See TracBrowser for help on using the repository browser.