リスト5は、H8マイコン用の最も単純なスタートアップルーチンです。
.CPU 300HA:20 .SECTION A,DATA,LOCATE=H'000000 .IMPORT _init .DATA.L H'00100 ;リセットベクタ .ORG H'000100 MOV.L #H'FFF10,ER7 ;スタックポインタ設定 jmp @_init .END
この例では、リセットベクタとスタックポインタの初期値を設定しています。それ以外のハードウェア初期化ルーチンは、先に示したようにCで記述できます。
また、ルネサス テクノロジが提供する統合開発環境であるHEW(High-performance Embedded Workshop)を使うと、スタートアップルーチンの大部分はHEWから自動生成されます。リスト6、リスト7は、HEWから生成されたスタートアップルーチンの一部です。
// vector 7 NMI
__interrupt(vect=7) void INT_NMI(void) {/* sleep(); */}
// vector 8 User breakpoint trap
__interrupt(vect=8) void INT_TRAP0(void) {/* sleep(); */}
// vector 9 User breakpoint trap
__interrupt(vect=9) void INT_TRAP1(void) {/* sleep(); */}
// vector 10 User breakpoint trap
__interrupt(vect=10) void INT_TRAP2(void) {/* sleep(); */}
// vector 11 User breakpoint trap
__interrupt(vect=11) void INT_TRAP3(void) {/* sleep(); */}
void HardwareSetup()
{
SCI0.SMR.BYTE = 0;
SCI0.SMR.BIT.CA = 1;
SCI0.SMR.BIT.CHR = 1;
SCI0.SMR.BIT.PE = 1;
SCI0.SMR.BIT.OE = 1;
SCI0.SMR.BIT.STOP = 1;
SCI0.SMR.BIT.MP = 1;
SCI0.SMR.BIT.CKS = 3;
SCI0.BRR = 0;
SCI0.SCR.BYTE = 0;
SCI0.SCR.BIT.TIE = 1;
SCI0.SCR.BIT.RIE = 1;
SCI0.SCR.BIT.TE = 1;
SCI0.SCR.BIT.RE = 1;
SCI0.SCR.BIT.MPIE = 1;
SCI0.SCR.BIT.TEIE = 1;
SCI0.SCR.BIT.CKE = 3;
SCI0.TDR = 0;
SCI0.SSR.BYTE = 0;
SCI0.SSR.BIT.TDRE = 1;
SCI0.SSR.BIT.RDRF = 1;
SCI0.SSR.BIT.ORER = 1;
SCI0.SSR.BIT.FER = 1;
SCI0.SSR.BIT.PER = 1;
SCI0.SSR.BIT.TEND = 1;
SCI0.SSR.BIT.MPB = 1;
SCI0.SSR.BIT.MPBT = 1;
SCI0.RDR = 0;
SCI0.SCMR.BYTE = 0;
SCI0.SCMR.BIT.SDIR = 1;
SCI0.SCMR.BIT.SINV = 1;
SCI0.SCMR.BIT.SMIF = 1;
}
次回は、開発環境の使い方と簡単なH8プログラムについて解説します。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム