出力ができましたので、今度は入力を使ってみましょう。
入出力方向に関しては、前回説明した通りPFピンに対応するDIRレジスタのビットを0にすれば入力になります。また、PFピンの値はFLAGS、FLAGCのいずれからでも行えます。両レジスタの読み出しに変なひねりはなく、いずれのレジスタも同じ値を返します。
入力が出力とちょっとだけ違うのは、ビットごとに正論理か負論理かを決められることです。この決定はFSPRレジスタで行います。
FSPRのあるビットが0のとき、対応するPFピン入力は正論理です。逆に1のときは負論理です。リセット後はFSPRの値は0になっています。
今回はこのレジスタは使いません。
簡単なプログラムを作ってみましょう。EZ-KIT LiteのSW3を押したときだけLED8が点灯するプログラムです。このプログラムの構造は
繰り返し SW3の値を読む 値に応じてLED8を制御する
という簡単なものです。前回紹介したEZ-KIT LiteのPFピンの使い方を再掲すると、
PF0 | PF1 | PF2 | PF3 | PF4 | PF5 |
---|---|---|---|---|---|
LED8 | LED9 | LED10 | LED11 | SW3 | SW2 |
でした。この表から今回はPF4を入力として使い、PF0を出力と使うと決まります。そして、PF4の値を調べてその値に応じてPF0に出力を行います。
以下にプログラムを示します。これも別にひねりのないプログラムです。
#include <def2191.h> #include <sysreg.h> #define SW3 0x10 int main(void) { int flagval; sysreg_write( sysreg_IOPG, General_Purpose_IO ); io_space_write( DIR, 1 ); while (1) { flagval = io_space_read( FLAGS ); if ( flagval & SW3 ) io_space_write( FLAGS, 1 ); else io_space_write( FLAGC, 1 ); } }
これについてもプロジェクトを丸ごと圧縮したものを用意しました。興味がある方はダウンロードして使ってください(7.5KB)。使用するにはVisualDSP++で開いた後、メニューバー⇒Project⇒Updage Dependenciesを実行してください。プロジェクトを作成場所から移動させた場合にはこれが必要です。
⇒次は割り込みを使おう