at_takuya.sasaki
2014年11月24日 18時32分
Armadillo-400シリーズで使用可能であった、gpioctrlをArmadillo-840でも使用できるようにしてみたいと思います。 (注意) 実際にハードウェアを接続しての検証はしておりません。 あくまでソフトウェア的に移植をしたところまでですので、ご了承ください。
[9.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-armadillo-200-series-gpio-driver
1) ユーザーランドとカーネルを展開します
atmark@atde5:~$ ln -s atmark-dist-20140602/ atmark-dist atmark@atde5:~$ cd atmark-dist atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at10 ./linux-3.x
2) パッチを /home/atmark に置きます。
パッチは以下からダウンロードしてください。
atmark@atde5:~$ ls *patch atmark-dist-gpioctrl-support.patch linux-3.4-at10-a2x0-gpio-support.patch
3) パッチを適用します
atmark@atde5:~$ cd atmark-dist atmark@atde5:~/atmark-dist$ patch -p 1 < ~/atmark-dist-gpioctrl-support.patch atmark@atde5:~/atmark-dist$ cd ../linux-3.4-at10/ atmark@atde5:~/linux-3.4-at10$ patch -p 1 < ~/linux-3.4-at10-a2x0-gpio-support.patch
4) make menuconfigを実行します
atmark@atde5:~/linux-3.4-at10$ cd ~/atmark-dist atmark@atde5:~/atmark-dist$ make menuconfig vendor: AtmarkTechno product: Armadillo-840 を選択しああと、 カーネルコンフィギュレーションで、 /sys/class/gpioのチェックを外し、 Device Drivers ---> -*- GPIO Support ---> [ ] /sys/class/gpio/... (sysfs interface) ←チェックを外す Armadillo-2x0 GPIOドライバにチェックをつけてください。 Device Drivers ---> Character devices ---> <*> Armadillo-2x0 compatible GPIO driver (deprecated) ←チェックをつける
5) make を実行します。
atmark@atde5:~/atmark-dist$ make
6) linux.bin.gz / romfs.img.gzをArmadillo-840に書き込みます。
7) 以下のようにgpioctrlを実行できるところまで確認しています。
GPIO0~GPIO4まで定義しています。 使用できるポートは以下のソースコードで定義していますので、適時変更してください。
linux-3.4-at10/arch/arm/mach-shmobile/board-armadillo840.c
static struct armadillo2x0_gpio_info armadillo400_a2x0_compat_gpio_info[] = { ARMADILLO2X0_GPIO_PIN_INPUT(GPIO0, GPIO_PORT182, 1), // EXT CON13 pin7 ARMADILLO2X0_GPIO_PIN_INPUT(GPIO1, GPIO_PORT181, 1), // EXT CON13 pin8 ARMADILLO2X0_GPIO_PIN_INPUT(GPIO2, GPIO_PORT180, 1), // EXT CON13 pin9 ARMADILLO2X0_GPIO_PIN_INPUT(GPIO3, GPIO_PORT179, 1), // EXT CON13 pin10 ARMADILLO2X0_GPIO_PIN_INPUT(GPIO4, GPIO_PORT178, 1), // EXT CON13 pin11 };
GPIO0の状態を表示します。
root@armadillo840-0 (ttySC2) ~]# gpioctrl --get=gpio0 GPIO No. : 1 (GPIO0) MODE : 1 (MODE_INPUT) VALUE : 1 (HIGH) INTERRUPT : 0 (DISABLE)
GPIO0をOUTPUTにしてLowに設定します。
[root@armadillo840-0 (ttySC2) ~]# gpioctrl --set=gpio0 --mode=output --type=low [root@armadillo840-0 (ttySC2) ~]# gpioctrl --get=gpio0 GPIO No. : 1 (GPIO0) MODE : 0 (MODE_OUTPUT) VALUE : 0 (LOW)
割込み(IRQ)に使えるのはGPIO2です。
[root@armadillo840-0 (ttySC2) ~]# gpioctrl --set=gpio2 --mode=input --type=risin g-edge --debounce --handler="echo interrupted"
以上