連載
OSが起動する以前のスタートアップルーチン:H8で学ぶマイコン開発入門(4)(4/4 ページ)
OSが搭載されていない組み込みシステムの場合、プログラマはOSが実行してくれる処理のすべてを自分で実装する必要がある。
スタートアップルーチンの記述例
リスト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
リスト5 H8マイコン用のスタートアップルーチン
この例では、リセットベクタとスタックポインタの初期値を設定しています。それ以外のハードウェア初期化ルーチンは、先に示したように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(); */}
リスト6 HEWによる組み込み関数を使った割り込みベクタ設定
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; }
リスト7 HEWによる内蔵レジスタ初期化
次回は、開発環境の使い方と簡単なH8プログラムについて解説します。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.