統合開発環境“HEW”をセットアップする:H8で学ぶマイコン開発入門(5)(1/3 ページ)
H8マイコンの統合開発環境HEWについて、コンパイラオプション、リンクオプション、ビルド・エラー時の対応など、基本的な使い方を解説する。
国語辞典で「開発」の意味を調べると、「新しいものを考え出し、それを実用化すること」とあります。アイデアは自分の頭の中で生み出せますが、それを具体化するための作業を実際に開始すると、さまざまな問題点が発生します。開発環境は、開発過程で発生する問題点を解決するための手助けや手段を与える道具です。
開発環境には多くの種類がありますが、現在では統合開発環境が主流となっています。そこで今回は、H8マイコン制御プログラムを開発するために使用する、ルネサステクノロジ社製「HEW」(High-performance Embedded Workshop)の使い方について解説します。
HEWの概要
HEW(世間では「ヒュウ」と呼びます)はいわゆる統合開発環境です。HEWにはエディタおよびアセンブラやC/C++コンパイラ、最適化リンカなどのビルドツール、シミュレータデバッガ、スタック消費量を算出するためのCall Walkerなどが含まれています。
またHEWには、内部I/Oレジスタの名称や各レジスタが配置されたアドレスなどを定義したヘッダファイルを自動的に生成する機能があります。本連載で使用するH8/3048F-ONEマイコンには、38種類の内部IOが実装されていますので、これらを制御する内部I/Oレジスタの定義ファイルを自作することは大変です。HEWを使えば、内部I/Oレジスタのヘッダファイルは自動生成されます。ここでは、H8/3048F-ONEマイコンに内蔵されているITU(16ビットインテグレーテッドタイマユニット)を例に取ります。
H8/3048F-ONEマイコンのITUを制御するレジスタには、以下の種類があります。
タイマスタートレジスタ:TSTR
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | ---- | ---- | STR4 | STR3 | STR2 | STR1 | STR0 |
ビット0(STR0)〜ビット4(STR4)により、タイマカウンタTCNT0〜4の動作/停止を制御します。
タイマシンクロレジスタ:TSNC
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | ---- | ---- | SYNC4 | SYNC3 | SYNC2 | SYNC1 | SYNC0 |
ビット0(SYNC0)〜ビット4(SYNC4)により、タイマ0〜4の独立動作/同期動作を制御します。
タイマモードレジスタ:TMDR
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | MDF | FDIR | PWM4 | PWM3 | PWM2 | PWM1 | PWM0 |
ビット0(PWM0)〜ビット4(PWM4)により、タイマ0〜4のPWMモードを制御します。ビット5(FDIR)によりTSR2のオーバーフロー(OVF)フラグの設定、ビット6(MDF)によりITU2の位相計測モードを設定します。
タイマファンクションコントロールレジスタ:TFCR
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | ---- | CMD1 | CMD0 | BFB3 | BFB2 | BFB1 | BFB0 |
ビット0(BFB0)〜ビット3(BFB3)により、バッファ動作を制御します。ビット4(CMD0)とビット5(CMD1)により、ITU3とITU4の相補PWMモード/リセット同期PWMモードの制御を行います。
タイマアウトプットマスタイネーブルレジスタ:TOER
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | ---- | EXB4 | EXA4 | EB3 | EB4 | EA4 | EA3 |
ITU3とITU4の出力の許可/禁止を制御します。ビット0(EA3)〜ビット3(EB3)により、TIOCA3/TIOCB3/TIOCA4/TIOCB4端子出力の許可/禁止を制御します。ビット4(EXA4)とビット5(EXB4)により、TOCXA4/TOCXB4端子出力の許可/禁止を制御します。
タイマアウトプットコントロールレジスタ:TOCR
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
---- | ---- | ---- | XTGD | ---- | ---- | OLS4 | OLS3 |
ビット0(OLS3)とビット1(OLS4)により、相補PWMモード/リセット同期PWMモードの出力レベルを制御します。ビット4(XTGD)により、相補PWMモード/リセット同期PWMモード出力の外部トリガによる出力禁止を制御します。
リスト1は、HEWが生成した、これらのレジスタを定義するためのヘッダファイルです。
リスト1の中で、青色の部分はITUの各レジスタを定義した構造体テンプレートです。構造体の実体は、リストの最後の部分(赤色部分)で実装しています。H8/3048F-ONEマイコンでITUは、FFFF60H番地に割り付けられていますので、構造体の先頭アドレスを0xFFFF60と指定しています。また、volatileを指定することで、コンパイラによる最適化を禁止しています。
構造体テンプレートのミソは、共用体(union)とビットフィールド構造体を使っていることです。
例えば、タイマスタートレジスタTSTRのサイズは8ビットです。ビットフィールド構造体を使うことで、有効ビットであるビット0(STR0)からビット4(STR4)をビット単位でアクセスできます。STR0からSTR4を個別にアクセスする場合は、以下のようなプログラムを記述します。
ITU.TSTR.BIT.STR0 = 1; ITU.TSTR.BIT.STR1 = 0; ITU.TSTR.BIT.STR2 = 1; ITU.TSTR.BIT.STR3 = 0;
また、バイト単位で一括してアクセスしたい場合は、以下のプログラムを記述します。
ITU.TSTR.BYTE = 0x05;
どちらも同じ結果が得られますが、特定ビットだけを操作したい場合は、ビットアクセスの方が便利です。
Copyright © ITmedia, Inc. All Rights Reserved.