さて、ここまでできたので次は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
周辺機器の充実した「MAX 10 NEEK」で本格的な開発を目指す
FPGAのソフトコアCPUをベンチマークで測定する
FPGA上でソフトコアCPUを動かす手引き
よろしいならばダイナミック点灯だ――FPGAでLEDをダイナミックにLチカさせる
FPGAのLED制御プログラムを深く理解する
FPGAでのLチカをVerilog HDLで理解する
「MAX 10 FPGA」のテスト環境を構築する
なぜFPGAが注目されるのか、開発ボードに触れて確認するCopyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム