source: rtems/c/src/lib/libbsp/arm/lpc24xx/include/io.h @ 991fdb33

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

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

  • Property mode set to 100644
File size: 32.2 KB
RevLine 
[9364cf66]1/**
2 * @file
3 *
[ba938b8d]4 * @ingroup lpc24xx_io
[9364cf66]5 *
[ba938b8d]6 * @brief Input and output module.
[9364cf66]7 */
8
9/*
[14ee5a1e]10 * Copyright (c) 2009-2012 embedded brains GmbH.  All rights reserved.
[d74ed4a]11 *
12 *  embedded brains GmbH
13 *  Obere Lagerstr. 30
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
[9364cf66]17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
[c499856]20 * http://www.rtems.org/license/LICENSE.
[9364cf66]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
[ba938b8d]34/**
35 * @defgroup lpc24xx_io IO Support and Configuration
36 *
37 * @ingroup lpc24xx
38 *
39 * @brief Input and output module.
40 *
41 * @{
42 */
43
[9364cf66]44#define LPC24XX_IO_PORT_COUNT 5U
45
46#define LPC24XX_IO_INDEX_MAX (LPC24XX_IO_PORT_COUNT * 32U)
47
[c468f18b]48#define LPC24XX_IO_INDEX_BY_PORT(port, bit) (((port) << 5U) + (bit))
[9364cf66]49
[4a6cc2a]50#define LPC24XX_IO_PORT(index) ((index) >> 5U)
[9364cf66]51
[4a6cc2a]52#define LPC24XX_IO_PORT_BIT(index) ((index) & 0x1fU)
[9364cf66]53
54typedef enum {
[4a6cc2a]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
[c468f18b]62  LPC24XX_MODULE_CAN_0,
63  LPC24XX_MODULE_CAN_1,
[9364cf66]64  LPC24XX_MODULE_DAC,
65  LPC24XX_MODULE_EMC,
66  LPC24XX_MODULE_ETHERNET,
67  LPC24XX_MODULE_GPDMA,
68  LPC24XX_MODULE_GPIO,
[c468f18b]69  LPC24XX_MODULE_I2C_0,
70  LPC24XX_MODULE_I2C_1,
71  LPC24XX_MODULE_I2C_2,
[9364cf66]72  LPC24XX_MODULE_I2S,
73  LPC24XX_MODULE_LCD,
74  LPC24XX_MODULE_MCI,
[14ee5a1e]75  #ifdef ARM_MULTILIB_ARCH_V7M
76    LPC24XX_MODULE_MCPWM,
77  #endif
[9364cf66]78  LPC24XX_MODULE_PCB,
[c468f18b]79  LPC24XX_MODULE_PWM_0,
80  LPC24XX_MODULE_PWM_1,
[14ee5a1e]81  #ifdef ARM_MULTILIB_ARCH_V7M
82    LPC24XX_MODULE_QEI,
83  #endif
[9364cf66]84  LPC24XX_MODULE_RTC,
[4a6cc2a]85  #ifdef ARM_MULTILIB_ARCH_V4
86    LPC24XX_MODULE_SPI,
87  #endif
[c468f18b]88  LPC24XX_MODULE_SSP_0,
89  LPC24XX_MODULE_SSP_1,
[14ee5a1e]90  #ifdef ARM_MULTILIB_ARCH_V7M
91    LPC24XX_MODULE_SSP_2,
92  #endif
[9364cf66]93  LPC24XX_MODULE_SYSCON,
[c468f18b]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,
[14ee5a1e]102  #ifdef ARM_MULTILIB_ARCH_V7M
103    LPC24XX_MODULE_UART_4,
104  #endif
[4a6cc2a]105  #ifdef ARM_MULTILIB_ARCH_V4
106    LPC24XX_MODULE_WDT,
107  #endif
108  LPC24XX_MODULE_USB
[9364cf66]109} lpc24xx_module;
110
[4a6cc2a]111#define LPC24XX_MODULE_COUNT (LPC24XX_MODULE_USB + 1)
[c468f18b]112
[9364cf66]113typedef enum {
[4a6cc2a]114  LPC24XX_MODULE_PCLK_DEFAULT = 0x4U,
[9364cf66]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,
[4a6cc2a]126  LPC24XX_GPIO_RESISTOR_PULL_UP = 0x0U,
[9364cf66]127  LPC24XX_GPIO_RESISTOR_NONE = 0x1U,
[4a6cc2a]128  LPC24XX_GPIO_RESISTOR_PULL_DOWN = 0x2U,
[9364cf66]129  LPC24XX_GPIO_INPUT = 0x0U,
[14ee5a1e]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
[4a6cc2a]138  LPC24XX_GPIO_OUTPUT = 0x8000U
[9364cf66]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(
[c468f18b]147  lpc24xx_module module
[9364cf66]148);
149
[4e0755c8]150bool lpc24xx_module_is_enabled(lpc24xx_module module);
151
[9364cf66]152rtems_status_code lpc24xx_gpio_config(
153  unsigned index,
154  lpc24xx_gpio_settings settings
155);
156
[c468f18b]157static inline void lpc24xx_gpio_set(unsigned index)
[9364cf66]158{
159  if (index <= LPC24XX_IO_INDEX_MAX) {
[c468f18b]160    unsigned port = LPC24XX_IO_PORT(index);
161    unsigned bit = LPC24XX_IO_PORT_BIT(index);
[9364cf66]162
163    LPC24XX_FIO [port].set = 1U << bit;
164  }
165}
166
[c468f18b]167static inline void lpc24xx_gpio_clear(unsigned index)
[9364cf66]168{
169  if (index <= LPC24XX_IO_INDEX_MAX) {
[c468f18b]170    unsigned port = LPC24XX_IO_PORT(index);
171    unsigned bit = LPC24XX_IO_PORT_BIT(index);
[9364cf66]172
173    LPC24XX_FIO [port].clr = 1U << bit;
174  }
175}
176
[c468f18b]177static inline void lpc24xx_gpio_write(unsigned index, bool value)
[9364cf66]178{
179  if (value) {
[c468f18b]180    lpc24xx_gpio_set(index);
[9364cf66]181  } else {
[c468f18b]182    lpc24xx_gpio_clear(index);
[9364cf66]183  }
184}
185
[c468f18b]186static inline bool lpc24xx_gpio_get(unsigned index)
[9364cf66]187{
188  if (index <= LPC24XX_IO_INDEX_MAX) {
[c468f18b]189    unsigned port = LPC24XX_IO_PORT(index);
190    unsigned bit = LPC24XX_IO_PORT_BIT(index);
[9364cf66]191
192    return (LPC24XX_FIO [port].pin & (1U << bit)) != 0;
193  } else {
194    return false;
195  }
196}
197
[d74ed4a]198typedef enum {
199  /**
200   * @brief Sets the pin function.
201   */
[4a6cc2a]202  LPC24XX_PIN_SET_FUNCTION,
[d74ed4a]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;
[4a6cc2a]223    uint16_t port_bit : 5;
[d74ed4a]224    uint16_t function : 3;
[4a6cc2a]225    uint16_t type : 4;
226    uint16_t range : 1;
[d74ed4a]227  } fields;
228  uint16_t value;
229} lpc24xx_pin_range;
230
[4a6cc2a]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;
[d74ed4a]237
[4a6cc2a]238typedef enum {
239  LPC17XX_PIN_TYPE_DEFAULT,
240  LPC17XX_PIN_TYPE_ADC,
241  LPC17XX_PIN_TYPE_DAC,
242  LPC17XX_PIN_TYPE_I2C,
[e9e5b92d]243  LPC17XX_PIN_TYPE_I2C_FAST_PLUS,
244  LPC17XX_PIN_TYPE_OPEN_DRAIN
[4a6cc2a]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 } }
[14ee5a1e]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 } }
[4a6cc2a]257#endif
258
259#define LPC24XX_PIN_TERMINAL { { 0x7, 0x1f, 0x7, 0xf, 0x1 } }
[d74ed4a]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
[986ddf5]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
[d74ed4a]307/**
308 * @name ADC Pins
309 *
310 * @{
311 */
312
313#define LPC24XX_PIN_ADC_CHANNEL_0 \
[4a6cc2a]314  LPC24XX_PIN_WITH_TYPE(0, 23, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]315#define LPC24XX_PIN_ADC_CHANNEL_1 \
[4a6cc2a]316  LPC24XX_PIN_WITH_TYPE(0, 24, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]317#define LPC24XX_PIN_ADC_CHANNEL_2 \
[4a6cc2a]318  LPC24XX_PIN_WITH_TYPE(0, 25, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]319#define LPC24XX_PIN_ADC_CHANNEL_3 \
[4a6cc2a]320  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]321#define LPC24XX_PIN_ADC_CHANNEL_4 \
[4a6cc2a]322  LPC24XX_PIN_WITH_TYPE(1, 30, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]323#define LPC24XX_PIN_ADC_CHANNEL_5 \
[4a6cc2a]324  LPC24XX_PIN_WITH_TYPE(1, 31, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]325#define LPC24XX_PIN_ADC_CHANNEL_6 \
[4a6cc2a]326  LPC24XX_PIN_WITH_TYPE(0, 12, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
[d74ed4a]327#define LPC24XX_PIN_ADC_CHANNEL_7 \
[4a6cc2a]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
[f3cdf279]338#define LPC24XX_PIN_CAN_0_RD_P0_0 \
[4a6cc2a]339  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_01, 1)
340
[f3cdf279]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 \
[4a6cc2a]345  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_01, 1)
346
[f3cdf279]347#define LPC24XX_PIN_CAN_0_TD_P0_22 \
348  LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_11, 4)
349
[4a6cc2a]350/** @} */
351
352/**
353 * @name CAN 1 Pins
354 *
355 * @{
356 */
357
[f3cdf279]358#define LPC24XX_PIN_CAN_1_RD_P0_4 \
[4a6cc2a]359  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_10, 2)
360
[f3cdf279]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 \
[4a6cc2a]365  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]366
[f3cdf279]367#define LPC24XX_PIN_CAN_1_TD_P2_8 \
368  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_01, 1)
369
[d74ed4a]370/** @} */
371
372/**
373 * @name DAC Pins
374 *
375 * @{
376 */
377
378#define LPC24XX_PIN_DAC \
[4a6cc2a]379  LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_DAC)
[d74ed4a]380
381/** @} */
382
383/**
384 * @name Ethernet Pins
385 *
386 * @{
387 */
388
389#define LPC24XX_PIN_ETHERNET_MII \
[4a6cc2a]390  LPC24XX_PIN_RANGE(1, 0, 17, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]391
392#define LPC24XX_PIN_ETHERNET_RMII_0 \
[4a6cc2a]393  LPC24XX_PIN_RANGE(1, 0, 1, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]394#define LPC24XX_PIN_ETHERNET_RMII_1 \
[4a6cc2a]395  LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]396#define LPC24XX_PIN_ETHERNET_RMII_2 \
[4a6cc2a]397  LPC24XX_PIN_RANGE(1, 8, 10, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]398#define LPC24XX_PIN_ETHERNET_RMII_3 \
[4a6cc2a]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)
[d74ed4a]530
531/** @} */
532
533/**
534 * @name I2C 0 Pins
535 *
536 * @{
537 */
538
539#define LPC24XX_PIN_I2C_0_SDA \
[4a6cc2a]540  LPC24XX_PIN_WITH_TYPE(0, 27, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]541#define LPC24XX_PIN_I2C_0_SCL \
[4a6cc2a]542  LPC24XX_PIN_WITH_TYPE(0, 28, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]543
544/** @} */
545
546/**
547 * @name I2C 1 Pins
548 *
549 * @{
550 */
551
552#define LPC24XX_PIN_I2C_1_SDA_P0_0 \
[4a6cc2a]553  LPC24XX_PIN_WITH_TYPE(0, 0, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]554#define LPC24XX_PIN_I2C_1_SDA_P0_19 \
[4a6cc2a]555  LPC24XX_PIN_WITH_TYPE(0, 19, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]556#define LPC24XX_PIN_I2C_1_SDA_P2_14 \
[4a6cc2a]557  LPC24XX_PIN_WITH_TYPE(2, 14, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]558
559#define LPC24XX_PIN_I2C_1_SCL_P0_1 \
[4a6cc2a]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)
[d74ed4a]563#define LPC24XX_PIN_I2C_1_SCL_P2_15 \
[4a6cc2a]564  LPC24XX_PIN_WITH_TYPE(2, 15, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]565
566/** @} */
567
568/**
569 * @name I2C 2 Pins
570 *
571 * @{
572 */
573
574#define LPC24XX_PIN_I2C_2_SDA_P0_10 \
[4a6cc2a]575  LPC24XX_PIN_WITH_TYPE(0, 10, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]576#define LPC24XX_PIN_I2C_2_SDA_P2_30 \
[4a6cc2a]577  LPC24XX_PIN_WITH_TYPE(2, 30, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]578#define LPC24XX_PIN_I2C_2_SDA_P4_20 \
[4a6cc2a]579  LPC24XX_PIN_WITH_TYPE(4, 20, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]580
581#define LPC24XX_PIN_I2C_2_SCL_P0_11 \
[4a6cc2a]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)
[d74ed4a]585#define LPC24XX_PIN_I2C_2_SCL_P4_21 \
[4a6cc2a]586  LPC24XX_PIN_WITH_TYPE(4, 21, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
[d74ed4a]587
588/** @} */
589
590/**
591 * @name I2S Pins
592 *
593 * @{
594 */
595
596#define LPC24XX_PIN_I2S_RX_CLK_P0_4 \
[4a6cc2a]597  LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]598#define LPC24XX_PIN_I2S_RX_CLK_P0_23 \
[4a6cc2a]599  LPC24XX_PIN(0, 23, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]600
601#define LPC24XX_PIN_I2S_RX_WS_P0_5 \
[4a6cc2a]602  LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]603#define LPC24XX_PIN_I2S_RX_WS_P0_24 \
[4a6cc2a]604  LPC24XX_PIN(0, 24, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]605
606#define LPC24XX_PIN_I2S_RX_SDA_P0_6 \
[4a6cc2a]607  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]608#define LPC24XX_PIN_I2S_RX_SDA_P0_25 \
[4a6cc2a]609  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]610
611#define LPC24XX_PIN_I2S_TX_CLK_P0_7 \
[4a6cc2a]612  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]613#define LPC24XX_PIN_I2S_TX_CLK_P2_11 \
[4a6cc2a]614  LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]615
616#define LPC24XX_PIN_I2S_TX_WS_P0_8 \
[4a6cc2a]617  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]618#define LPC24XX_PIN_I2S_TX_WS_P2_12 \
[4a6cc2a]619  LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]620
621#define LPC24XX_PIN_I2S_TX_SDA_P0_9 \
[4a6cc2a]622  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]623#define LPC24XX_PIN_I2S_TX_SDA_P2_13 \
[4a6cc2a]624  LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]625
626/** @} */
627
628/**
629 * @name LCD Pins
630 *
631 * @{
632 */
633
634#define LPC24XX_PIN_LCD_PWR \
[4a6cc2a]635  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]636#define LPC24XX_PIN_LCD_LE \
[4a6cc2a]637  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]638#define LPC24XX_PIN_LCD_DCLK \
[4a6cc2a]639  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]640#define LPC24XX_PIN_LCD_FP \
[4a6cc2a]641  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]642#define LPC24XX_PIN_LCD_ENAB_M \
[4a6cc2a]643  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]644#define LPC24XX_PIN_LCD_LP \
[4a6cc2a]645  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_11, 7)
[d74ed4a]646#define LPC24XX_PIN_LCD_CLKIN \
[4a6cc2a]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)
[d74ed4a]743
744/** @} */
745
746/**
747 * @name PWM 0 Pins
748 *
749 * @{
750 */
751
752#define LPC24XX_PIN_PWM_0_CHANNEL_1_P1_2 \
[4a6cc2a]753  LPC24XX_PIN(1, 2, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]754#define LPC24XX_PIN_PWM_0_CHANNEL_1_P3_16 \
[4a6cc2a]755  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]756
757#define LPC24XX_PIN_PWM_0_CHANNEL_2_P1_3 \
[4a6cc2a]758  LPC24XX_PIN(1, 3, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]759#define LPC24XX_PIN_PWM_0_CHANNEL_2_P3_17 \
[4a6cc2a]760  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]761
762#define LPC24XX_PIN_PWM_0_CHANNEL_3_P1_5 \
[4a6cc2a]763  LPC24XX_PIN(1, 5, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]764#define LPC24XX_PIN_PWM_0_CHANNEL_3_P3_18 \
[4a6cc2a]765  LPC24XX_PIN(3, 18, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]766
767#define LPC24XX_PIN_PWM_0_CHANNEL_4_P1_6 \
[4a6cc2a]768  LPC24XX_PIN(1, 6, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]769#define LPC24XX_PIN_PWM_0_CHANNEL_4_P3_19 \
[4a6cc2a]770  LPC24XX_PIN(3, 19, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]771
772#define LPC24XX_PIN_PWM_0_CHANNEL_5_P1_7 \
[4a6cc2a]773  LPC24XX_PIN(1, 7, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]774#define LPC24XX_PIN_PWM_0_CHANNEL_5_P3_20 \
[4a6cc2a]775  LPC24XX_PIN(3, 20, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]776
777#define LPC24XX_PIN_PWM_0_CHANNEL_6_P1_11 \
[4a6cc2a]778  LPC24XX_PIN(1, 11, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]779#define LPC24XX_PIN_PWM_0_CHANNEL_6_P3_21 \
[4a6cc2a]780  LPC24XX_PIN(3, 21, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]781
782#define LPC24XX_PIN_PWM_0_CAPTURE_0_P1_12 \
[4a6cc2a]783  LPC24XX_PIN(1, 12, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]784#define LPC24XX_PIN_PWM_0_CAPTURE_0_P3_22 \
[4a6cc2a]785  LPC24XX_PIN(3, 22, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]786
787/** @} */
788
789/**
790 * @name PWM 1 Pins
791 *
792 * @{
793 */
794
795#define LPC24XX_PIN_PWM_1_CHANNEL_1_P1_18 \
[4a6cc2a]796  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]797#define LPC24XX_PIN_PWM_1_CHANNEL_1_P2_0 \
[4a6cc2a]798  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]799#define LPC24XX_PIN_PWM_1_CHANNEL_1_P3_24 \
[4a6cc2a]800  LPC24XX_PIN(3, 24, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]801
802#define LPC24XX_PIN_PWM_1_CHANNEL_2_P1_20 \
[4a6cc2a]803  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]804#define LPC24XX_PIN_PWM_1_CHANNEL_2_P2_1 \
[4a6cc2a]805  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]806#define LPC24XX_PIN_PWM_1_CHANNEL_2_P3_25 \
[4a6cc2a]807  LPC24XX_PIN(3, 25, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]808
809#define LPC24XX_PIN_PWM_1_CHANNEL_3_P1_21 \
[4a6cc2a]810  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]811#define LPC24XX_PIN_PWM_1_CHANNEL_3_P2_2 \
[4a6cc2a]812  LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]813#define LPC24XX_PIN_PWM_1_CHANNEL_3_P3_26 \
[4a6cc2a]814  LPC24XX_PIN(3, 26, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]815
816#define LPC24XX_PIN_PWM_1_CHANNEL_4_P1_23 \
[4a6cc2a]817  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]818#define LPC24XX_PIN_PWM_1_CHANNEL_4_P2_3 \
[4a6cc2a]819  LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]820#define LPC24XX_PIN_PWM_1_CHANNEL_4_P3_27 \
[4a6cc2a]821  LPC24XX_PIN(3, 27, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]822
823#define LPC24XX_PIN_PWM_1_CHANNEL_5_P1_24 \
[4a6cc2a]824  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]825#define LPC24XX_PIN_PWM_1_CHANNEL_5_P2_4 \
[4a6cc2a]826  LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]827#define LPC24XX_PIN_PWM_1_CHANNEL_5_P3_28 \
[4a6cc2a]828  LPC24XX_PIN(3, 28, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]829
830#define LPC24XX_PIN_PWM_1_CHANNEL_6_P1_26 \
[4a6cc2a]831  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]832#define LPC24XX_PIN_PWM_1_CHANNEL_6_P2_5 \
[4a6cc2a]833  LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]834#define LPC24XX_PIN_PWM_1_CHANNEL_6_P3_29 \
[4a6cc2a]835  LPC24XX_PIN(3, 29, LPC24XX_PIN_FUNCTIO9_11, 2)
[d74ed4a]836
837#define LPC24XX_PIN_PWM_1_CAPTURE_0_P1_28 \
[4a6cc2a]838  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]839#define LPC24XX_PIN_PWM_1_CAPTURE_0_P2_7 \
[4a6cc2a]840  LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]841#define LPC24XX_PIN_PWM_1_CAPTURE_0_P3_23 \
[4a6cc2a]842  LPC24XX_PIN(3, 23, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]843
844#define LPC24XX_PIN_PWM_1_CAPTURE_1_P1_29 \
[4a6cc2a]845  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]846
847/** @} */
848
[14ee5a1e]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
[d74ed4a]870/**
871 * @name SSP 0 Pins
872 *
873 * @{
874 */
875
876#define LPC24XX_PIN_SSP_0_SCK_P0_15 \
[4a6cc2a]877  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]878#define LPC24XX_PIN_SSP_0_SCK_P1_20 \
[4a6cc2a]879  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_11, 5)
[d74ed4a]880#define LPC24XX_PIN_SSP_0_SCK_P2_22 \
[4a6cc2a]881  LPC24XX_PIN(2, 22, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]882
883#define LPC24XX_PIN_SSP_0_SSEL_P0_16 \
[4a6cc2a]884  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]885#define LPC24XX_PIN_SSP_0_SSEL_P1_21 \
[4a6cc2a]886  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]887#define LPC24XX_PIN_SSP_0_SSEL_P2_23 \
[4a6cc2a]888  LPC24XX_PIN(2, 23, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]889
890#define LPC24XX_PIN_SSP_0_MISO_P0_17 \
[4a6cc2a]891  LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]892#define LPC24XX_PIN_SSP_0_MISO_P1_23 \
[4a6cc2a]893  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_11, 5)
[d74ed4a]894#define LPC24XX_PIN_SSP_0_MISO_P2_26 \
[4a6cc2a]895  LPC24XX_PIN(2, 26, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]896
897#define LPC24XX_PIN_SSP_0_MOSI_P0_18 \
[4a6cc2a]898  LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]899#define LPC24XX_PIN_SSP_0_MOSI_P1_24 \
[4a6cc2a]900  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_11, 5)
[d74ed4a]901#define LPC24XX_PIN_SSP_0_MOSI_P2_27 \
[4a6cc2a]902  LPC24XX_PIN(2, 27, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]903
904/** @} */
905
906/**
907 * @name SSP 1 Pins
908 *
909 * @{
910 */
911
912#define LPC24XX_PIN_SSP_1_SCK_P0_6 \
[4a6cc2a]913  LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]914#define LPC24XX_PIN_SSP_1_SCK_P0_12 \
[4a6cc2a]915  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]916#define LPC24XX_PIN_SSP_1_SCK_P4_20 \
[4a6cc2a]917  LPC24XX_PIN(4, 20, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]918
919#define LPC24XX_PIN_SSP_1_SSEL_P0_7 \
[4a6cc2a]920  LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]921#define LPC24XX_PIN_SSP_1_SSEL_P0_13 \
[4a6cc2a]922  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]923#define LPC24XX_PIN_SSP_1_SSEL_P4_21 \
[4a6cc2a]924  LPC24XX_PIN(4, 21, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]925
926#define LPC24XX_PIN_SSP_1_MISO_P0_8 \
[4a6cc2a]927  LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]928#define LPC24XX_PIN_SSP_1_MISO_P0_14 \
[4a6cc2a]929  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]930#define LPC24XX_PIN_SSP_1_MISO_P4_22 \
[4a6cc2a]931  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]932
933#define LPC24XX_PIN_SSP_1_MOSI_P0_9 \
[4a6cc2a]934  LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]935#define LPC24XX_PIN_SSP_1_MOSI_P1_31 \
[4a6cc2a]936  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]937#define LPC24XX_PIN_SSP_1_MOSI_P4_23 \
[4a6cc2a]938  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]939
940/** @} */
941
[14ee5a1e]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
[d74ed4a]966/**
967 * @name UART 0 Pins
968 *
969 * @{
970 */
971
972#define LPC24XX_PIN_UART_0_TXD \
[4a6cc2a]973  LPC24XX_PIN(0, 2, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]974
975#define LPC24XX_PIN_UART_0_RXD \
[4a6cc2a]976  LPC24XX_PIN(0, 3, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]977
978/** @} */
979
980/**
981 * @name UART 1 Pins
982 *
983 * @{
984 */
985
986#define LPC24XX_PIN_UART_1_TXD_P0_15 \
[4a6cc2a]987  LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]988#define LPC24XX_PIN_UART_1_TXD_P2_0 \
[4a6cc2a]989  LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]990#define LPC24XX_PIN_UART_1_TXD_P3_16 \
[4a6cc2a]991  LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]992
993#define LPC24XX_PIN_UART_1_RXD_P0_16 \
[4a6cc2a]994  LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]995#define LPC24XX_PIN_UART_1_RXD_P2_1 \
[4a6cc2a]996  LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]997#define LPC24XX_PIN_UART_1_RXD_P3_17 \
[4a6cc2a]998  LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]999
1000/** @} */
1001
1002/**
1003 * @name UART 2 Pins
1004 *
1005 * @{
1006 */
1007
1008#define LPC24XX_PIN_UART_2_TXD_P0_10 \
[4a6cc2a]1009  LPC24XX_PIN(0, 10, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1010#define LPC24XX_PIN_UART_2_TXD_P2_8 \
[4a6cc2a]1011  LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1012#define LPC24XX_PIN_UART_2_TXD_P4_22 \
[4a6cc2a]1013  LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1014
1015#define LPC24XX_PIN_UART_2_RXD_P0_11 \
[4a6cc2a]1016  LPC24XX_PIN(0, 11, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1017#define LPC24XX_PIN_UART_2_RXD_P2_9 \
[4a6cc2a]1018  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1019#define LPC24XX_PIN_UART_2_RXD_P4_23 \
[4a6cc2a]1020  LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1021
1022/** @} */
1023
1024/**
1025 * @name UART 3 Pins
1026 *
1027 * @{
1028 */
1029
1030#define LPC24XX_PIN_UART_3_TXD_P0_0 \
[4a6cc2a]1031  LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1032#define LPC24XX_PIN_UART_3_TXD_P0_25 \
[4a6cc2a]1033  LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]1034#define LPC24XX_PIN_UART_3_TXD_P4_28 \
[4a6cc2a]1035  LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]1036
1037#define LPC24XX_PIN_UART_3_RXD_P0_1 \
[4a6cc2a]1038  LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_10, 2)
[c24d9823]1039#define LPC24XX_PIN_UART_3_RXD_P0_26 \
[4a6cc2a]1040  LPC24XX_PIN(0, 26, LPC24XX_PIN_FUNCTION_11, 3)
[d74ed4a]1041#define LPC24XX_PIN_UART_3_RXD_P4_29 \
[4a6cc2a]1042  LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_11, 2)
[d74ed4a]1043
1044/** @} */
1045
[14ee5a1e]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
[d74ed4a]1076/**
1077 * @name USB Port 1 Pins
1078 *
1079 * @{
1080 */
1081
1082#define LPC24XX_PIN_USB_D_PLUS_1\
[4a6cc2a]1083  LPC24XX_PIN(0, 29, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1084#define LPC24XX_PIN_USB_D_MINUS_1\
[4a6cc2a]1085  LPC24XX_PIN(0, 30, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1086#define LPC24XX_PIN_USB_UP_LED_1\
[4a6cc2a]1087  LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1088#define LPC24XX_PIN_USB_TX_E_1\
[4a6cc2a]1089  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1090#define LPC24XX_PIN_USB_PPWR_1\
[4a6cc2a]1091  LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1092#define LPC24XX_PIN_USB_TX_DP_1\
[4a6cc2a]1093  LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1094#define LPC24XX_PIN_USB_TX_DM_1\
[4a6cc2a]1095  LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1096#define LPC24XX_PIN_USB_RCV_1\
[4a6cc2a]1097  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1098#define LPC24XX_PIN_USB_PWRD_1\
[4a6cc2a]1099  LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1100#define LPC24XX_PIN_USB_RX_DP_1\
[4a6cc2a]1101  LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1102#define LPC24XX_PIN_USB_RX_DM_1\
[4a6cc2a]1103  LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1104#define LPC24XX_PIN_USB_LS_1\
[4a6cc2a]1105  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1106#define LPC24XX_PIN_USB_HSTEN_1\
[4a6cc2a]1107  LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1108#define LPC24XX_PIN_USB_SSPND_1\
[4a6cc2a]1109  LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1110#define LPC24XX_PIN_USB_INT_1\
[4a6cc2a]1111  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1112#define LPC24XX_PIN_USB_OVRCR_1\
[4a6cc2a]1113  LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2)
[d74ed4a]1114#define LPC24XX_PIN_USB_SCL_1\
[4a6cc2a]1115  LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1)
[e9e5b92d]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  )
[d74ed4a]1120#define LPC24XX_PIN_USB_CONNECT_1\
[4a6cc2a]1121  LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1122
1123/** @} */
1124
1125/**
1126 * @name USB Port 2 Pins
1127 *
1128 * @{
1129 */
1130
1131#define LPC24XX_PIN_USB_PPWR_2\
[4a6cc2a]1132  LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1133#define LPC24XX_PIN_USB_UP_LED_2\
[4a6cc2a]1134  LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1135#define LPC24XX_PIN_USB_HSTEN_2\
[4a6cc2a]1136  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1137#define LPC24XX_PIN_USB_CONNECT_2\
[4a6cc2a]1138  LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 3)
[d74ed4a]1139#define LPC24XX_PIN_USB_D_PLUS_2\
[4a6cc2a]1140  LPC24XX_PIN(0, 31, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1141#define LPC24XX_PIN_USB_PWRD_2\
[4a6cc2a]1142  LPC24XX_PIN(1, 30, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1143#define LPC24XX_PIN_USB_OVRCR_2\
[4a6cc2a]1144  LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_01, 1)
[d74ed4a]1145
1146/** @} */
1147
[ba938b8d]1148/** @} */
1149
[9364cf66]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.