LPCマイコン各種のIO設定について

LPCマイコンはローエンドからハイエンドまで規模がさまざまなので、基本的なIO設定もファミリによって微妙に異なる。以下、簡単にメモ。

※ すでにLPC8xxとLPC55xx以外はNXPの主流ラインナップから外れており、LPCXpressoのような安価なボードも入手性が悪くなってきています。当方はコンサバ指向なのでひきつづきやってますが。

LPC8xx

  • ピン数が少ないので、ピン機能はSWM(Switch Matrix)で自由に割り当てられる
  • プルアップやオープンドレインなどのピンモードはIOCONで設定する。
  • ピン名とGPIO名は一致する。(PIO0_y)
  • ただし、IOCONでは IOCON_PIOy のような定数でピンを指定する
  // LPCOpenの設定API
  Chip_SWM_MovablePinAssign(SWM_ピン機能, y);
  Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIOy, ピンモード);
    // ↑はピンモードの定数が用意されてないので代わりに下記を使用
    Chip_IOCON_PinSetMode(LPC_IOCON, IOCON_PIOy, PIN_MODE_ピンモード);
    Chip_IOCON_PinSetOpenDrainMode(LPC_IOCON, IOCON_PIOy, true/false);
  Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, y);
  Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0, y);

LPC11xx

  • ピン機能・ピンモードともIOCONで設定する。
  • ピン名とGPIO名は一致する。(PIOx_y)
  • ただし、IOCONでは IOCON_PIOx_y のような定数でピンを指定する
  // LPCOpenの設定API
  Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIOx_y, ピンモード | ピン機能);
  Chip_GPIO_SetPinDIRInput(LPC_GPIO, x, y);
  Chip_GPIO_SetPinDIROutput(LPC_GPIO, x, y);

LPC15xx

  • ピン機能・ピンモードともIOCONで設定する。
  • ピン名とGPIO名は一致する。(PIOx_y)
  // LPCOpenの設定API
  Chip_IOCON_PinMuxSet(LPC_IOCON, x, y, ピンモード | ピン機能);
  Chip_GPIO_SetPinDIRInput(LPC_GPIO, x, y);
  Chip_GPIO_SetPinDIROutput(LPC_GPIO, x, y);

LPC18xx

  • ピン数とペリフェラル機能が非常に多い
  • ピン名(Px_y)とGPIO名(GPIOz[w])がまったく一致しない
  • ピン機能・ピンモードはIOCONではなくSCUで設定する
  • 入力に設定する場合にピンモードに SCU_MODE_INBUFF_EN を必ず指定する
  // LPCOpenの設定API
  Chip_SCU_PinMuxSet(x, y, ピンモード | ピン機能);
  Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, z, w);
  Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, z, w);