モジュロ・タイマ用にソース・コードを書き直す
前回決めた方針に従って、モジュロ・タイマを使うプログラムを作成します。
今まで使ってきたプロジェクトのプログラムを変更するだけでもかまいませんが、 以下の説明では、 RS08C2という別のプロジェクトを作成して使用しています。 プロジェクトの作成に関する詳細は、今回は省略します。
モジュロ・タイマを使う場合もプログラムの基本的な構成は同じになります。 変更が必要なのは、初期設定関数と時間待ち関数だけです。
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
//==============================================================
// SOPTレジスタの設定
//==============================================================
const byte SOPT_INIT
= 0b00100010;
// |||||||+-- RSTPE=0 (PTA2をRESET*として使用しない)
// ||||||+--- BKGDPE=1 (PTA3をBKGDとして使用する)
// |||+++---- Reserved
// ||+------- STOPE=1 (STOP命令を使用可能にする)
// |+-------- COPT=0 (COPの周期)
// +--------- COPE=0 (COP機能を使用しない)
//==============================================================
//==============================================================
// MTIMCLKレジスタの設定
// MTIMモジュールのクロックとして周波数250kHz、周期4usecの
// クロックを使用します。
//==============================================================
const byte MTIMCLK_INIT
= 0b00000100;
// ||||++++-- PS=0100 (x16 プリスケーラを使用する)
// ||++------ CLKS=00 (BUSCLKを使用する)
// ++-------- Reserved
//==============================================================
//==============================================================
// 初期設定
//==============================================================
void initialize(void) {
// TRIMレジスタを設定する
ICSTRM_TRIM =
((const NV_ICSTRMSTR * __paged)CONVERT_TO_PAGED(0x00003FFA))
->Bits.TRIM;
ICSSC_FTRIM =
((const NV_FTRIMSTR * __paged)CONVERT_TO_PAGED(0x00003FFB))
->Bits.FTRIM;
SOPT = SOPT_INIT; // SOPTレジスタを初期化する
PTAD_PTAD0 = 0; // ポートPTA0の初期出力値を設定する
PTADD_PTADD0 = 1; // ポートPTA0を出力に設定する
MTIMCLK = MTIMCLK_INIT; // MTIMCLKレジスタを初期化する
MTIMMOD = 99; // タイマの周期を100に設定する
MTIMSC_TSTP = 0; // タイマを起動する
}
//==============================================================
// 時間待ち
//==============================================================
void wait_moment(void) {
// MTIMモジュールによる時間待ち
while (!MTIMSC_TOF) ; // TOFフラグがセットされるのを待つ
MTIMSC_TOF = 0; // TOFフラグをクリアする
}
//==============================================================
// 出力を反転する
//==============================================================
void reverse_port(void) {
// ポート出力を反転する
PTAD_PTAD0 = ~PTAD_PTAD0;
}
//==============================================================
// メイン関数
//==============================================================
void main(void) {
EnableInterrupts; /* enable interrupts */
/* include your code here */
initialize(); // 初期設定
for(;;) {
wait_moment(); // 時間待ち
reverse_port(); // 出力を反転する
} /* loop forever */
/* please make sure that you never leave main */
}
次回は、プログラムの詳細について解説します。
田中範明
