連載
» 2007年02月19日 00時00分 公開

ターゲットボードでLEDを点灯させてみるH8で学ぶマイコン開発入門(6)(2/3 ページ)

[山本 繁寿 ソフィアシステムズ,MONOist]

プログラムの概要

 本連載で作成するプログラムの流れは、以下のようになっています。

 マイコンおよび開発環境の種類にもよりますが、本連載で使用するH8マイコンとHEWを使えば、大部分の初期化プログラムは、C言語で記述できます。C言語で記述できないリセットベクタのアドレスとスタックポインタは、アセンブリ言語で記述します。リスト1は最低限必要なアセンブリ言語による初期化プログラムの例です。


.CPU 300HA
.SECTION A,DATA,LOCATE=H'000000
.IMPORT  _main
.DATA.L  H'00100       ;リセットベクタ
.ORG     H'000100
MOV.L    #H'FFF10,ER7  ;スタックポインタ設定
jmp      @_main
.END
リスト1 アセンブリ言語による初期化プログラム

 ターゲットボードの電源をONにすると、プログラムカウンタ(PC)はリセットベクタの先頭アドレスを指します。これを行っているのが「.DATA.L H'00100」と「.ORG H'000100」です。これによりCPUリセット番地が、100H番地に決まります。

 次に「MOV.L #H'FFF10,ER7」によってスタック領域の先頭アドレス(スタックポインタ:ER7レジスタ)を設定しています。アセンブリ言語でしか記述できない初期設定を行った後、jmp命令でmain関数へ分岐します。これ以降はC言語により、そのほかの初期化を行います。

初期化プログラム概要

 H8/3048F-ONEには、10本の入出力ポートと1本の入力専用ポートがあります。各ポートは兼用端子となっていますので、I/Oポートを初期化するプログラムでは、各端子の入出力方向や格納データの初期化を行います。具体的には以下のポートを初期化します(表2)。

  • P1ポート:ロータリエンコーダ0を接続
  • P2ポート:LED×8を接続
  • P3ポート:ロータリエンコーダ1を接続
  • P4ポート:LCDを接続
  • P5ポート:ステッピングモータ0を接続。またP6方向の切り替え(トグルスイッチ9)
  • P6ポート:ステッピングモータ1を接続
  • P7ポート:トグルスイッチ(TGLSW1-8)を接続
  • P8ポート:ロータリエンコーダ制御
  • P9ポート:ステッピングモータ制御およびJTAGポートを接続
  • PAポート:サーボモータおよび拡張ポートAを接続
  • PBポート:DCモータを接続

 上記以外にも以下の初期設定を行います。

  • LCD初期化および表示
  • DCモータ初期化
  • ステッピングモータ初期化
  • PWM初期化
ターゲットボードの部品配置図 図2 ターゲットボードの部品配置図

 これらの初期化プログラムは、すべてC言語で記述できます。以下では、ポート2に接続されたLEDを例題として、初期化プログラムとLED点灯プログラムを解説します。

LED点灯プログラム

 ターゲットボードには、LEDが8個搭載されています。各LED(LED1〜8)は、ポート2の各端子(P20〜P27)に接続されています。ポートから0を出力するとLEDは点灯、1を出力するとLEDは消灯します。

 ポート2は、アドレス出力とポートを兼用した8ビット入出力ポートです。ポート2をアドレス出力として使うか、入出力ポートとして使うかは、CPU動作モードにより異なります。

 モード1〜4(内蔵ROM無効拡張モード)の場合、ポート2はアドレスバス(A15〜A8)の出力端子となります。モード5および6(内蔵ROM有効拡張モード)の場合は、ポート2データディレクションレジスタ(P2DDR)の設定により、アドレスバス(A15〜A8)または入力ポートとなります。

 本連載で使用しているターゲットボード(モード7:シングルチップモード)の場合、ポート2は入出力ポートとなります。ここでポート2は、以下のレジスタにより制御されます。

  • ポート2データディレクションレジスタ:P2DDR
  • ポート2データレジスタ:P2DR
  • ポート2入力プルアップMOSコントロールレジスタ:P2PCR

P2DDRレジスタ

 P2DDRは、8ビットのライト専用のレジスタです。ポート2の各端子の入出力(ポート2を入力ポートとして使うか、出力ポートとして使うか)をビットごとに指定することができます。以下はモード7の場合のP2DDRの仕様です。

 P2DDRの各ビットに1をセットすると対応するポート2の端子は出力ポートとなり、0にクリアすると入力ポートとなります。ターゲットボードでポート2はLEDに接続されていますので、P2DDRの各ビットには1をセットします。

P2DRレジスタ

 P2DRは、8ビットのリード/ライト可能なレジスタです。ポート2の出力データを格納します。ポート2が出力ポートとして機能する場合、本レジスタの値がポートに接続された端子に出力されます。

P2PCRレジスタ

 P2PCRは8ビットのリード/ライト可能なレジスタです。ポート2に内蔵した入力プルアップMOSをビットごとに制御します。


Copyright © ITmedia, Inc. All Rights Reserved.