CodeZine(コードジン)

特集ページ一覧

デバイスドライバのプログラムを読み解く 2

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/11/28 13:00

目次

プログラムを読んでみよう⑦ ―― serial_user.c

 このファイルもtimer_user.c同様に、シリアル通信を使用するように設定するとAppliletが自動生成してくれるファイルです。

 さて、シリアル通信は少々やっかいです。serial.cをみていただくとわかるように、Appliletが自動生成してくれる関数は、ポインタを使っていたりしてとても複雑です。そこでシリアル通信に関しては、初期化のみAppliletの生成関数を利用して、送信処理はまったく新規に作成し直しています。割り込みも使っていません。一般に、受信は割り込み処理が必須です。相手がいつデータを送ってくるかわからないからです。しかし送信は自分で送信したいタイミングがわかっていますから、割り込みを使わなくても実用的に処理することができます。

 serial_user.cの35行目、Uart_Send1byte()が、1文字送信するための関数です。文法的には非常にシンプルですが、内容はマイコンのシリアル通信のハードウェア仕様を理解していないとわからないと思います。今回、ここだけやや難点になってしまうのですが、将来マイコンのハードウェアを勉強するときまでのお楽しみということでご勘弁ください。簡単に動作原理だけ説明します。

 37行目では、ASIF6というレジスタのビット1が0でない間待っています。シリアル通信回路には、これから送信するデータを入れておく送信バッファという入れ物があります。送信が完了すると、この入れ物はからっぽになるようになっています。ASIF6のビット1は、この送信バッファが空いているかどうかを示す値(フラグという)です。このフラグが0なら、送信バッファが空いている、つまりシリアル通信回路が送信データを受け取れる状態であることを意味します。41行目でTXB6にデータを代入しています。このTXB6こそが、送信バッファです。ここにデータを入れておけば、あとはハードウェアが勝手にデータを送信してくれます。

 あと、割り込みを使わない方式に変更しましたので、serial.cにAppliletが生成したシリアル通信の初期化処理の中から、割り込みを許可する部分をコメントアウトしてあります(serial.c 71行目~74行目)。

 以上で、マジカルボックスのプログラムの説明は終わりです。文中でも述べましたが、マイコンのハードウェア制御に関するプログラムはAppliletで生成したものを基本にしています。どのような設定にしているかは、ダウンロードしたファイル群の中にあるAppliletの保存ファイル、5rules.prxをAppliletにロードして見てみてください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:たった5つのルールではじめるC言語開発

もっと読む

著者プロフィール

  • 舘 伸幸(タチ ノブユキ)

    NECマイクロシステム株式会社 勤務 NPO法人SESSAME 所属 開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。 2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5