RX62マイコンでコンペアマッチタイマを使う.
使ったのはAKI-RX62マイコンボード
HEW+FDT
参考
http://memo--randum.blogspot.com/2011/07/rx.html
まだ検証中だけど動いたのでとりあえずメモ
(周期とかうまくいってない)
#include "iodefine.h"
void intCMT0()
{
static int count = 0;
static int pattern = 0x0f;
static int flag = 0;
//1msec
//CMT0.CMCR.BIT.CMIE = 0;
CMT.CMSTR0.BIT.STR0 = 0; // CMTカウンタ停止
CMT0.CMCNT = 0; // カウントクリア
count= count+1;
if(count > 1000)
{
PORT2.DDR.BIT.B0 = flag;
PORTA.DDR.BYTE = pattern;
flag = ~flag;
pattern = ~pattern;
count = 0;
}
CMT0.CMCR.BIT.CMIE = 1;
CMT.CMSTR0.BIT.STR0 = 1; // CMTカウンタ開始
}
int main(void)
{
long t;
// PORTA
PORTA.DR.BYTE = 0xff; // 出力端子に設定
PORTA.DDR.BYTE = 0x00; // 初期値
// PORT2
PORT2.DR.BYTE = 0xff; // 出力端子に設定
PORT2.DDR.BYTE = 0x00; // 初期値
SYSTEM.MSTPCRA.BIT.MSTPA15 = 0; //モジュールストップ状態の解除 CMTユニット0
//SYSTEM.MSTPCRA.BIT.MSTPA8 = 0; // MTUユニット1
CMT.CMSTR0.BIT.STR0 = 0; // CMTカウンタ停止
CMT0.CMCR.BIT.CMIE = 0; // コンペアマッチ割り込み停止
CMT0.CMCR.BIT.CKS = 0; // φ/8 = 12,500,000
CMT0.CMCNT = 0; // カウントクリア
CMT0.CMCOR = 12500; // 周期設定
ICU.IER[0x03].BIT.IEN4 = 1; // 割り込み要求許可
ICU.IPR[0x04].BIT.IPR = 10; // 割り込み優先レベル
CMT0.CMCR.BIT.CMIE = 1; // コンペアマッチ割り込み許可
CMT.CMSTR0.BIT.STR0 = 1; // CMTカウンタ開始
//set_psw(0x00010000); // #define PSW_init 0x00010000 // PSW bit pattern
//PORT2.DDR.BYTE = 0xff;
while(1)
{
/*
for(t=0; t<6000000; t++); // wait about 1sec
PORT2.DDR.BYTE = 0x01; // LED1
PORTA.DDR.BYTE = 0x01; // LED1
for(t=0; t<6000000; t++); // wait about 1sec
PORT2.DDR.BYTE = 0x02; // LED2
PORTA.DDR.BYTE = 0x02; // LED2
*/
}
return 0;
}
あと,"intprg".c中の
void Excep_CMTU0_CMT0(void){ }
をちょっと書き加えて
// CMTU0_CMT0
void Excep_CMTU0_CMT0(void)
{
intCMT0();
}
Interface の特集読んだ方が楽にできそう