立命館大学 大学院 講義資料
(C) by T.IZUMI @ Ritsumeikan U, Sep 2016 - 無断複製・再配布を禁ず
Acknowledgements:
the base design is presented by Kaitlyn Franz and
the base kit is provided by Digilent Inc.
PWM制御モジュールをLinuxから制御する。
Zybot の linaro 環境はK.Franz氏により提供されている。 そのシステムの構成を確認しておく。
linaro@linaro-ubuntu-desktop:~$ cd /home/linaro/zybot linaro@linaro-ubuntu-desktop:~$ dtc -I dtb -O dts -o devicetree.dts /mnt/ZYBO_BOOT/devicetree.dtb DTC: dtb->dts on file "/mnt/ZYBO_BOOT/devicetree.dtb" linaro@linaro-ubuntu-desktop:~$ more devicetree.dts : gpio_btns@41210000 { #gpio-cells = <0x2>; compatible = "xlnx,xps-gpio-1.00.a"; gpio-controller; reg = <0x41210000 0x10000>; : }; gpio_leds@41200000 { #gpio-cells = <0x2>; compatible = "xlnx,xps-gpio-1.00.a"; gpio-controller; reg = <0x41200000 0x10000>; : }; gpio_sws@41220000 { #gpio-cells = <0x2>; compatible = "xlnx,xps-gpio-1.00.a"; gpio-controller; reg = <0x41220000 0x10000>; : }; : motor { compatible = "dglnt,motor-1.00.a"; reg = <0x43c40000 0x10000>; }; servo { compatible = "dglnt,servo-1.00.a"; reg = <0x43c30000 0x10000>; }; : |
制御対象 | 方向 | 物理アドレス | ビット位置 | 値 |
---|---|---|---|---|
LD[3:0] | output | 0x41200000 | [3:0] | 各ビットが各LED |
BTN[3:0] | input | 0x41210000 | [3:0] | 各ビットが各BTN |
SW[3:0] | input | 0x41220000 | [3:0] | 各ビットが各SW |
上下サーボPWM | output | 0x41c30000 | [31:0] | 120000〜180000 |
左右サーボPWM | output | 0x41c30004 | [31:0] | 120000〜180000 |
右輪EN | output | 0x41c40000 | [0:0] | 1で動作、0で停止 |
右輪DIR | output | 0x41c40000 | [1:1] | 0で前進、1で後退 |
左輪EN | output | 0x41c40000 | [8:8] | 1で動作、0で停止 |
左輪DIR | output | 0x41c40000 | [9:9] | 1で前進、0で後退 |
右輪出力PWM | output | 0x41c40004 | [31:0] | 0〜50000 |
左輪出力PWM | output | 0x41c40010 | [31:0] | 0〜50000 |
linaro@linaro-ubuntu-desktop:~$ cd /home/linaro/zybot linaro@linaro-ubuntu-desktop:~$ more testmem.c : linaro@linaro-ubuntu-desktop:~$ gcc -Wall -o testmem testmem.c |
※BTN[3:0]の読み取り(操作してみる) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41210000 mem[41210000] => 00000000 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41210000 mem[41210000] => 00000001 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41210000 mem[41210000] => 00000008 ※SW[3:0]の読み取り(操作してみる) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41220000 mem[41220000] => 00000000 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41220000 mem[41220000] => 00000001 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41220000 mem[41220000] => 0000000f ※LD[3:0]への書き込み(点滅を確認する) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41200000 1 mem[41200000] <= 00000001 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41200000 15 mem[41200000] <= 0000000f linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x41200000 0 mem[41200000] <= 00000000 ※上下サーボへの書き込み(動作を確認する) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30000 120000 mem[43c30000] <= 0001d4c0 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30000 180000 mem[43c30000] <= 0002bf20 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30000 150000 mem[43c30000] <= 000249f0 ※左右サーボへの書き込み(動作を確認する) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30004 120000 mem[43c30004] <= 0001d4c0 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30004 180000 mem[43c30004] <= 0002bf20 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c30004 150000 mem[43c30004] <= 000249f0 ※左輪モータへの書き込み(動作を確認する) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0000 mem[43c40000] <= 00000000 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40004 20000 mem[43c40004] <= 00004e20 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0001 mem[43c40000] <= 00000001 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0003 mem[43c40000] <= 00000003 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0000 mem[43c40000] <= 00000000 ※右輪モータへの書き込み(動作を確認する) linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40010 20000 mem[43c40010] <= 00004e20 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0300 mem[43c40000] <= 00000300 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0100 mem[43c40000] <= 00000100 linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testmem 0x43c40000 0x0000 mem[43c40000] <= 00000000 |
linaro@linaro-ubuntu-desktop:~$ ls /sys/class/gpio/ export gpiochip842 gpiochip874 gpiochip906 unexport root@ZR-01:~$ ls /sys/class/gpio/ export gpio899 gpio901 gpio903 gpio905 gpiochip898 gpiochip906 gpio898 gpio900 gpio902 gpio904 gpiochip894 gpiochip902 unexport root@ZR-01:~$ ls /sys/class/gpio/*/label /sys/class/gpio/gpiochip894/label /sys/class/gpio/gpiochip902/label /sys/class/gpio/gpiochip898/label /sys/class/gpio/gpiochip906/label zynq_gpio root@ZR-01:~$ cat /sys/class/gpio/gpiochip894/label /amba_pl/gpio_sws@41220000 root@ZR-01:~$ cat /sys/class/gpio/gpiochip898/label /amba_pl/gpio_leds@41200000 root@ZR-01:~$ cat /sys/class/gpio/gpiochip902/label /amba_pl/gpio_btns@41210000 root@ZR-01:~$ cat /sys/class/gpio/gpiochip906/label zynq_gpio |
linaro@linaro-ubuntu-desktop:~$ cd /home/linaro/zybot linaro@linaro-ubuntu-desktop:~/zybot$ more testgpio.sh : linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testgpio.sh ※LD[3:0]の発光パタンを確認し、またBTN[3:0]を操作してみる BTN0=0 BTN1=0 BTN2=1 BTN3=0 |
linaro@linaro-ubuntu-desktop:~$ cd /home/linaro/zybot linaro@linaro-ubuntu-desktop:~/zybot$ more testgpio_zybot.c : linaro@linaro-ubuntu-desktop:~/zybot$ gcc -Wall -o testgpio_zybot testgpio_zybot.c linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testgpio_zybot ※LD[3:0]の発光パタンを確認し、またBTN[3:0]を操作してみる BTN[0]=0 BTN[1]=0 BTN[2]=1 BTN[3]=0 |
linaro@linaro-ubuntu-desktop:~$ ls /proc 1 16 2248 2434 3 3567 5 asound ioports slabinfo 10 1606 2249 2436 3020 3568 566 buddyinfo irq softirqs 11 1630 2250 2488 3074 3706 567 bus kallsyms stat 12 17 2272 2503 3143 377 599 cgroups kmsg swaps 1337 1711 2278 2531 3154 3865 6 cmdline kpagecount sys 1345 1732 2297 2568 3158 3880 685 config.gz kpageflags sysvipc 14 19 2302 2570 3244 391 7 consoles loadavg thread-self 1485 2 2305 2572 3245 3952 716 cpu locks timer_list 1489 2003 2320 2574 3324 3953 720 cpuinfo meminfo timer_stats 1499 2076 2358 2601 3353 3963 734 crypto misc tty 15 2088 2367 2607 336 3966 747 device-tree modules uptime 1531 2127 2369 2609 338 3969 758 devices motor_ctrl version 1534 2130 2404 2615 339 3980 767 diskstats mounts vmallocinfo 1538 2131 2406 2622 342 4052 768 driver mtd vmstat 1546 2145 2415 2660 3467 4053 769 execdomains net zoneinfo 1553 2146 2421 2674 3472 4068 770 fb pagetypeinfo 1572 2186 2427 2689 3474 474 8 filesystems partitions 1573 2191 2428 2730 3481 488 9 fs scsi 1578 2201 2430 2741 3483 489 914 interrupts self 1595 2210 2432 2975 3492 490 919 iomem servo_ctrl |
linaro@linaro-ubuntu-desktop:~$ cd /home/linaro/zybot linaro@linaro-ubuntu-desktop:~/zybot$ more testproc_zybot.c : linaro@linaro-ubuntu-desktop:~/zybot$ gcc -Wall -o testproc_zybot testproc_zybot.c linaro@linaro-ubuntu-desktop:~/zybot$ sudo ./testproc_zybot ※カメラや車輪の動作を確認する |
#include <unistd.h> #include <fcntl.h> // open 部分のコード例 int fd; fd=open("/proc/motor_ctrl",O_WRONLY); // write 部分のコード例 unsigned int buf[2]; buf[0]=offset; buf[1]=value; write(fd,(void *)buf,sizeof(unsigned int)*2); |
組込みシステムでは、電源投入時やリセット時に自動で特定のプログラムを起動する。Zybot-R での起動スクリプトを確認する。
linaro@linaro-ubuntu-desktop:~$ ls -l /etc/init.d/server_script -rwxr-xr-x 1 root root 2455 Sep 24 17:15 /etc/init.d/server_script linaro@linaro-ubuntu-desktop:~$ ls -l /etc/rc*.d/*server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc0.d/K20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc1.d/K20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc2.d/S20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc3.d/S20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc4.d/S20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc5.d/S20server_script -> ../init.d/server_script lrwxrwxrwx 1 root root 23 Aug 28 14:28 /etc/rc6.d/K20server_script -> ../init.d/server_script linaro@linaro-ubuntu-desktop:~$ more /etc/init.d/server_script : |