SSブログ

7セグメントLEDペリフェラル(Cinerariaの周辺I/Oその2) [FPGA]

今回はカスタムじゃないけどピン配がわかりにくいコンポーネントの説明。

DE0用NiosIIプラットフォーム、Cinerariaのダウンロードはこちらから
 → https://t.co/8kMHg0u0

・7セグメントLEDコンポーネント
・ハードウェア
 DE0ボードに載っている7セグメント×4連のLEDを制御するコンポーネント。
 ペリフェラルのクラスはPIOコンポーネントの32bit出力タイプのインスタンスをしているだけ。割り込みとかも特にないので、+0(データレジスタ)へデータをライトすればLEDが点灯する。

・ソフトウェア
LED_7SEG_BASEマクロで示されるレジスタアドレスは下記の通り
+0x0 : LEDDATA


 レジスタの各ビットとLEDのセグメントとの対応は下記の通り。
7segled.png
※各ビットは1=消灯、0=点灯なので注意すること。

・NiosIIからの使用方法
 プログラム上は普通にPIOなのでとくに面倒なことは無く、ペリフェラルマクロが記述されている system.h と、IOアクセス関数の io.h をインクルードしてIOWR()で書き込みをするだけ。

#include <system.h>
#include <io.h>

int main(void)
{
  IOWR(LED_7SEG_BASE, 0, ~0x7c5c5c78); // boot表示
  while(1) {}
}

 ここで使っているIOWR()は該当アドレスのレジスタへ直接値を書き込むマクロで、内部的にはダイレクトライト命令に置換される。
 NiosII /fはデータの読み書きは必ずライトバックキャッシュ経由で行うため、ペリフェラルへの読み書きのように即時性が必要なアドレスへのアクセスはI/Oコントロールマクロを使って行う。
 横着してポインタで書き込むようなことをやると、プログラム上では書き込んでいるのにペリフェラルへは書き込まれてない、という挙動不明な状況になるから注意しよう。

・参考
Nios II ソフトウェア開発ハンドブック
ver 1.2 日本語版
 → http://www.altera.co.jp/literature/hb/nios2/n2sw_nii5v2_j.pdf
ver 10.1 最新英語版
 → http://www.altera.co.jp/literature/hb/nios2/n2sw_nii5v2.pdf

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。