ステータスLEDを駆動するいくつかの方法

PFピンが足りません(-_-)
こんな場合、真っ先に目をつけられるのはステータスLEDです。ステータスLEDはデバッグ用に必須なものです。しかし割込みも何も不要なものですのでボード機能としては贅沢品です。ですからFPGAのピンに追いやられたりするのです。
いやいやダメですよ。
FPGAが動いてない状態でもBlackfinが生きているか確認できなければ。ということで、BlackfinからステータスLEDを使う方法をいくつか考えてみました。

PFを使う

一番簡単な方法です。ボードを組んだ直後にプロセッサが生きているか確認するプログラムは、可能な限り小さくなければなりません。PFは本来ビットIO用に設計されていますからこのような用途にはうってつけです。
設計時に注意すべき点があるとすれば評価基板との互換性でしょう。評価基板のLEDとステータスLEDのビット位置を合わせておけば、評価基板上でステータスLED点滅プログラムをあらかじめ試験できます。ただし、EZ-KIT Lite BF533のLEDはPFでは無いのでこの点は無視してもかまいません。

タイマーを使う

汎用タイマーをPWMモードで動かします。パルス幅レジスタを書き換えてやることでLEDを点滅させる事ができます。この辺までは割りと手軽です。雑音が気になるならタイマークロックを30Hz位まで落とすといいでしょう。10Hz位まで落とすと、人によっては点滅周期の揺らぎが気になるかもしれません。

SPORTのセカンダリ・チャンネル

多チャンネル・オーディオでもやらないかぎり、SPORTのセカンダリ・チャンネルは空きチャンネルになります。ここにLEDをぶら下げれば、メモリ上のバッファに値を書き込むことでLEDを点滅できます。
欠点はプライマリ・チャンネルと深く結合してしまうことです。たとえば、セカンダリ・チャンネルをイネーブルにするだけで、DMAバッファのサイズは倍必要になってしまいます。プライマリ・チャンネルのプログラムも書き換えです。

その他のごみのような方法

緊急デバッグ時にちょっとだけ光ればいいというのであればほかにも方法があります。

  • 使っていないAMS_Bxピンに接続すれば、非同期バンクにアクセスしっぱなしにすることでLEDを光らせる事ができる。
  • SPIセレクトやFPGAのコンフィグ・セレクト*1・ピンに接続しているPFをつなぐ。
  • UART Txに接続する。

本来の機能が高速なピンは当然使うべきではありません。空きピンか低速ピンを使うべきです。

*1:Cyclone ならnCONFIG