これが本来のプルアップ処理なのですが、Tang Nanoには便利な機能があって入力ピンのプルアップ処理をIDEから設定することができるのです。リスト1のように/src/instructions.cstを変更/追加するだけでプルアップ設定が可能となります。
IO_LOC "btn[0]" 31; IO_PORT "btn[0]" PULL_MODE=UP;
また、前回は基板上のタクトスイッチを用いた演習だったので、btn[0]を3番に割り当てましたが、そこを3から31に変更します。そしてその次の行がプルアップ設定するためのコードです。
このcstファイルの追加と変更でTang Nanoの31番とGNDに接続したタクトスイッチの押下をDL166は認識できるようになります。そして押下されたかどうかはレジスタR5の最下位ビットを観察することで知ることができます。スイッチが押されたときは1となり、押されていないときは0となります。
最初のプログラムsensor1.asmはタクトスイッチがレジスタR5の最下位ビットに関連付けられているかを確認するためのものです。プログラムは以下の1行だけですが、0番地のjmp 0で見掛け上何もしないプログラムになっています(リスト2)。
ram[0] <=8'b1001_0000; // jmp 0
それでは、実際に動かしてみましょう。/src/instructions.vの29〜31行目を以下のように書き換えます。
initial begin `include "sensor1.asm" end
GoWinのIDEを使って、SynthesizeとPlace & Routeそして最後にProgram DeviceでTang Nanoの評価モジュールに書き込んでください。
ブレッドボード上の緑色のタクトスイッチを押すと、USBコネクターを左に向けている場合、レジスタR5の値を示すLEDドットマトリクスの上から6行目の一番左側のLEDが点灯します(図3)。タクトスイッチの値を実際にDL166が取り込むのはCPUが動いている約1秒間隔で行われますので、1秒以上タクトスイッチを押してないとレジスタR5には取り込まれないことがありますので気を付けてください。
写真は用意していませんが、前回と同様に、緑色のタクトスイッチを押下するのを止めるとLEDは消灯します。
前回は、Tang Nanoの基板に搭載しているタクトスイッチを使って演習を行いました。その際、CSTファイルでは特にプルアップ設定は行いませんでしたがタクトスイッチの状態はレジスタR5の最下位ビットにうまく反映されていました。それは、Tang Nanoの基板上でこれらのタクトスイッチにプルアップ抵抗がマウントされているからでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.