SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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


プログラムを読んでみよう⑦ ―― 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にロードして見てみてください。

次のページ
理解を確かめるため、プログラムを改造してみよう

この記事は参考になりましたか?

たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3733 2009/03/26 17:26

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー