割り込みと7セグメントLEDの制御:T-Engineプログラミング入門(2)(2/4 ページ)
リアルタイム処理に欠かせない「割り込み」の使い方と、デジタル時計などで見かける7セグメントLEDで数字を表示する方法を解説
計数器プログラムのコンパイル&実行
「理屈は抜きにして、まずは動かしてみたい!」という方のために、実行手順とソースコードを先に示します。
作業ディレクトリの作成
まず、PC(開発ホスト)上にソースファイルやオブジェクトを保存するためのディレクトリを作成します。T-Kernelベースのプログラム作成用に/usr/local/te/kapplというディレクトリがあります。その下にcounterディレクトリを新規に作成し、さらにその下にソースファイル用ディレクトリsrcとオブジェクト用ディレクトリtbmx1を作成します。
具体的には、Cygwin上で以下のコマンドを実行します。
$ cd /usr/local/te/kappl $ mkdir counter counter/src counter/tbmx1
プログラムのコーディング
PC上でリスト1の内容のソースファイルを作成し、C:\cygwin\usr\local\te\kappl\counter\src\counter.cに保存してください。
/* * 計数器 (T-Kernelベース) */ #include <tk/tkernel.h> volatile int count; /* 現在のカウント値 */ /* 7セグメントLEDの表示 */ void set_led( int x ) { int p[] = {0x24, 0x3f, 0x62, 0x2a, 0x39, 0xa8, 0xa0, 0x3e, 0x20, 0x28 }; out_h( 0x16100002, p[x / 10] ); /* 10の位の表示 */ out_h( 0x16100000, p[x % 10] ); /* 1の位の表示 */ } /* 左ボタンに対する割り込みハンドラ: カウントアップ */ void int_left( UINT dintno ) { ClearInt( dintno ); /* 割り込み要求クリア */ count = count + 1; if (count > 99) count = 99; /* 上限の99を超える場合は99固定 */ set_led( count ); } /* 右ボタンに対する割り込みハンドラ: リセット */ void int_right( UINT dintno ) { ClearInt( dintno ); /* 割り込み要求クリア */ count = 0; set_led( count ); } ER main( INT ac, UB **av ) { T_DINT d_left = { TA_HLNG, int_left }; T_DINT d_right = { TA_HLNG, int_right }; if (ac >= 0) { /* ロード時 */ /* 左ボタンに対する割り込みハンドラの定義 */ tk_def_int( 164, &d_left ); SetIntMode( 164, IM_EDGE | IM_LOW ); ClearInt( 164 ); EnableInt( 164, 0 ); /* 右ボタンに対する割り込みハンドラの定義 */ tk_def_int( 165, &d_right ); SetIntMode( 165, IM_EDGE | IM_LOW ); ClearInt( 165 ); EnableInt( 165, 0 ); /* 表示をリセット */ count = 0; set_led( count ); } else { /* アンロード時 */ /* 割り込みハンドラの登録解除 */ tk_def_int( 164, NULL ); tk_def_int( 165, NULL ); } return 0; }
リスト1 計数器のソースコード C:\cygwin\usr\local\te\kappl\counter\src\counter.c |
Makefileの作成
PC上でリスト2の内容のMakefileを作成し、C:\cygwin\usr\local\te\kappl\counter\src\Makefileに保存してください。
include ../../etc/makerules VPATH = ../src counter: counter.o
リスト2 Makefile C:\cygwin\usr\local\te\kappl\counter\src\Makefile |
メイクの実行
メイクはCygwin上で、以下のように行います。
$ cd /usr/local/te/kappl/counter/tbmx1 $ ln -s ../src/Makefile $ gmake
自動的にコンパイルとリンクが行われ、実行ファイルcounterが生成されます。
TeaboardのSDカードに実行ファイルを転送
前回と同じく、TeaboardはSDカードから起動した状態にします。Tera Term Pro(以下Tera Term)でTeaboardに接続して、TeaboardのCLI上でrecv(レシーブ)コマンドを用いて実行ファイルをTeaboardのSDカードに転送します。
[/SYS]% recv -c counter
recvコマンドを実行するとTeaboardはファイルの受信待ち状態に入ります。Tera TermのXMODEMファイル送信機能([File]−[Transfer]−[XMODEM]−[Send])で実行ファイルcounterを送信してください。
実行ファイルcounterのロード
TeaboardのCLIで、先ほど転送した実行ファイルcounterをlodspgコマンドでロードします。
[/SYS]% lodspg counter
これで一連の作業は完了です。実際にTeaboard上の左ボタン(カウントアップ)や右ボタン(リセットボタン)を押して、正しく動作することを確認しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.