Knowledge
   

KPIT HEW3+GCCでシリアル通信(H8/3664)


2005/02/02

KPIT HEW3+GCCでシリアル通信

HEW3+GCCでH8/3664プログラミング
最近、SIPHA COREの開発環境として使用してるKPITのHEW3+GCCですが、ネットで探してもまだ情報薄というわけで、いきなりどどんと「シリアル通信」するサンプルをアップします。本日、ややテンション高めなため、駄文御免!

まずはプロジェクトの作成だ!
それでは、さっそく、HEW3を起動しましょう。
20050202P00.JPG - 17,945BYTES

起動すると、こんなダイアログボックスが表示されます。今回は、新しいプログラムを作りたいので、「Create a new project workspace」(デフォルト)を選択して「OK」を押します。

20050202P01.JPG - 29,722BYTES

すると、こんなダイアログが表示され、どのような名前のものを作るかを聞いてきます。「Workspace Name」と「Project Name」がありますが、まずは作りたいフォルダの場所を「Directory」で設定しておき、「Workspace」の方へ、ワークスペース名称(プロジェクト名称兼用)を入力し、「OK」を押します。

20050202P02.JPG - 36,190BYTES

こんなんでますが、「KPITは技術サポートしますよ〜」というありがたい表示なので、感謝の気持ちをこめて「Next」を押します。

20050202P03.JPG - 29,506BYTES

ここは重要です。「H8/300H Normal Mode (H8 Tiny)」を選択してください。H8/3664でプログラムを作成する時は必須の操作です。そして「Next」を押します。

20050202P04.JPG - 23,874BYTES

このダイアログは、よく意味がわかっていませんが、「Next」を押します。

20050202P05.JPG - 30,480BYTES

生成するファイルをリスト表示してきますが、特に編集するものもありませんので、「Finish」を押します。

20050202P06.JPG - 23,841BYTES

これまたいろいろ表示されますが、今まで設定した内容の確認です。でも、まあ、意味がよくわからないので、これも「OK」を押します。

20050202P07.JPG - 47,106BYTES

はい、これでWorkspaceとProjectの作成完了です。いろいろとファイルが自動生成されています。簡単ですね!

シリアル通信プログラムのビルド
さて、いくつかのファイルが自動生成されましたが、簡単なサンプルを試すには不要なファイルがあります。「read.c」、「write.c」、そして「sbrk.c」というソースファイルです。「sbrk.c」というファイルは、よくわかっていませんが、「read.c」と「write.c」は、printf()等をリンクした時に、標準出力する代わりに、この関数を呼び出してくれる機能のようです。もし「read.c」に、シリアル通信のコードを書いておけば、printf()で、シリアル送信してくれるようです。

それでは、さくさくっと削除してしまいましょう(ここで削除をしても、Workspaceから削除されるだけで、実際のファイルが削除されるわけではありません)。まずは「Project」-「Remove Files...」を選択します。

20050202P08.JPG - 23,578BYTES

後は、要らないファイルを選択して「Remove」を押すだけです。

20050202P09.JPG - 29,268BYTES

はい、これで表示がすっきりしました。

20050202P10.JPG - 42,135BYTES

さてプログラムを…の前に、もう1つやっておくことがあります。それは、Linkerの設定です。デフォルトでは、「なんとか.x」というファイルが最終的に出力されますが、このファイルはROMに書き込むことができません。そこで、Sフォーマットと呼ばれる、ROMに書き込む形式のファイルを出力できるようにします。

まずは「Optons」から「Linker...」を選びます。

20050202P11.JPG - 20,035BYTES

ここで、「Linker Options」というダイアログボックスが表示されますので、「Output」とうタブを選択して、「Output format」を、「S-Record」に変更します。これで、ビルドした時にMOTファイルという、Sフォーマットのファイルが出力されるようになります。

20050202P12.JPG - 35,035BYTES

それではソースコードを編集します。左のウィンドウで、「main.c」をぶちぶちっとクリックし、中身をさくさくっと編集します。ここでは、次のようなコードを使ってます。それぞれの意味については、H8/3664のハードウェアマニュアルなどをみて調べてみて下さい。ここでは、KPIT HEW3+GCCでの開発方法の説明がメインなので、詳細説明は省きます。

#include "ioh83664s.h"


void RSCinit( void )
{
    // RS232C関連レジスタ初期化
    IO.PMR1.BIT.TXD = 1;                    // P22をTXD端子として使う設定
    SCI3.SCR3.BYTE = 0;
    SCI3.SMR.BYTE = 0;

    SCI3.BRR = 8;                           //    ボーレート設定(57600bps)
    SCI3.SCR3.BIT.RIE = 0;                  //    受信割り込み禁止
    SCI3.SCR3.BIT.TE = 1;                   //    送信許可
    SCI3.SCR3.BIT.RE = 1;                   //    受信許可
    SCI3.SSR.BYTE &= 0x80;                  //    ステータスクリア
}

void    RSCsend( unsigned char bData )
{
    while (SCI3.SSR.BIT.TDRE == 0) ;
    SCI3.TDR = bData;
}

unsigned char    RSCrecv( void )
{
    unsigned char  bData;

    while (!SCI3.SSR.BIT.RDRF);
    SCI3.SSR.BYTE &= ~0x38;                 //    手抜きですが、エラー無視。

    bData = SCI3.RDR;                       //    データ取り出し
    SCI3.SSR.BIT.RDRF = 0;                  //    受信フラグクリア
    return bData;
}

int main (void)
{
    RSCinit();

    while( 1 ){
        RSCsend( RSCrecv());
    }

    return (0);
}

中身は、シリアル通信で受信したデータを、そのまま送信(エコーバック)するだけの簡単なものです。それではさっそくビルドしてみましょう。「Build」−「Build」と選んで、心の中で

「ぶぃるど〜!」

と叫びます。きっと、デバッグしまくるようになると、この気持ち、わかってもらえると思います。

20050202P13.JPG - 20,577BYTES

はい、ばっちり、すべてOK!です。

20050202P14.JPG - 16,097BYTES

 

FDT3でROM書き
さて、まず、重要な注意点があります。HEW3上に、Flash Development Toolkit (FDT)らしきアイコンがあり、それをクリックすると、それらしい動作をしますが、これを使ってはいけません。KPITの人に確認しました。ここでは、FDT3英語版…いや、日本語版でも構わないのですが、せっかくなので、KPITさんご指定の英語版を使っています。

さらに、FDT3をインストールすると、「Flash Development Toolkit 3.3 Basic」と「Flash Development Toolkit 3.3」の2つの項目が出てきますが、必ず「Flash Development Toolkit 3.3」の方を起動してください。メニューはこんな感じです。

20050202P15.JPG - 11,820BYTES

さて、これを起動すると、例によってプロジェクトの生成ダイアログが表示されます。もおいい〜と思ってしまいますが、このツールのコンセプトのようなので、「統一感があってよろしい」ぐらいの寛大な気持ちで新プロジェクトを生成しましょう。

20050202P16.JPG - 18,004BYTES

ここでは適当に「H8TINY」という名前で作っていますが、別になんでもいいです。

20050202P17.JPG - 28,374BYTES

それではウィザードに従って、プロジェクトを作ります。

20050202P18.JPG - 41,708BYTES

これはこのまま「次へ」をします。

20050202P19.JPG - 41,048BYTES

さて、ここですが、ここでは、それぞれの環境でのCOMポートを設定してください。もし、この時点で、「USBシリアル変換器」等を差し忘れていた場合、「Select port」から選択することができません。この場合、また、新規作成まで戻ってシリアル変換器をセットし、ウィザードを実行しなおしてください。

そして、この次が重要です。ここでは、ターゲットのクロックを設定します。AKI-H8/3664の場合、16MHzのクロックがじっそうされていますので、「16」を入力します。

20050202P20.JPG - 38,941BYTES

後はデフォルトのまま、「次へ」を押していけばOKです。

20050202P21.JPG - 49,116BYTES

ここもデフォルトのままです。

20050202P22.JPG - 49,955BYTES

はい、これで完了です。画面は、下のピクチャーのようになったと思います。

20050202P24.JPG - 11,631BYTES

んでは、ダウンロードする(ROM書きする)ファイルを選択して、プロジェクトに加えましょう。

「Project」−「Add Files...」と操作して、ファイル選択のダイアログを表示させます。

20050202P25.JPG - 16,738BYTES

先ほど気づいた方もいらっしゃるかもしれませんが、実は、先のHEW3のビルドのモードはデバッグになったままでやっています。そのため、「SerialTest.mot」は、「Debug」というフォルダの下にあります。

20050202P26.JPG - 19,022BYTES

それではいよいよROM書きです。まずは、H8/3664の方をROM書きモードにしてください。そして、「SerialTest.mot」を選択し、右クリックでメニューを呼び出します。そして、「Download File」を選択します。

20050202P27.JPG - 19,401BYTES

後は、メッセージがいろいろでてきて「Image successfully written to device」というメッセージが下のウィンドウに表示されればOKです。最後は、Disconnect(切断)しておきましょう。このFDT3というツール、この操作をするまで、COMポートを使用しっぱなしになるようです。そのため、この操作をしてやらないと、他のアプリケーションでCOMポートを使用することができません。

20050202P28.JPG - 5,052BYTES

そうそう、後、このまま再度プログラムの書き込みを行いたい場合も、一度、「Disconnect」してからDownload操作をしてください。

では、最後に、機能を確認してみましょう。H8/3664を通常のモードにして電源を入れなおします。そして、シリアル端末ソフト(いつもTera Termを使っています)を起動して、COMポートに接続します。何かキー入力をしてみてください。入力した文字が表示されると思います。

20050202P29.JPG - 6,821BYTES

普通にパソコン使っていると「入力した文字が表示されるのはあたりまえジャン」なんて思ったりしますが、実は、このプログラムのように、入力された文字を送信しないと表示されないんですよ。

はい、これであなたもKPIT HEW3+GCCの仲間入りです。

 


SISO-LAB Knowledge