統合開発環境“HEW”をセットアップするH8で学ぶマイコン開発入門(5)(1/3 ページ)

H8マイコンの統合開発環境HEWについて、コンパイラオプション、リンクオプション、ビルド・エラー時の対応など、基本的な使い方を解説する。

» 2007年01月23日 00時00分 公開

 国語辞典で「開発」の意味を調べると、「新しいものを考え出し、それを実用化すること」とあります。アイデアは自分の頭の中で生み出せますが、それを具体化するための作業を実際に開始すると、さまざまな問題点が発生します。開発環境は、開発過程で発生する問題点を解決するための手助けや手段を与える道具です。

 開発環境には多くの種類がありますが、現在では統合開発環境が主流となっています。そこで今回は、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が生成した、これらのレジスタを定義するためのヘッダファイルです。

HEWが生成したITUのレジスタ定義 リスト1 HEWが生成したITUのレジスタ定義

 リスト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; 

 どちらも同じ結果が得られますが、特定ビットだけを操作したい場合は、ビットアクセスの方が便利です。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.