5-1.システムコントロールの設定
まず、システムコントロールレジスタ0および1で、内蔵ROMとRAMを使うかどうか設定します。通常は両方とも使用すると思うので、次のように記述します。
SYSTEM.SYSCR0.WORD = 0x5A01; /* ←外部バスを使わない場合 */
SYSTEM.SYSCR0.WORD = 0x5A03; /* ←外部バスを使う場合 */
SYSTEM.SYSCR1.WORD = 0x0001;
ROMEとRAMEは初期状態で“1”なので、外部バスを使わない場合は初期状態のままで問題ありません。なお、ROMEは“0”を書き込むと、リセットする以外に“1”に戻せないので注意が必要です。
5-2.システムクロックの設定
次に、システムクロックコントロールレジスタで各部のクロックを設定します。
設定するクロックは次の3点です。
ICK=システムクロック(CPU,DMACA,DTC,ETHERC,EDMAC,ROM,RAM の動作クロック)
BCK=外部バスクロック(外部バスコントローラ,EXDMAC の動作クロック)
PCK=周辺モジュールクロック
例えばEXTAL=12MHzのとき、ICK=96MHz,BCK=48MHz,PCK=48MHz、かつSDCLKとBCLK端子出力を禁止とするには、次のように設定します。
SYSTEM.SYSCR.LONG = 0x00C10100;
このとき、システムクロック ICKは、外部バスクロックBCKおよび周辺モジュールクロックPCK以上の周波数とならなければいけません。
備考:これらの初期設定は、新規プロジェクトを作成するとき生成されるファイルhwsetup.c内にある、関数HardwareSetupに記述します。
5-3.I/Oポートの設定
I/Oポートはマイコンのパッケージにより異なる部分があるので、使用できるポートとビット構成をマニュアルで確認しておく必要があります。
ここでは、100ピンLQFPパッケージのポート5を、下図のように設定する場合を例に説明します。
下記は、ポート5の初期化例です。
PORT5.DR.BYTE = 0x00;
PORT5.DDR.BYTE = 0x20;
PORT5.ICR.BYTE = 0x1F;
value = PORT5.PORT.BYTE;
PORT5.DDR.BYTE = 0x20;
PORT5.ICR.BYTE = 0x1F;
value = PORT5.PORT.BYTE;
H8/3694FでPCRと呼ばれていた出力ポートを設定するレジスタは、DDR(Data Direction Register)と呼ばれています。また、同名のDDRを持つH8マイコンとも異なり、RXマイコンのDDRは読み出し可能になっています。従って、ANDやORなどの論理演算あるいはビット操作命令でも設定できます。
もう一つH8マイコンと異なる点として、ICR(Inputbuffer Control Register)というレジスタがあります。入力ポートにしたいビットは、DDRの対象ビットに“0”を書き込んだだけでは入力ポートとして使用できず、ICRで入力バッファを有効にしなければなりません。この設定は、I/Oポートに限らず周辺モジュールの入力として使う場合も必要です。
/* “0”を書き込んだビットが入力、“1”を書き込んだビットが出力になります */
/* b4~b0の入力バッファを有効にします */
/* 入力ポートを読み込む場合はPORTレジスタを読み込みます */