モニタプログラムの動作確認(SW編)
次はモニタープログラム経由でのスイッチ入力を行うための手順を説明する.
ハードウェア
ターゲットとするスイッチはSW4, SW5, SW6である.基板上では図1の位置にある.
図1:SWの位置
スイッチ部分のハードウェアを簡略化すると,図2のようになる.
図2:SW部分の回路図の概要
基板上のSW4はPD16に,SW5はPD17に,SW6はPD18にそれぞれ接続されている.
図中の○付きの三角はインバータ(反転器)と呼ばれる回路素子であり,その名の通り,信号レベルを反転する機能を持つ.すなわちH→L(1→0),L→H(0→1)のように論理反転を行う.
スイッチを押していない状態では,インバータの入力は抵抗で電源に接続されているのでHであり,インバータの出力はLである.
スイッチを押すと,インバータの入力はLになるので,出力はHになる.
よって,スイッチを押していないときSH7085のスイッチ入力端子(PD16,PD17,PD18)はLレベルになり,スイッチを押すとHレベルになる.
SH7085の設定
先ほどのLED点灯とは逆に,今回は汎用I/Oポートを“入力”として使用し,外部からの入力信号の状態を確認する.
スイッチの状態の観測は次の手順で行う.
- 信号が入力側を向くようにPDIORHを設定する
- 端子の状態(H/L)をPDDRHレジスタ経由で読み込む
PDIORHレジスタの設定
スイッチが接続されている端子はPD16, PD17, PD18であり,これらの端子の入出力方向を決定するレジスタはPDIORHである.LED点灯の際のPEIORLレジスタと同様に,端子に対応するビットを0とすれば入力に,1とすると出力に設定される.
今回は入力に設定するので,対応するビットを0に設定する.
PDIORHはPD16~PD31 端子の入出力方向を設定するレジスタであり,関係のない端子の向きに影響を与えないためには,
- PDIORHを読み出す
- 11111111_11111000と論理積演算し,bit0~bit2を 0 に変更する
- PDIORHに書き込む
のようにする必要がある.
PDIORHの読み出し
PDIORHの読み出しにはモニタプログラムのDコマンドを用いる.
PDIORHレジスタはメモリ空間の0xffffd284番地に存在するので,Hterm上で
”d[スペース]ffffd280[スペース]ffffd28f;w[ENTER]”
と入力し,付近の番地の値を図3のように取得する.
図3:値の変更と確認
例示の画面では0xffffd284番地は0xff80である.既に入力の状態になっているが,演習のために設定を行うことにする.
論理積演算を行う
ターゲットのビットだけを0に変更するために,論理和演算を行う.
1111 1111 1000 0000 (0xff80) AND 1111 1111 1111 1000 (0xfff8) ----------------------- 1111 1111 1000 0000 (0xff80)
PDIORHに書き込む
Hterm上で
”m[スペース]ffffd284;w[ENTER]”
と入力すると新しい値の入力待ちになる.ここで計算した値0xff80を入力する(”0x”は不要).続けて次の番地のデータ入力待ちになるので,ここは“.”(ピリオド)を入力して終了する.
以上でPDIORHレジスタの変更は完了である.
PDDRHレジスタを読み,スイッチの状態を確認する
PDDRHレジスタは0xffffd280番地に存在し,PD16~PD31端子の出力値の設定や,端子レベルの観測に用いられる.
ここまでの手順で,PD16~PD18端子は入力になっているので,PDDRHレジスタのbit0~bit2はSW4~SW6の状態を反映したものとなっているはずである.
Hterm上で
”d[スペース]ffffd280[スペース]ffffd28f;w”
と入力し,図4のようにPDDRHレジスタ付近のメモリダンプを行う.
図4:SWを押した時の変化の確認
実行例では,スイッチを押していない状態ではPDDRH=0x0068となっている.[bit2:bit0]=000となっているので,[PD18:PD16]=000である.よってこれらの端子に接続されているスイッチは押されていないことがわかる.
続いてSW4を押したときは,PDDRH=0x0069であり,[bit2:bit0]=001である.[PD18:PD16]=001であるから,PD16に接続されているSW4が押されていることがわかる.
以下同様にSW5, SW6, SW4~SW6を押したときのPDDRHレジスタの値も観測してみること.
モニタプログラムのヘルプ
モニタプログラムは,操作が不明な時にヘルプを表示することができる.コマンド待ち状態で”?[ENTER]”とすれば図5のようなコマンド一覧が表示される.
図5:モニタプログラムのコマンド一覧
特定のコマンドの使用方法のヘルプがほしければ,たとえばMコマンドであれば”m?[ENTER]”とすれば,図6のようなMコマンドのヘルプが表示される.
図6:任意のコマンドに対するヘルプ表示