割り込みと7セグメントLEDの制御T-Engineプログラミング入門(2)(2/4 ページ)

» 2006年07月04日 00時00分 公開
[中村 大真 パーソナルメディア株式会社,@IT MONOist]

計数器プログラムのコンパイル&実行

 「理屈は抜きにして、まずは動かしてみたい!」という方のために、実行手順とソースコードを先に示します。

作業ディレクトリの作成

 まず、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.