「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
●シフト・レジスタでパラレルをシリアルに変換する
一方,制御するためではなく,主に通信に使われる「シリアル・ポート」と呼ばれるポートがあります.これは,パラレル(並列)データを時間軸でシリアル(直列)データに(もしくはシリアル・データをパラレル・データに)変換するものです(図8-7).
シリアル・ポートは,CPUからパラレルでアクセスされるデータ・レジスタと,1ビットずつ順にずらしながら出力していくシフト・レジスタから構成されています(図8-8).
送信側では,CPUが,パラレル・ポートのラッチと同じように,送りたいデータをデータ・レジスタに書き込みます.データ・レジスタに書き込まれた値は,シフト・レジスタに転送するとともに,ステータス・レジスタに「送信中」であると設定します.次にシフト・レジスタで順にシフト・アウトして1ビットずつ外部に出力します.
全部のビットを送り終えると,ステータス・レジスタを「(次の)送信可能」に設定します.送信側では,このステータス・レジスタを監視して,「送信可能」になった時点で,次に送りたいデータをデータ・レジスタに書き込みます.
一方,受信側では,外部から取り込んだ1ビットずつの値をシフト・レジスタに順次シフト・インして,全部のビットがそろったらデータ・レジスタを更新し,ステータス・レジスタを「受信完了」に設定します.データ・レジスタに値がまだ届いていないとき,ステータス・レジスタは「受信待ち」に設定されています.CPUは,ステータス・レジスタが「受信待ち」から「受信完了」になるのを確認した後,そろえられた受信データをデータ・レジスタから取り込みます.
シリアル・ポートでは1ビットずつ転送するので,入出力に時間がかかります.ポートに接続されるデバイス(リレーやA-Dコンバータなど)によっては待ち時間が必要になります.ポーリングや割り込みを使いこなして対処しましょう.