#include"intCMT_rx220.h"

unsigned short LN;
unsigned long _systime;

#define KEY_PRCR 0xA500	//プロテクト解除で使用するキー 0xA5 固定
#define PRCR_CLK 0x0001	//クロック関連
#define PRCR_MOD 0x0002	//動作モード、消費電力低減機能、ソフトウェアリセット関連
#define PRCR_LVD 0x0008	//電圧監視関連
#define PRCR_ALL (PRCR_CLK|PRCR_MOD|PRCR_LVD)	//全て

#define PROTECTOFF		(KEY_PRCR|PRCR_MOD)
#define PROTECTON		(KEY_PRCR)

void init_CMT0(int T){
	_systime=0;

	SYSTEM.PRCR.WORD = PROTECTOFF;	//プロテクト解除
	MSTP(CMT0)=0;					//CMT0モジュール停止解除
	SYSTEM.PRCR.WORD = PROTECTON;	//プロテクト
	
    IPR(CMT0, CMI0) = 0x7u;		//割込み優先順位
    IEN(CMT0, CMI0) = 0x1u;  	//割込み許可
    IR(CMT0, CMI0) = 0x0;		//割込みフラグクリア(クリアしなくても動く)

//	LN=T*(1250-1);	// 0.8us×1250 → 1ms@20MHz,2分周期1/8φ
	LN=T*(1000-1);	// 1.0us×1000 → 1ms@32MHz,1分周期1/32φ
	LN=(LN>0xFFFF)?0xFFFF:LN;	//リミット
	CMT0.CMCOR = LN;			//上限値　0-0xFFFF(65535)

//	CMT0.CMCR.BIT.CKS=0;		//クロック1/8φ (20MHz,2分周期,1/8φ→0.8us)
	CMT0.CMCR.BIT.CKS=1;		//クロック1/32φ (32MHz,1分周期,1/32φ→1.0us)
	CMT0.CMCR.BIT.CMIE=1;		//コンペアマッチ割り込み許可
	CMT0.CMCNT=0;				//カウンタ初期化
	CMT.CMSTR0.BIT.STR0 = 1;	//CMT0カウント開始
}

//ベクタ番号28　intprg.c Excep_CMTU0_CMT0内で実行させる
void CMTU0_INT_CMT0(void){
	_systime++;
    //IR(CMT0, CMI0) = 0x0;

}

unsigned long getsystime(void){
	return _systime;
}