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

Last change on this file since 0a6b81a was 0a6b81a, checked in by Sebastian Huber <sebastian.huber@…>, on May 9, 2019 at 7:53:55 AM

bsp/lpc24xx: Add LPC17XX_PIN_TYPE_FAST_SLEW_RATE

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