「MAX 10 NEEK」へソフトコアCPUを組み込むMAX 10 FPGAで学ぶFPGA開発入門(9)(5/6 ページ)

» 2016年04月12日 12時00分 公開
[大原 雄介MONOist]

LチカをソフトコアCPUから操作する

 さて、ここまでできたので次はLチカをCPUから操作する方法である。コードをList 2の様に書き換える(Photo27)。まずPIOの操作を行うAPI(というかマクロ)は、altera_avalon_pio_regs.h(これはBSPの方のdrivers/incの下にある)に定義されている。IOWR_ALTERA_AVALON_PIO_DATA()がそれで、指定したアドレスに値を書き込むというものである。

photo Photo27:forループでDelayを作るのではなく、前々回の様にタイマーを追加して、ちゃんと時間指定で回したほうがいいのだが、そのあたりはまたおいおい

 今回だと値はcnt++の値にあわせて0か1なので、点滅が行われるというわけだ。続くforループは単なるdelayである。ちなみに指定したアドレスがPIO_0_BASEとなっているが、これはQSYSで指定した名前を大文字にして、最後に"_BASE"が付加されたものになる。これを実行すると、Movie01の様に右端のLEDが一定間隔で点滅する。

Movie1:MAX10 NEEKのソフトCPUから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
List2

Copyright © ITmedia, Inc. All Rights Reserved.