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);