コメントの内容はRX621のコンペアマッチタイマーに関するものです。
割込みを使わなければ動作させるのは簡単なので、参考までにコードを掲載します。
CMTサンプル
void CMT0_Init(void)
{
CMT0.CMCR.BIT.CKS = 3; /* PCLK/512 */
CMT0.CMCR.BIT.CMIE = 0; /* CMT Interrpt disable */
CMT0.CMCOR = 46874; /* 500ms/(512/48MHz)-1 */
return;
}
void CMT0_Start(void)
{
CMSTR0.BIT.STR0 = 1;
return;
}
void Wait(void)
{
for(; !IR028.IR;) ; /* wait for Interrupt Reqest */
IR028.IR = 0; /* Interrupt Request clear */
return;
}
void main(void)
{
/*
system setting
*/
/*
pre-process
*/
CMT0_Init();
/*
timer pre-process
*/
CMT0_Start();
for(;;){
/*
wait pre-process
*/
Wait(); /* wait for passage of 500ms */
/*
timer post-process
*/
}
}
周辺クロックPCLKは48MHzであると仮定しています。本件のCMTでは割込みを利用しないためCMCRのCMIEビットは0です。これはリセット後の初期値でもあるため、設定はしなくても大丈夫です。
サンプルの使い方はポーリング向けにしていますが、Wait()関数で500ms経過まで黙んまりになってしまうので、500ms経過待ちの時も処理を行うには変更が必要です。
Wait()関数の変更例
char Wait(void)
{
char Ret;
if(IR028.IR){ /* there're Interrupt Reqest */
IR028.IR = 0;
Ret = -1; /* return TRUE */
}else{ /* no Interrupt Request */
Ret = 0; /* return FALSE */
}
return Ret;
}
void main(void)
{
/*
system setting
*/
/*
pre-process
*/
CMT0_Init();
/*
timer pre-process
*/
CMT0_Start();
for(;;){
/*
wait pre-process
*/
for(; Wait();){
/* wait for passage */
}
/*
wait post-process
*/
}
}
Wait()関数の中身をポーリング処理に変更しました。こうすると500msの経過を待ちつつ、空いた時間に別処理を行えます。