Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:03

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSBSPsARMLPC24XX_io
0007  *
0008  * @brief Input and output module.
0009  */
0010 
0011 /*
0012  * Copyright (C) 2009, 2012 embedded brains GmbH & Co. KG
0013  *
0014  * Redistribution and use in source and binary forms, with or without
0015  * modification, are permitted provided that the following conditions
0016  * are met:
0017  * 1. Redistributions of source code must retain the above copyright
0018  *    notice, this list of conditions and the following disclaimer.
0019  * 2. Redistributions in binary form must reproduce the above copyright
0020  *    notice, this list of conditions and the following disclaimer in the
0021  *    documentation and/or other materials provided with the distribution.
0022  *
0023  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0024  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0025  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0026  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0027  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0028  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0029  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0030  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0031  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0032  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0033  * POSSIBILITY OF SUCH DAMAGE.
0034  */
0035 
0036 #ifndef LIBBSP_ARM_LPC24XX_IO_H
0037 #define LIBBSP_ARM_LPC24XX_IO_H
0038 
0039 #include <rtems.h>
0040 
0041 #include <bsp/lpc24xx.h>
0042 
0043 #ifdef __cplusplus
0044 extern "C" {
0045 #endif /* __cplusplus */
0046 
0047 /**
0048  * @defgroup lpc24xx_io IO Support and Configuration
0049  *
0050  * @ingroup RTEMSBSPsARMLPC24XX
0051  *
0052  * @brief Input and output module.
0053  *
0054  * @{
0055  */
0056 
0057 #ifdef ARM_MULTILIB_ARCH_V7M
0058   #define LPC24XX_IO_PORT_COUNT 6U
0059 #else
0060   #define LPC24XX_IO_PORT_COUNT 5U
0061 #endif
0062 
0063 #define LPC24XX_IO_INDEX_MAX (LPC24XX_IO_PORT_COUNT * 32U)
0064 
0065 #define LPC24XX_IO_INDEX_BY_PORT(port, bit) (((port) << 5U) + (bit))
0066 
0067 #define LPC24XX_IO_PORT(index) ((index) >> 5U)
0068 
0069 #define LPC24XX_IO_PORT_BIT(index) ((index) & 0x1fU)
0070 
0071 typedef enum {
0072   #ifdef ARM_MULTILIB_ARCH_V4
0073     LPC24XX_MODULE_ACF,
0074   #endif
0075     LPC24XX_MODULE_ADC,
0076   #ifdef ARM_MULTILIB_ARCH_V4
0077     LPC24XX_MODULE_BAT_RAM,
0078   #endif
0079   LPC24XX_MODULE_CAN_0,
0080   LPC24XX_MODULE_CAN_1,
0081   LPC24XX_MODULE_DAC,
0082   LPC24XX_MODULE_EMC,
0083   LPC24XX_MODULE_ETHERNET,
0084   LPC24XX_MODULE_GPDMA,
0085   LPC24XX_MODULE_GPIO,
0086   LPC24XX_MODULE_I2C_0,
0087   LPC24XX_MODULE_I2C_1,
0088   LPC24XX_MODULE_I2C_2,
0089   LPC24XX_MODULE_I2S,
0090   LPC24XX_MODULE_LCD,
0091   LPC24XX_MODULE_MCI,
0092   #ifdef ARM_MULTILIB_ARCH_V7M
0093     LPC24XX_MODULE_MCPWM,
0094   #endif
0095   LPC24XX_MODULE_PCB,
0096   LPC24XX_MODULE_PWM_0,
0097   LPC24XX_MODULE_PWM_1,
0098   #ifdef ARM_MULTILIB_ARCH_V7M
0099     LPC24XX_MODULE_QEI,
0100   #endif
0101   LPC24XX_MODULE_RTC,
0102   #ifdef ARM_MULTILIB_ARCH_V4
0103     LPC24XX_MODULE_SPI,
0104   #endif
0105   LPC24XX_MODULE_SSP_0,
0106   LPC24XX_MODULE_SSP_1,
0107   #ifdef ARM_MULTILIB_ARCH_V7M
0108     LPC24XX_MODULE_SSP_2,
0109   #endif
0110   LPC24XX_MODULE_SYSCON,
0111   LPC24XX_MODULE_TIMER_0,
0112   LPC24XX_MODULE_TIMER_1,
0113   LPC24XX_MODULE_TIMER_2,
0114   LPC24XX_MODULE_TIMER_3,
0115   LPC24XX_MODULE_UART_0,
0116   LPC24XX_MODULE_UART_1,
0117   LPC24XX_MODULE_UART_2,
0118   LPC24XX_MODULE_UART_3,
0119   #ifdef ARM_MULTILIB_ARCH_V7M
0120     LPC24XX_MODULE_UART_4,
0121   #endif
0122   #ifdef ARM_MULTILIB_ARCH_V4
0123     LPC24XX_MODULE_WDT,
0124   #endif
0125   LPC24XX_MODULE_USB
0126 } lpc24xx_module;
0127 
0128 #define LPC24XX_MODULE_COUNT (LPC24XX_MODULE_USB + 1)
0129 
0130 typedef enum {
0131   LPC24XX_MODULE_PCLK_DEFAULT = 0x4U,
0132   LPC24XX_MODULE_CCLK = 0x1U,
0133   LPC24XX_MODULE_CCLK_2 = 0x2U,
0134   LPC24XX_MODULE_CCLK_4 = 0x0U,
0135   LPC24XX_MODULE_CCLK_6 = 0x3U,
0136   LPC24XX_MODULE_CCLK_8 = 0x3U
0137 } lpc24xx_module_clock;
0138 
0139 #define LPC24XX_MODULE_CLOCK_MASK 0x3U
0140 
0141 typedef enum {
0142   LPC24XX_GPIO_DEFAULT = 0x0U,
0143   LPC24XX_GPIO_RESISTOR_PULL_UP = 0x0U,
0144   LPC24XX_GPIO_RESISTOR_NONE = 0x1U,
0145   LPC24XX_GPIO_RESISTOR_PULL_DOWN = 0x2U,
0146   LPC24XX_GPIO_INPUT = 0x0U,
0147   #ifdef ARM_MULTILIB_ARCH_V7M
0148     LPC17XX_GPIO_REPEATER = 0x3U,
0149     LPC17XX_GPIO_HYSTERESIS = IOCON_HYS,
0150     LPC17XX_GPIO_INPUT_INVERT = IOCON_INV,
0151     LPC17XX_GPIO_FAST_MODE = IOCON_SLEW,
0152     LPC17XX_GPIO_OPEN_DRAIN = IOCON_OD,
0153     LPC17XX_GPIO_INPUT_FILTER = IOCON_FILTER,
0154   #endif
0155   LPC24XX_GPIO_OUTPUT = 0x8000U
0156 } lpc24xx_gpio_settings;
0157 
0158 rtems_status_code lpc24xx_module_enable(
0159   lpc24xx_module module,
0160   lpc24xx_module_clock clock
0161 );
0162 
0163 rtems_status_code lpc24xx_module_disable(
0164   lpc24xx_module module
0165 );
0166 
0167 bool lpc24xx_module_is_enabled(lpc24xx_module module);
0168 
0169 rtems_status_code lpc24xx_gpio_config(
0170   unsigned index,
0171   lpc24xx_gpio_settings settings
0172 );
0173 
0174 static inline void lpc24xx_gpio_set(unsigned index)
0175 {
0176   if (index <= LPC24XX_IO_INDEX_MAX) {
0177     unsigned port = LPC24XX_IO_PORT(index);
0178     unsigned bit = LPC24XX_IO_PORT_BIT(index);
0179 
0180     LPC24XX_FIO [port].set = 1U << bit;
0181   }
0182 }
0183 
0184 static inline void lpc24xx_gpio_clear(unsigned index)
0185 {
0186   if (index <= LPC24XX_IO_INDEX_MAX) {
0187     unsigned port = LPC24XX_IO_PORT(index);
0188     unsigned bit = LPC24XX_IO_PORT_BIT(index);
0189 
0190     LPC24XX_FIO [port].clr = 1U << bit;
0191   }
0192 }
0193 
0194 static inline void lpc24xx_gpio_write(unsigned index, bool value)
0195 {
0196   if (value) {
0197     lpc24xx_gpio_set(index);
0198   } else {
0199     lpc24xx_gpio_clear(index);
0200   }
0201 }
0202 
0203 static inline bool lpc24xx_gpio_get(unsigned index)
0204 {
0205   if (index <= LPC24XX_IO_INDEX_MAX) {
0206     unsigned port = LPC24XX_IO_PORT(index);
0207     unsigned bit = LPC24XX_IO_PORT_BIT(index);
0208 
0209     return (LPC24XX_FIO [port].pin & (1U << bit)) != 0;
0210   } else {
0211     return false;
0212   }
0213 }
0214 
0215 typedef enum {
0216   /**
0217    * @brief Sets the pin function.
0218    */
0219   LPC24XX_PIN_SET_FUNCTION,
0220 
0221   /**
0222    * @brief Checks if all pins are configured with the specified function.
0223    */
0224   LPC24XX_PIN_CHECK_FUNCTION,
0225 
0226   /**
0227    * @brief Configures the pins as input.
0228    */
0229   LPC24XX_PIN_SET_INPUT,
0230 
0231   /**
0232    * @brief Checks if all pins are configured as input.
0233    */
0234   LPC24XX_PIN_CHECK_INPUT
0235 } lpc24xx_pin_action;
0236 
0237 typedef union {
0238   struct {
0239     uint16_t port : 3;
0240     uint16_t port_bit : 5;
0241     uint16_t function : 3;
0242     uint16_t type : 4;
0243     uint16_t range : 1;
0244   } fields;
0245   uint16_t value;
0246 } lpc24xx_pin_range;
0247 
0248 typedef enum {
0249   LPC24XX_PIN_FUNCTION_00,
0250   LPC24XX_PIN_FUNCTION_01,
0251   LPC24XX_PIN_FUNCTION_10,
0252   LPC24XX_PIN_FUNCTION_11
0253 } lpc24xx_pin_function;
0254 
0255 typedef enum {
0256   LPC17XX_PIN_TYPE_DEFAULT,
0257   LPC17XX_PIN_TYPE_ADC,
0258   LPC17XX_PIN_TYPE_DAC,
0259   LPC17XX_PIN_TYPE_I2C,
0260   LPC17XX_PIN_TYPE_I2C_FAST_PLUS,
0261   LPC17XX_PIN_TYPE_OPEN_DRAIN,
0262   LPC17XX_PIN_TYPE_FAST_SLEW_RATE
0263 } lpc17xx_pin_type;
0264 
0265 #ifdef ARM_MULTILIB_ARCH_V4
0266   #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f0, 0, 0 } }
0267   #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f0, t, 0 } }
0268   #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
0269     { { p, i, f0, 0, 0 } }, { { p, j, f0, 0, 1 } }
0270   #define LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, f0, f1, t) \
0271     { { p, i, f0, t, 0 } }, { { p, j, f0, t, 1 } }
0272 #else
0273   #define LPC24XX_PIN(p, i, f0, f1) { { p, i, f1, 0, 0 } }
0274   #define LPC24XX_PIN_WITH_TYPE(p, i, f0, f1, t) { { p, i, f1, t, 0 } }
0275   #define LPC24XX_PIN_RANGE(p, i, j, f0, f1) \
0276     { { p, i, f1, 0, 0 } }, { { p, j, f1, 0, 1 } }
0277   #define LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, f0, f1, t) \
0278     { { p, i, f1, t, 0 } }, { { p, j, f1, t, 1 } }
0279 #endif
0280 
0281 #define LPC24XX_PIN_TERMINAL { { 0x7, 0x1f, 0x7, 0xf, 0x1 } }
0282 
0283 /**
0284  * @brief Performs the @a action with the @a pins
0285  *
0286  * @code
0287  * #include <assert.h>
0288  * #include <bsp/io.h>
0289  * 
0290  * void example(void)
0291  * {
0292  *   static const lpc24xx_pin_range pins [] = {
0293  *     LPC24XX_PIN_I2S_RX_CLK_P0_4,
0294  *     LPC24XX_PIN_I2S_RX_WS_P0_5,
0295  *     LPC24XX_PIN_I2S_RX_SDA_P0_6,
0296  *     LPC24XX_PIN_I2S_TX_CLK_P0_7,
0297  *     LPC24XX_PIN_I2S_TX_WS_P0_8,
0298  *     LPC24XX_PIN_I2S_TX_SDA_P0_9,
0299  *     LPC24XX_PIN_TERMINAL
0300  *   };
0301  *   rtems_status_code sc = RTEMS_SUCCESSFUL;
0302  * 
0303  *   sc = lpc24xx_module_enable(LPC24XX_MODULE_I2S, LPC24XX_MODULE_CCLK_8);
0304  *   assert(sc == RTEMS_SUCCESSFUL);
0305  *   sc = lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
0306  *   assert(sc == RTEMS_SUCCESSFUL);
0307  * }
0308  * @endcode
0309  *
0310  * @retval RTEMS_SUCCESSFUL Successful operation.
0311  * @retval RTEMS_IO_ERROR Check failed.
0312  * @retval RTEMS_NOT_DEFINED Invalid action.
0313  */
0314 rtems_status_code lpc24xx_pin_config(
0315   const lpc24xx_pin_range *pins,
0316   lpc24xx_pin_action action
0317 );
0318 
0319 /**
0320  * @brief Returns the first pin index of a pin range.
0321  */
0322 static inline unsigned lpc24xx_pin_get_first_index(
0323   const lpc24xx_pin_range *range
0324 )
0325 {
0326   return LPC24XX_IO_INDEX_BY_PORT(range->fields.port, range->fields.port_bit);
0327 }
0328 
0329 /**
0330  * @name ADC Pins
0331  *
0332  * @{
0333  */
0334 
0335 #define LPC24XX_PIN_ADC_CHANNEL_0 \
0336   LPC24XX_PIN_WITH_TYPE(0, 23, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
0337 #define LPC24XX_PIN_ADC_CHANNEL_1 \
0338   LPC24XX_PIN_WITH_TYPE(0, 24, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
0339 #define LPC24XX_PIN_ADC_CHANNEL_2 \
0340   LPC24XX_PIN_WITH_TYPE(0, 25, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
0341 #define LPC24XX_PIN_ADC_CHANNEL_3 \
0342   LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_ADC)
0343 #define LPC24XX_PIN_ADC_CHANNEL_4 \
0344   LPC24XX_PIN_WITH_TYPE(1, 30, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
0345 #define LPC24XX_PIN_ADC_CHANNEL_5 \
0346   LPC24XX_PIN_WITH_TYPE(1, 31, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
0347 #define LPC24XX_PIN_ADC_CHANNEL_6 \
0348   LPC24XX_PIN_WITH_TYPE(0, 12, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
0349 #define LPC24XX_PIN_ADC_CHANNEL_7 \
0350   LPC24XX_PIN_WITH_TYPE(0, 13, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_ADC)
0351 
0352 /** @} */
0353 
0354 /**
0355  * @name CAN 0 Pins
0356  *
0357  * @{
0358  */
0359 
0360 #define LPC24XX_PIN_CAN_0_RD_P0_0 \
0361   LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_01, 1)
0362 
0363 #define LPC24XX_PIN_CAN_0_RD_P0_21 \
0364   LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_11, 4)
0365 
0366 #define LPC24XX_PIN_CAN_0_TD_P0_1 \
0367   LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_01, 1)
0368 
0369 #define LPC24XX_PIN_CAN_0_TD_P0_22 \
0370   LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_11, 4)
0371 
0372 /** @} */
0373 
0374 /**
0375  * @name CAN 1 Pins
0376  *
0377  * @{
0378  */
0379 
0380 #define LPC24XX_PIN_CAN_1_RD_P0_4 \
0381   LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_10, 2)
0382 
0383 #define LPC24XX_PIN_CAN_1_RD_P2_7 \
0384   LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_01, 1)
0385 
0386 #define LPC24XX_PIN_CAN_1_TD_P0_5 \
0387   LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_10, 2)
0388 
0389 #define LPC24XX_PIN_CAN_1_TD_P2_8 \
0390   LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_01, 1)
0391 
0392 /** @} */
0393 
0394 /**
0395  * @name DAC Pins
0396  *
0397  * @{
0398  */
0399 
0400 #define LPC24XX_PIN_DAC \
0401   LPC24XX_PIN_WITH_TYPE(0, 26, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_DAC)
0402 
0403 /** @} */
0404 
0405 /**
0406  * @name Ethernet Pins
0407  *
0408  * @{
0409  */
0410 
0411 #define LPC24XX_PIN_ETHERNET_MII \
0412   LPC24XX_PIN_RANGE(1, 0, 17, LPC24XX_PIN_FUNCTION_01, 1)
0413 
0414 #define LPC24XX_PIN_ETHERNET_RMII_0 \
0415   LPC24XX_PIN_RANGE(1, 0, 1, LPC24XX_PIN_FUNCTION_01, 1)
0416 #define LPC24XX_PIN_ETHERNET_RMII_1 \
0417   LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_01, 1)
0418 #define LPC24XX_PIN_ETHERNET_RMII_2 \
0419   LPC24XX_PIN_RANGE(1, 8, 10, LPC24XX_PIN_FUNCTION_01, 1)
0420 #define LPC24XX_PIN_ETHERNET_RMII_3 \
0421   LPC24XX_PIN_RANGE(1, 14, 17, LPC24XX_PIN_FUNCTION_01, 1)
0422 
0423 /** @} */
0424 
0425 /**
0426  * @name External Interrupt Pins
0427  *
0428  * @{
0429  */
0430 
0431 #define LPC24XX_PIN_EINT_0 \
0432   LPC24XX_PIN(2, 10, LPC24XX_PIN_FUNCTION_01, 1)
0433 #define LPC24XX_PIN_EINT_1 \
0434   LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 1)
0435 #define LPC24XX_PIN_EINT_2 \
0436   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 1)
0437 #define LPC24XX_PIN_EINT_3 \
0438   LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 1)
0439 
0440 /** @} */
0441 
0442 /**
0443  * @name External Memory Controller (EMC) Pins
0444  *
0445  * @{
0446  */
0447 
0448 #define LPC24XX_PIN_EMC(p, i) \
0449   LPC24XX_PIN_WITH_TYPE(p, i, LPC24XX_PIN_FUNCTION_01, 1, \
0450     LPC17XX_PIN_TYPE_FAST_SLEW_RATE)
0451 
0452 #define LPC24XX_PIN_EMC_RANGE(p, i, j) \
0453   LPC24XX_PIN_RANGE_WITH_TYPE(p, i, j, LPC24XX_PIN_FUNCTION_01, 1, \
0454     LPC17XX_PIN_TYPE_FAST_SLEW_RATE)
0455 
0456 #define LPC24XX_PIN_EMC_CS_0 LPC24XX_PIN_EMC(4, 30)
0457 #define LPC24XX_PIN_EMC_CS_1 LPC24XX_PIN_EMC(4, 31)
0458 #define LPC24XX_PIN_EMC_CS_2 LPC24XX_PIN_EMC(2, 14)
0459 #define LPC24XX_PIN_EMC_CS_3 LPC24XX_PIN_EMC(2, 15)
0460 
0461 #define LPC24XX_PIN_EMC_DYCS_0 LPC24XX_PIN_EMC(2, 20)
0462 #define LPC24XX_PIN_EMC_DYCS_1 LPC24XX_PIN_EMC(2, 21)
0463 #define LPC24XX_PIN_EMC_DYCS_2 LPC24XX_PIN_EMC(2, 22)
0464 #define LPC24XX_PIN_EMC_DYCS_3 LPC24XX_PIN_EMC(2, 23)
0465 
0466 #define LPC24XX_PIN_EMC_OE LPC24XX_PIN_EMC(4, 24)
0467 #define LPC24XX_PIN_EMC_WE LPC24XX_PIN_EMC(4, 25)
0468 #define LPC24XX_PIN_EMC_CAS LPC24XX_PIN_EMC(2, 16)
0469 #define LPC24XX_PIN_EMC_RAS LPC24XX_PIN_EMC(2, 17)
0470 
0471 #define LPC24XX_PIN_EMC_CLK_0 LPC24XX_PIN_EMC(2, 18)
0472 #define LPC24XX_PIN_EMC_CLK_1 LPC24XX_PIN_EMC(2, 19)
0473 
0474 #define LPC24XX_PIN_EMC_CKE_0 LPC24XX_PIN_EMC(2, 24)
0475 #define LPC24XX_PIN_EMC_CKE_1 LPC24XX_PIN_EMC(2, 25)
0476 #define LPC24XX_PIN_EMC_CKE_2 LPC24XX_PIN_EMC(2, 26)
0477 #define LPC24XX_PIN_EMC_CKE_3 LPC24XX_PIN_EMC(2, 27)
0478 
0479 #define LPC24XX_PIN_EMC_DQM_0 LPC24XX_PIN_EMC(2, 28)
0480 #define LPC24XX_PIN_EMC_DQM_1 LPC24XX_PIN_EMC(2, 29)
0481 #define LPC24XX_PIN_EMC_DQM_2 LPC24XX_PIN_EMC(2, 30)
0482 #define LPC24XX_PIN_EMC_DQM_3 LPC24XX_PIN_EMC(2, 31)
0483 
0484 #define LPC24XX_PIN_EMC_BLS0 LPC24XX_PIN_EMC(4, 26)
0485 #define LPC24XX_PIN_EMC_BLS1 LPC24XX_PIN_EMC(4, 27)
0486 #define LPC24XX_PIN_EMC_BLS2 LPC24XX_PIN_EMC(4, 28)
0487 #define LPC24XX_PIN_EMC_BLS3 LPC24XX_PIN_EMC(4, 29)
0488 
0489 #define LPC24XX_PIN_EMC_D_0_15 LPC24XX_PIN_EMC_RANGE(3, 0, 15)
0490 #define LPC24XX_PIN_EMC_D_15_31 LPC24XX_PIN_EMC_RANGE(3, 15, 31)
0491 #define LPC24XX_PIN_EMC_D_0_31 LPC24XX_PIN_EMC_RANGE(3, 0, 31)
0492 
0493 #define LPC24XX_PIN_EMC_A_0_12 LPC24XX_PIN_EMC_RANGE(4, 0, 12)
0494 #define LPC24XX_PIN_EMC_A_0_13 LPC24XX_PIN_EMC_RANGE(4, 0, 13)
0495 #define LPC24XX_PIN_EMC_A_0_14 LPC24XX_PIN_EMC_RANGE(4, 0, 14)
0496 #define LPC24XX_PIN_EMC_A_0_15 LPC24XX_PIN_EMC_RANGE(4, 0, 15)
0497 #define LPC24XX_PIN_EMC_A_0_16 \
0498   LPC24XX_PIN_EMC_A_0_15, \
0499   LPC24XX_PIN_EMC(4, 16)
0500 #define LPC24XX_PIN_EMC_A_0_17 \
0501   LPC24XX_PIN_EMC_A_0_15, \
0502   LPC24XX_PIN_EMC_RANGE(4, 16, 17)
0503 #define LPC24XX_PIN_EMC_A_0_18 \
0504   LPC24XX_PIN_EMC_A_0_15, \
0505   LPC24XX_PIN_EMC_RANGE(4, 16, 18)
0506 #define LPC24XX_PIN_EMC_A_0_19 \
0507   LPC24XX_PIN_EMC_A_0_15, \
0508   LPC24XX_PIN_EMC_RANGE(4, 16, 19)
0509 #define LPC24XX_PIN_EMC_A_0_20 \
0510   LPC24XX_PIN_EMC_A_0_15, \
0511   LPC24XX_PIN_EMC_RANGE(4, 16, 20)
0512 #define LPC24XX_PIN_EMC_A_0_21 \
0513   LPC24XX_PIN_EMC_A_0_15, \
0514   LPC24XX_PIN_EMC_RANGE(4, 16, 21)
0515 #define LPC24XX_PIN_EMC_A_0_22 \
0516   LPC24XX_PIN_EMC_A_0_15, \
0517   LPC24XX_PIN_EMC_RANGE(4, 16, 22)
0518 #define LPC24XX_PIN_EMC_A_0_23 \
0519   LPC24XX_PIN_EMC_A_0_15, \
0520   LPC24XX_PIN_EMC_RANGE(4, 16, 23)
0521 #define LPC24XX_PIN_EMC_A_0_24 \
0522   LPC24XX_PIN_EMC_A_0_23, \
0523   LPC24XX_PIN_EMC(5, 24)
0524 #define LPC24XX_PIN_EMC_A_0_25 \
0525   LPC24XX_PIN_EMC_A_0_23, \
0526   LPC24XX_PIN_EMC_RANGE(5, 24, 25)
0527 
0528 /** @} */
0529 
0530 /**
0531  * @name I2C 0 Pins
0532  *
0533  * @{
0534  */
0535 
0536 #define LPC24XX_PIN_I2C_0_SDA \
0537   LPC24XX_PIN_WITH_TYPE(0, 27, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
0538 #define LPC24XX_PIN_I2C_0_SCL \
0539   LPC24XX_PIN_WITH_TYPE(0, 28, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_I2C)
0540 
0541 /** @} */
0542 
0543 /**
0544  * @name I2C 1 Pins
0545  *
0546  * @{
0547  */
0548 
0549 #define LPC24XX_PIN_I2C_1_SDA_P0_0 \
0550   LPC24XX_PIN_WITH_TYPE(0, 0, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
0551 #define LPC24XX_PIN_I2C_1_SDA_P0_19 \
0552   LPC24XX_PIN_WITH_TYPE(0, 19, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
0553 #define LPC24XX_PIN_I2C_1_SDA_P2_14 \
0554   LPC24XX_PIN_WITH_TYPE(2, 14, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
0555 
0556 #define LPC24XX_PIN_I2C_1_SCL_P0_1 \
0557   LPC24XX_PIN_WITH_TYPE(0, 1, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
0558 #define LPC24XX_PIN_I2C_1_SCL_P0_20 \
0559   LPC24XX_PIN_WITH_TYPE(0, 20, LPC24XX_PIN_FUNCTION_11, 3, LPC17XX_PIN_TYPE_I2C)
0560 #define LPC24XX_PIN_I2C_1_SCL_P2_15 \
0561   LPC24XX_PIN_WITH_TYPE(2, 15, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
0562 
0563 /** @} */
0564 
0565 /**
0566  * @name I2C 2 Pins
0567  *
0568  * @{
0569  */
0570 
0571 #define LPC24XX_PIN_I2C_2_SDA_P0_10 \
0572   LPC24XX_PIN_WITH_TYPE(0, 10, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
0573 #define LPC24XX_PIN_I2C_2_SDA_P2_30 \
0574   LPC24XX_PIN_WITH_TYPE(2, 30, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
0575 #define LPC24XX_PIN_I2C_2_SDA_P4_20 \
0576   LPC24XX_PIN_WITH_TYPE(4, 20, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
0577 
0578 #define LPC24XX_PIN_I2C_2_SCL_P0_11 \
0579   LPC24XX_PIN_WITH_TYPE(0, 11, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
0580 #define LPC24XX_PIN_I2C_2_SCL_P2_31 \
0581   LPC24XX_PIN_WITH_TYPE(2, 31, LPC24XX_PIN_FUNCTION_11, 2, LPC17XX_PIN_TYPE_I2C)
0582 #define LPC24XX_PIN_I2C_2_SCL_P4_21 \
0583   LPC24XX_PIN_WITH_TYPE(4, 21, LPC24XX_PIN_FUNCTION_10, 2, LPC17XX_PIN_TYPE_I2C)
0584 
0585 /** @} */
0586 
0587 /**
0588  * @name I2S Pins
0589  *
0590  * @{
0591  */
0592 
0593 #define LPC24XX_PIN_I2S_RX_CLK_P0_4 \
0594   LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 1)
0595 #define LPC24XX_PIN_I2S_RX_CLK_P0_23 \
0596   LPC24XX_PIN(0, 23, LPC24XX_PIN_FUNCTION_10, 2)
0597 
0598 #define LPC24XX_PIN_I2S_RX_WS_P0_5 \
0599   LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 1)
0600 #define LPC24XX_PIN_I2S_RX_WS_P0_24 \
0601   LPC24XX_PIN(0, 24, LPC24XX_PIN_FUNCTION_10, 2)
0602 
0603 #define LPC24XX_PIN_I2S_RX_SDA_P0_6 \
0604   LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 1)
0605 #define LPC24XX_PIN_I2S_RX_SDA_P0_25 \
0606   LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_10, 2)
0607 
0608 #define LPC24XX_PIN_I2S_TX_CLK_P0_7 \
0609   LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 1)
0610 #define LPC24XX_PIN_I2S_TX_CLK_P2_11 \
0611   LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_11, 3)
0612 
0613 #define LPC24XX_PIN_I2S_TX_WS_P0_8 \
0614   LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 1)
0615 #define LPC24XX_PIN_I2S_TX_WS_P2_12 \
0616   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_11, 3)
0617 
0618 #define LPC24XX_PIN_I2S_TX_SDA_P0_9 \
0619   LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 1)
0620 #define LPC24XX_PIN_I2S_TX_SDA_P2_13 \
0621   LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_11, 3)
0622 
0623 /** @} */
0624 
0625 /**
0626  * @name LCD Pins
0627  *
0628  * @{
0629  */
0630 
0631 #define LPC24XX_PIN_LCD_PWR \
0632   LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_11, 7)
0633 #define LPC24XX_PIN_LCD_LE \
0634   LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_11, 7)
0635 #define LPC24XX_PIN_LCD_DCLK \
0636   LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_11, 7)
0637 #define LPC24XX_PIN_LCD_FP \
0638   LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_11, 7)
0639 #define LPC24XX_PIN_LCD_ENAB_M \
0640   LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_11, 7)
0641 #define LPC24XX_PIN_LCD_LP \
0642   LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_11, 7)
0643 #define LPC24XX_PIN_LCD_CLKIN \
0644   LPC24XX_PIN(2, 11, LPC24XX_PIN_FUNCTION_01, 7)
0645 
0646 #define LPC24XX_PIN_LCD_VD_0_P0_4 \
0647   LPC24XX_PIN(0, 4, LPC24XX_PIN_FUNCTION_01, 7)
0648 #define LPC24XX_PIN_LCD_VD_0_P2_6 \
0649   LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 6)
0650 #define LPC24XX_PIN_LCD_VD_1_P0_5 \
0651   LPC24XX_PIN(0, 5, LPC24XX_PIN_FUNCTION_01, 7)
0652 #define LPC24XX_PIN_LCD_VD_1_P2_7 \
0653   LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 6)
0654 #define LPC24XX_PIN_LCD_VD_2_P2_8 \
0655   LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 6)
0656 #define LPC24XX_PIN_LCD_VD_2_P4_28 \
0657   LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 7)
0658 #define LPC24XX_PIN_LCD_VD_3_P2_9 \
0659   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 6)
0660 #define LPC24XX_PIN_LCD_VD_3_P2_12 \
0661   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 5)
0662 #define LPC24XX_PIN_LCD_VD_3_P4_29 \
0663   LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 7)
0664 #define LPC24XX_PIN_LCD_VD_4_P2_6 \
0665   LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_11, 7)
0666 #define LPC24XX_PIN_LCD_VD_4_P2_12 \
0667   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 4)
0668 #define LPC24XX_PIN_LCD_VD_5_P2_7 \
0669   LPC24XX_PIN(2, 7, LPC24XX_PIN_FUNCTION_11, 7)
0670 #define LPC24XX_PIN_LCD_VD_5_P2_13 \
0671   LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 5)
0672 #define LPC24XX_PIN_LCD_VD_6_P1_20 \
0673   LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 6)
0674 #define LPC24XX_PIN_LCD_VD_6_P2_8 \
0675   LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_11, 7)
0676 #define LPC24XX_PIN_LCD_VD_6_P4_28 \
0677   LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 5)
0678 #define LPC24XX_PIN_LCD_VD_7_P1_21 \
0679   LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 6)
0680 #define LPC24XX_PIN_LCD_VD_7_P2_9 \
0681   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_11, 7)
0682 #define LPC24XX_PIN_LCD_VD_7_P4_29 \
0683   LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 5)
0684 #define LPC24XX_PIN_LCD_VD_8_P0_6 \
0685   LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_01, 7)
0686 #define LPC24XX_PIN_LCD_VD_8_P1_22 \
0687   LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 6)
0688 #define LPC24XX_PIN_LCD_VD_8_P2_12 \
0689   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 6)
0690 #define LPC24XX_PIN_LCD_VD_9_P0_7 \
0691   LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_01, 7)
0692 #define LPC24XX_PIN_LCD_VD_9_P1_23 \
0693   LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 6)
0694 #define LPC24XX_PIN_LCD_VD_9_P2_13 \
0695   LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 6)
0696 #define LPC24XX_PIN_LCD_VD_10_P1_20 \
0697   LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 7)
0698 #define LPC24XX_PIN_LCD_VD_10_P1_24 \
0699   LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 6)
0700 #define LPC24XX_PIN_LCD_VD_10_P4_28 \
0701   LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_10, 6)
0702 #define LPC24XX_PIN_LCD_VD_11_P1_21 \
0703   LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 7)
0704 #define LPC24XX_PIN_LCD_VD_11_P1_25 \
0705   LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 6)
0706 #define LPC24XX_PIN_LCD_VD_11_P4_29 \
0707   LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_10, 6)
0708 #define LPC24XX_PIN_LCD_VD_12_P1_22 \
0709   LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 7)
0710 #define LPC24XX_PIN_LCD_VD_12_P1_26 \
0711   LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 6)
0712 #define LPC24XX_PIN_LCD_VD_13_P1_23 \
0713   LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 7)
0714 #define LPC24XX_PIN_LCD_VD_13_P1_27 \
0715   LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 6)
0716 #define LPC24XX_PIN_LCD_VD_14_P1_24 \
0717   LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 7)
0718 #define LPC24XX_PIN_LCD_VD_14_P1_28 \
0719   LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 6)
0720 #define LPC24XX_PIN_LCD_VD_15_P1_25 \
0721   LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 7)
0722 #define LPC24XX_PIN_LCD_VD_15_P1_29 \
0723   LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 6)
0724 #define LPC24XX_PIN_LCD_VD_16_P0_8 \
0725   LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_01, 7)
0726 #define LPC24XX_PIN_LCD_VD_17_P0_9 \
0727   LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_01, 7)
0728 #define LPC24XX_PIN_LCD_VD_18_P2_12 \
0729   LPC24XX_PIN(2, 12, LPC24XX_PIN_FUNCTION_01, 7)
0730 #define LPC24XX_PIN_LCD_VD_19_P2_13 \
0731   LPC24XX_PIN(2, 13, LPC24XX_PIN_FUNCTION_01, 7)
0732 #define LPC24XX_PIN_LCD_VD_20_P1_26 \
0733   LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 7)
0734 #define LPC24XX_PIN_LCD_VD_21_P1_27 \
0735   LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 7)
0736 #define LPC24XX_PIN_LCD_VD_22_P1_28 \
0737   LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 7)
0738 #define LPC24XX_PIN_LCD_VD_23_P1_29 \
0739   LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 7)
0740 
0741 /** @} */
0742 
0743 /**
0744  * @name PWM 0 Pins
0745  *
0746  * @{
0747  */
0748 
0749 #define LPC24XX_PIN_PWM_0_CHANNEL_1_P1_2 \
0750   LPC24XX_PIN(1, 2, LPC24XX_PIN_FUNCTION_11, 3)
0751 #define LPC24XX_PIN_PWM_0_CHANNEL_1_P3_16 \
0752   LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_10, 2)
0753 
0754 #define LPC24XX_PIN_PWM_0_CHANNEL_2_P1_3 \
0755   LPC24XX_PIN(1, 3, LPC24XX_PIN_FUNCTION_11, 3)
0756 #define LPC24XX_PIN_PWM_0_CHANNEL_2_P3_17 \
0757   LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_10, 2)
0758 
0759 #define LPC24XX_PIN_PWM_0_CHANNEL_3_P1_5 \
0760   LPC24XX_PIN(1, 5, LPC24XX_PIN_FUNCTION_11, 3)
0761 #define LPC24XX_PIN_PWM_0_CHANNEL_3_P3_18 \
0762   LPC24XX_PIN(3, 18, LPC24XX_PIN_FUNCTION_10, 2)
0763 
0764 #define LPC24XX_PIN_PWM_0_CHANNEL_4_P1_6 \
0765   LPC24XX_PIN(1, 6, LPC24XX_PIN_FUNCTION_11, 3)
0766 #define LPC24XX_PIN_PWM_0_CHANNEL_4_P3_19 \
0767   LPC24XX_PIN(3, 19, LPC24XX_PIN_FUNCTION_10, 2)
0768 
0769 #define LPC24XX_PIN_PWM_0_CHANNEL_5_P1_7 \
0770   LPC24XX_PIN(1, 7, LPC24XX_PIN_FUNCTION_11, 3)
0771 #define LPC24XX_PIN_PWM_0_CHANNEL_5_P3_20 \
0772   LPC24XX_PIN(3, 20, LPC24XX_PIN_FUNCTION_10, 2)
0773 
0774 #define LPC24XX_PIN_PWM_0_CHANNEL_6_P1_11 \
0775   LPC24XX_PIN(1, 11, LPC24XX_PIN_FUNCTION_11, 3)
0776 #define LPC24XX_PIN_PWM_0_CHANNEL_6_P3_21 \
0777   LPC24XX_PIN(3, 21, LPC24XX_PIN_FUNCTION_10, 2)
0778 
0779 #define LPC24XX_PIN_PWM_0_CAPTURE_0_P1_12 \
0780   LPC24XX_PIN(1, 12, LPC24XX_PIN_FUNCTION_11, 3)
0781 #define LPC24XX_PIN_PWM_0_CAPTURE_0_P3_22 \
0782   LPC24XX_PIN(3, 22, LPC24XX_PIN_FUNCTION_10, 2)
0783 
0784 /** @} */
0785 
0786 /**
0787  * @name PWM 1 Pins
0788  *
0789  * @{
0790  */
0791 
0792 #define LPC24XX_PIN_PWM_1_CHANNEL_1_P1_18 \
0793   LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_10, 2)
0794 #define LPC24XX_PIN_PWM_1_CHANNEL_1_P2_0 \
0795   LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_01, 1)
0796 #define LPC24XX_PIN_PWM_1_CHANNEL_1_P3_24 \
0797   LPC24XX_PIN(3, 24, LPC24XX_PIN_FUNCTION_11, 2)
0798 
0799 #define LPC24XX_PIN_PWM_1_CHANNEL_2_P1_20 \
0800   LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_10, 2)
0801 #define LPC24XX_PIN_PWM_1_CHANNEL_2_P2_1 \
0802   LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_01, 1)
0803 #define LPC24XX_PIN_PWM_1_CHANNEL_2_P3_25 \
0804   LPC24XX_PIN(3, 25, LPC24XX_PIN_FUNCTION_11, 2)
0805 
0806 #define LPC24XX_PIN_PWM_1_CHANNEL_3_P1_21 \
0807   LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_10, 2)
0808 #define LPC24XX_PIN_PWM_1_CHANNEL_3_P2_2 \
0809   LPC24XX_PIN(2, 2, LPC24XX_PIN_FUNCTION_01, 1)
0810 #define LPC24XX_PIN_PWM_1_CHANNEL_3_P3_26 \
0811   LPC24XX_PIN(3, 26, LPC24XX_PIN_FUNCTION_11, 2)
0812 
0813 #define LPC24XX_PIN_PWM_1_CHANNEL_4_P1_23 \
0814   LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_10, 2)
0815 #define LPC24XX_PIN_PWM_1_CHANNEL_4_P2_3 \
0816   LPC24XX_PIN(2, 3, LPC24XX_PIN_FUNCTION_01, 1)
0817 #define LPC24XX_PIN_PWM_1_CHANNEL_4_P3_27 \
0818   LPC24XX_PIN(3, 27, LPC24XX_PIN_FUNCTION_11, 2)
0819 
0820 #define LPC24XX_PIN_PWM_1_CHANNEL_5_P1_24 \
0821   LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_10, 2)
0822 #define LPC24XX_PIN_PWM_1_CHANNEL_5_P2_4 \
0823   LPC24XX_PIN(2, 4, LPC24XX_PIN_FUNCTION_01, 1)
0824 #define LPC24XX_PIN_PWM_1_CHANNEL_5_P3_28 \
0825   LPC24XX_PIN(3, 28, LPC24XX_PIN_FUNCTION_11, 2)
0826 
0827 #define LPC24XX_PIN_PWM_1_CHANNEL_6_P1_26 \
0828   LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_10, 2)
0829 #define LPC24XX_PIN_PWM_1_CHANNEL_6_P2_5 \
0830   LPC24XX_PIN(2, 5, LPC24XX_PIN_FUNCTION_01, 1)
0831 #define LPC24XX_PIN_PWM_1_CHANNEL_6_P3_29 \
0832   LPC24XX_PIN(3, 29, LPC24XX_PIN_FUNCTIO9_11, 2)
0833 
0834 #define LPC24XX_PIN_PWM_1_CAPTURE_0_P1_28 \
0835   LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_10, 2)
0836 #define LPC24XX_PIN_PWM_1_CAPTURE_0_P2_7 \
0837   LPC24XX_PIN(2, 6, LPC24XX_PIN_FUNCTION_01, 1)
0838 #define LPC24XX_PIN_PWM_1_CAPTURE_0_P3_23 \
0839   LPC24XX_PIN(3, 23, LPC24XX_PIN_FUNCTION_11, 2)
0840 
0841 #define LPC24XX_PIN_PWM_1_CAPTURE_1_P1_29 \
0842   LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_10, 2)
0843 
0844 /** @} */
0845 
0846 #ifdef ARM_MULTILIB_ARCH_V4
0847 
0848 /**
0849  * @name SPI Pins
0850  *
0851  * @{
0852  */
0853 
0854 #define LPC24XX_PIN_SPI_SCK \
0855   LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_11)
0856 #define LPC24XX_PIN_SPI_SSEL \
0857   LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_11)
0858 #define LPC24XX_PIN_SPI_MISO \
0859   LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_11)
0860 #define LPC24XX_PIN_SPI_MOSI \
0861   LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_11)
0862 
0863 /** @} */
0864 
0865 #endif /* ARM_MULTILIB_ARCH_V4 */
0866 
0867 /**
0868  * @name SSP 0 Pins
0869  *
0870  * @{
0871  */
0872 
0873 #define LPC24XX_PIN_SSP_0_SCK_P0_15 \
0874   LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_10, 2)
0875 #define LPC24XX_PIN_SSP_0_SCK_P1_20 \
0876   LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_11, 5)
0877 #define LPC24XX_PIN_SSP_0_SCK_P2_22 \
0878   LPC24XX_PIN(2, 22, LPC24XX_PIN_FUNCTION_11, 2)
0879 
0880 #define LPC24XX_PIN_SSP_0_SSEL_P0_16 \
0881   LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_10, 2)
0882 #define LPC24XX_PIN_SSP_0_SSEL_P1_21 \
0883   LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_11, 3)
0884 #define LPC24XX_PIN_SSP_0_SSEL_P2_23 \
0885   LPC24XX_PIN(2, 23, LPC24XX_PIN_FUNCTION_11, 2)
0886 
0887 #define LPC24XX_PIN_SSP_0_MISO_P0_17 \
0888   LPC24XX_PIN(0, 17, LPC24XX_PIN_FUNCTION_10, 2)
0889 #define LPC24XX_PIN_SSP_0_MISO_P1_23 \
0890   LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_11, 5)
0891 #define LPC24XX_PIN_SSP_0_MISO_P2_26 \
0892   LPC24XX_PIN(2, 26, LPC24XX_PIN_FUNCTION_11, 2)
0893 
0894 #define LPC24XX_PIN_SSP_0_MOSI_P0_18 \
0895   LPC24XX_PIN(0, 18, LPC24XX_PIN_FUNCTION_10, 2)
0896 #define LPC24XX_PIN_SSP_0_MOSI_P1_24 \
0897   LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_11, 5)
0898 #define LPC24XX_PIN_SSP_0_MOSI_P2_27 \
0899   LPC24XX_PIN(2, 27, LPC24XX_PIN_FUNCTION_11, 2)
0900 
0901 /** @} */
0902 
0903 /**
0904  * @name SSP 1 Pins
0905  *
0906  * @{
0907  */
0908 
0909 #define LPC24XX_PIN_SSP_1_SCK_P0_6 \
0910   LPC24XX_PIN(0, 7, LPC24XX_PIN_FUNCTION_10, 2)
0911 #define LPC24XX_PIN_SSP_1_SCK_P0_12 \
0912   LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_10, 2)
0913 #define LPC24XX_PIN_SSP_1_SCK_P4_20 \
0914   LPC24XX_PIN(4, 20, LPC24XX_PIN_FUNCTION_11, 3)
0915 
0916 #define LPC24XX_PIN_SSP_1_SSEL_P0_7 \
0917   LPC24XX_PIN(0, 6, LPC24XX_PIN_FUNCTION_10, 2)
0918 #define LPC24XX_PIN_SSP_1_SSEL_P0_13 \
0919   LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_11, 2)
0920 #define LPC24XX_PIN_SSP_1_SSEL_P4_21 \
0921   LPC24XX_PIN(4, 21, LPC24XX_PIN_FUNCTION_11, 3)
0922 
0923 #define LPC24XX_PIN_SSP_1_MISO_P0_8 \
0924   LPC24XX_PIN(0, 8, LPC24XX_PIN_FUNCTION_10, 2)
0925 #define LPC24XX_PIN_SSP_1_MISO_P0_14 \
0926   LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_10, 2)
0927 #define LPC24XX_PIN_SSP_1_MISO_P4_22 \
0928   LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_11, 3)
0929 
0930 #define LPC24XX_PIN_SSP_1_MOSI_P0_9 \
0931   LPC24XX_PIN(0, 9, LPC24XX_PIN_FUNCTION_10, 2)
0932 #define LPC24XX_PIN_SSP_1_MOSI_P1_31 \
0933   LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_10, 2)
0934 #define LPC24XX_PIN_SSP_1_MOSI_P4_23 \
0935   LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_11, 3)
0936 
0937 /** @} */
0938 
0939 #ifdef ARM_MULTILIB_ARCH_V7M
0940 
0941 /**
0942  * @name SSP 2 Pins
0943  *
0944  * @{
0945  */
0946 
0947 #define LPC24XX_PIN_SSP_2_SCK_P1_0 \
0948   LPC24XX_PIN(1, 0, LPC24XX_PIN_FUNCTION_00, 4)
0949 #define LPC24XX_PIN_SSP_2_SCK_P5_2 \
0950   LPC24XX_PIN(5, 2, LPC24XX_PIN_FUNCTION_00, 2)
0951 
0952 #define LPC24XX_PIN_SSP_2_SSEL_P1_8 \
0953   LPC24XX_PIN(1, 8, LPC24XX_PIN_FUNCTION_00, 4)
0954 #define LPC24XX_PIN_SSP_2_SSEL_P5_3 \
0955   LPC24XX_PIN(5, 3, LPC24XX_PIN_FUNCTION_00, 2)
0956 
0957 #define LPC24XX_PIN_SSP_2_MISO_P1_4 \
0958   LPC24XX_PIN(1, 4, LPC24XX_PIN_FUNCTION_00, 4)
0959 #define LPC24XX_PIN_SSP_2_MISO_P5_1 \
0960   LPC24XX_PIN(5, 1, LPC24XX_PIN_FUNCTION_00, 2)
0961 
0962 #define LPC24XX_PIN_SSP_2_MOSI_P1_1 \
0963   LPC24XX_PIN(1, 1, LPC24XX_PIN_FUNCTION_00, 4)
0964 #define LPC24XX_PIN_SSP_2_MOSI_P5_0 \
0965   LPC24XX_PIN(5, 0, LPC24XX_PIN_FUNCTION_00, 2)
0966 
0967 /** @} */
0968 
0969 #endif /* ARM_MULTILIB_ARCH_V7M */
0970 
0971 /**
0972  * @name UART 0 Pins
0973  *
0974  * @{
0975  */
0976 
0977 #define LPC24XX_PIN_UART_0_TXD \
0978   LPC24XX_PIN(0, 2, LPC24XX_PIN_FUNCTION_01, 1)
0979 
0980 #define LPC24XX_PIN_UART_0_RXD \
0981   LPC24XX_PIN(0, 3, LPC24XX_PIN_FUNCTION_01, 1)
0982 
0983 /** @} */
0984 
0985 /**
0986  * @name UART 1 Pins
0987  *
0988  * @{
0989  */
0990 
0991 #define LPC24XX_PIN_UART_1_TXD_P0_15 \
0992   LPC24XX_PIN(0, 15, LPC24XX_PIN_FUNCTION_01, 1)
0993 #define LPC24XX_PIN_UART_1_TXD_P2_0 \
0994   LPC24XX_PIN(2, 0, LPC24XX_PIN_FUNCTION_10, 2)
0995 #define LPC24XX_PIN_UART_1_TXD_P3_16 \
0996   LPC24XX_PIN(3, 16, LPC24XX_PIN_FUNCTION_11, 3)
0997 
0998 #define LPC24XX_PIN_UART_1_RXD_P0_16 \
0999   LPC24XX_PIN(0, 16, LPC24XX_PIN_FUNCTION_01, 1)
1000 #define LPC24XX_PIN_UART_1_RXD_P2_1 \
1001   LPC24XX_PIN(2, 1, LPC24XX_PIN_FUNCTION_10, 2)
1002 #define LPC24XX_PIN_UART_1_RXD_P3_17 \
1003   LPC24XX_PIN(3, 17, LPC24XX_PIN_FUNCTION_11, 3)
1004 
1005 /** @} */
1006 
1007 /**
1008  * @name UART 2 Pins
1009  *
1010  * @{
1011  */
1012 
1013 #define LPC24XX_PIN_UART_2_TXD_P0_10 \
1014   LPC24XX_PIN(0, 10, LPC24XX_PIN_FUNCTION_01, 1)
1015 #define LPC24XX_PIN_UART_2_TXD_P2_8 \
1016   LPC24XX_PIN(2, 8, LPC24XX_PIN_FUNCTION_10, 2)
1017 #define LPC24XX_PIN_UART_2_TXD_P4_22 \
1018   LPC24XX_PIN(4, 22, LPC24XX_PIN_FUNCTION_10, 2)
1019 
1020 #define LPC24XX_PIN_UART_2_RXD_P0_11 \
1021   LPC24XX_PIN(0, 11, LPC24XX_PIN_FUNCTION_01, 1)
1022 #define LPC24XX_PIN_UART_2_RXD_P2_9 \
1023   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_10, 2)
1024 #define LPC24XX_PIN_UART_2_RXD_P4_23 \
1025   LPC24XX_PIN(4, 23, LPC24XX_PIN_FUNCTION_10, 2)
1026 
1027 /** @} */
1028 
1029 /**
1030  * @name UART 3 Pins
1031  *
1032  * @{
1033  */
1034 
1035 #define LPC24XX_PIN_UART_3_TXD_P0_0 \
1036   LPC24XX_PIN(0, 0, LPC24XX_PIN_FUNCTION_10, 2)
1037 #define LPC24XX_PIN_UART_3_TXD_P0_25 \
1038   LPC24XX_PIN(0, 25, LPC24XX_PIN_FUNCTION_11, 3)
1039 #define LPC24XX_PIN_UART_3_TXD_P4_28 \
1040   LPC24XX_PIN(4, 28, LPC24XX_PIN_FUNCTION_11, 2)
1041 
1042 #define LPC24XX_PIN_UART_3_RXD_P0_1 \
1043   LPC24XX_PIN(0, 1, LPC24XX_PIN_FUNCTION_10, 2)
1044 #define LPC24XX_PIN_UART_3_RXD_P0_26 \
1045   LPC24XX_PIN(0, 26, LPC24XX_PIN_FUNCTION_11, 3)
1046 #define LPC24XX_PIN_UART_3_RXD_P4_29 \
1047   LPC24XX_PIN(4, 29, LPC24XX_PIN_FUNCTION_11, 2)
1048 
1049 /** @} */
1050 
1051 #ifdef ARM_MULTILIB_ARCH_V7M
1052 
1053 /**
1054  * @name UART 4 Pins
1055  *
1056  * @{
1057  */
1058 
1059 #define LPC24XX_PIN_UART_4_TXD_P0_22 \
1060   LPC24XX_PIN(0, 22, LPC24XX_PIN_FUNCTION_00, 3)
1061 #define LPC24XX_PIN_UART_4_TXD_P1_29 \
1062   LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_00, 5)
1063 #define LPC24XX_PIN_UART_4_TXD_P5_4 \
1064   LPC24XX_PIN(5, 4, LPC24XX_PIN_FUNCTION_00, 4)
1065 
1066 #define LPC24XX_PIN_UART_4_RXD_P2_9 \
1067   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_00, 3)
1068 #define LPC24XX_PIN_UART_4_RXD_P5_3 \
1069   LPC24XX_PIN(5, 3, LPC24XX_PIN_FUNCTION_00, 4)
1070 
1071 #define LPC24XX_PIN_UART_4_OE_P0_21 \
1072   LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 3)
1073 
1074 #define LPC24XX_PIN_UART_4_SCLK_P0_21 \
1075   LPC24XX_PIN(0, 21, LPC24XX_PIN_FUNCTION_00, 5)
1076 
1077 #endif /* ARM_MULTILIB_ARCH_V7M */
1078 
1079 /** @} */
1080 
1081 /**
1082  * @name USB Port 1 Pins
1083  *
1084  * @{
1085  */
1086 
1087 #define LPC24XX_PIN_USB_D_PLUS_1\
1088   LPC24XX_PIN(0, 29, LPC24XX_PIN_FUNCTION_01, 1)
1089 #define LPC24XX_PIN_USB_D_MINUS_1\
1090   LPC24XX_PIN(0, 30, LPC24XX_PIN_FUNCTION_01, 1)
1091 #define LPC24XX_PIN_USB_UP_LED_1\
1092   LPC24XX_PIN(1, 18, LPC24XX_PIN_FUNCTION_01, 1)
1093 #define LPC24XX_PIN_USB_TX_E_1\
1094   LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_01, 1)
1095 #define LPC24XX_PIN_USB_PPWR_1\
1096   LPC24XX_PIN(1, 19, LPC24XX_PIN_FUNCTION_10, 2)
1097 #define LPC24XX_PIN_USB_TX_DP_1\
1098   LPC24XX_PIN(1, 20, LPC24XX_PIN_FUNCTION_01, 1)
1099 #define LPC24XX_PIN_USB_TX_DM_1\
1100   LPC24XX_PIN(1, 21, LPC24XX_PIN_FUNCTION_01, 1)
1101 #define LPC24XX_PIN_USB_RCV_1\
1102   LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_01, 1)
1103 #define LPC24XX_PIN_USB_PWRD_1\
1104   LPC24XX_PIN(1, 22, LPC24XX_PIN_FUNCTION_10, 2)
1105 #define LPC24XX_PIN_USB_RX_DP_1\
1106   LPC24XX_PIN(1, 23, LPC24XX_PIN_FUNCTION_01, 1)
1107 #define LPC24XX_PIN_USB_RX_DM_1\
1108   LPC24XX_PIN(1, 24, LPC24XX_PIN_FUNCTION_01, 1)
1109 #define LPC24XX_PIN_USB_LS_1\
1110   LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_01, 1)
1111 #define LPC24XX_PIN_USB_HSTEN_1\
1112   LPC24XX_PIN(1, 25, LPC24XX_PIN_FUNCTION_10, 2)
1113 #define LPC24XX_PIN_USB_SSPND_1\
1114   LPC24XX_PIN(1, 26, LPC24XX_PIN_FUNCTION_01, 1)
1115 #define LPC24XX_PIN_USB_INT_1\
1116   LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_01, 1)
1117 #define LPC24XX_PIN_USB_OVRCR_1\
1118   LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2)
1119 #define LPC24XX_PIN_USB_SCL_1\
1120   LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1)
1121 #define LPC24XX_PIN_USB_SDA_1 \
1122   LPC24XX_PIN_WITH_TYPE( \
1123     1, 29, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_OPEN_DRAIN \
1124   )
1125 #define LPC24XX_PIN_USB_CONNECT_1\
1126   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1)
1127 
1128 /** @} */
1129 
1130 /**
1131  * @name USB Port 2 Pins
1132  *
1133  * @{
1134  */
1135 
1136 #define LPC24XX_PIN_USB_PPWR_2\
1137   LPC24XX_PIN(0, 12, LPC24XX_PIN_FUNCTION_01, 1)
1138 #define LPC24XX_PIN_USB_UP_LED_2\
1139   LPC24XX_PIN(0, 13, LPC24XX_PIN_FUNCTION_01, 1)
1140 #define LPC24XX_PIN_USB_HSTEN_2\
1141   LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 1)
1142 #define LPC24XX_PIN_USB_CONNECT_2\
1143   LPC24XX_PIN(0, 14, LPC24XX_PIN_FUNCTION_01, 3)
1144 #define LPC24XX_PIN_USB_D_PLUS_2\
1145   LPC24XX_PIN(0, 31, LPC24XX_PIN_FUNCTION_01, 1)
1146 #define LPC24XX_PIN_USB_PWRD_2\
1147   LPC24XX_PIN(1, 30, LPC24XX_PIN_FUNCTION_01, 1)
1148 #define LPC24XX_PIN_USB_OVRCR_2\
1149   LPC24XX_PIN(1, 31, LPC24XX_PIN_FUNCTION_01, 1)
1150 
1151 /** @} */
1152 
1153 /** @} */
1154 
1155 #ifdef __cplusplus
1156 }
1157 #endif /* __cplusplus */
1158 
1159 #endif /* LIBBSP_ARM_LPC24XX_IO_H */