さて、ここまでできたので次はLチカをCPUから操作する方法である。コードをList 2の様に書き換える(Photo27)。まずPIOの操作を行うAPI(というかマクロ)は、altera_avalon_pio_regs.h(これはBSPの方のdrivers/incの下にある)に定義されている。IOWR_ALTERA_AVALON_PIO_DATA()がそれで、指定したアドレスに値を書き込むというものである。
今回だと値はcnt++の値にあわせて0か1なので、点滅が行われるというわけだ。続くforループは単なるdelayである。ちなみに指定したアドレスがPIO_0_BASEとなっているが、これはQSYSで指定した名前を大文字にして、最後に"_BASE"が付加されたものになる。これを実行すると、Movie01の様に右端のLEDが一定間隔で点滅する。
List 2: /* * "Hello World" example. * * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT * device in your system's hardware. * The memory footprint of this hosted application is ~69 kbytes by default * using the standard reference design. * * For a reduced footprint version of this template, and an explanation of how * to reduce the memory footprint for a given application, see the * "small_hello_world" template. * */ #include <stdio.h> #include "system.h" #include "altera_avalon_pio_regs.h" int main() { printf("Hello from Nios II!\n"); unsigned long cnt = 0; long delay; while(1) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, cnt&0x01); for(delay = 0; delay < 1000000; delay++); cnt++; } return 0; } endmodule
Copyright © ITmedia, Inc. All Rights Reserved.