Нужно использовать силу C и библиотек от NXP.
Вот пример для LPC1114 (там ножки совсем перепутаны):
Код
//соответствие физических адресов порту 0
static uint32_t volatile * const lpc11xx_io_port0[] =
{
&LPC_IOCON->RESET_PIO0_0,
&LPC_IOCON->PIO0_1,
&LPC_IOCON->PIO0_2,
&LPC_IOCON->PIO0_3,
&LPC_IOCON->PIO0_4,
&LPC_IOCON->PIO0_5,
&LPC_IOCON->PIO0_6,
&LPC_IOCON->PIO0_7,
&LPC_IOCON->PIO0_8,
&LPC_IOCON->PIO0_9,
&LPC_IOCON->JTAG_TCK_PIO0_10,
&LPC_IOCON->JTAG_TDI_PIO0_11
};
//соответствие физических адресов порту 1
static uint32_t volatile * const lpc11xx_io_port1[] =
{
&LPC_IOCON->JTAG_TMS_PIO1_0,
&LPC_IOCON->JTAG_TDO_PIO1_1,
&LPC_IOCON->JTAG_nTRST_PIO1_2,
&LPC_IOCON->ARM_SWDIO_PIO1_3,
&LPC_IOCON->PIO1_4,
&LPC_IOCON->PIO1_5,
&LPC_IOCON->PIO1_6,
&LPC_IOCON->PIO1_7,
&LPC_IOCON->PIO1_8,
&LPC_IOCON->PIO1_9,
&LPC_IOCON->PIO1_10,
&LPC_IOCON->PIO1_11
};
//соответствие физических адресов порту 2
static uint32_t volatile * const lpc11xx_io_port2[] =
{
&LPC_IOCON->PIO2_0,
&LPC_IOCON->PIO2_1,
&LPC_IOCON->PIO2_2,
&LPC_IOCON->PIO2_3,
&LPC_IOCON->PIO2_4,
&LPC_IOCON->PIO2_5,
&LPC_IOCON->PIO2_6,
&LPC_IOCON->PIO2_7,
&LPC_IOCON->PIO2_8,
&LPC_IOCON->PIO2_9,
&LPC_IOCON->PIO2_10,
&LPC_IOCON->PIO2_11
};
//соответствие физических адресов порту 3
static uint32_t volatile * const lpc11xx_io_port3[] =
{
&LPC_IOCON->PIO3_0,
&LPC_IOCON->PIO3_1,
&LPC_IOCON->PIO3_2,
&LPC_IOCON->PIO3_3,
&LPC_IOCON->PIO3_4,
&LPC_IOCON->PIO3_5
};
//массив используемых портов.
//Осторожно! Порт 3 содержит только 6 регистров
static uint32_t volatile * const * const lpc11xx_io_matrix[] =
{
lpc11xx_io_port0,
lpc11xx_io_port1,
lpc11xx_io_port2,
lpc11xx_io_port3
};
/* Public Functions ----------------------------------------------------------- */
/** @addtogroup PINSEL_Public_Functions
* @{
*/
static uint32_t volatile *iocon_GetPinByName(uint8_t portnum, uint8_t pinnum)
{
return lpc11xx_io_matrix[portnum][pinnum];
}