#include"hwsetup_rx220.h"

#define KEY_PRCR 0xA500	//プロテクト解除で使用するキー 0xA5 固定
#define PRCR_CLK 0x0001	//クロック関連
#define PRCR_MOD 0x0002	//動作モード、消費電力低減機能、ソフトウェアリセット関連
#define PRCR_LVD 0x0008	//LVD関連
#define PRCR_ALL (PRCR_CLK|PRCR_MOD|PRCR_LVD)	//全て

#define PROTECTOFF		(KEY_PRCR|PRCR_CLK|PRCR_MOD)
#define PROTECTON		(KEY_PRCR)

/*クロックを設定する*/
void HardwareSetup(void){
	
	SYSTEM.PRCR.WORD = (KEY_PRCR|PRCR_ALL);	//クロックソース選択の保護の解除
	//SYSTEM.OPCCR.BIT.OPCM = 0x02;			//動作モードの設定。低速/中速
	//SYSTEM.SCKCR.LONG = 0x00001412;		//マニュアル参照。
	
	//SYSTEM.SCKCR.BIT.PCKD	= 0x00;		//周辺モジュールクロックD 分周期
	//SYSTEM.SCKCR.BIT.PCKB	= 0x01;		//周辺モジュールクロックB 分周期(2分周)
	SYSTEM.SCKCR.BIT.PCKB	= 0x00;		//周辺モジュールクロックB 分周期(1分周)
	//SYSTEM.SCKCR.BIT.BCK	= 0x00;		//外部バスクロック 分周期
	SYSTEM.SCKCR.BIT.ICK	= 0x00;		//システムクロック 分周期。
	SYSTEM.SCKCR.BIT.FCK	= 0x00;		//FlashIFクロック 分周期。これを設定しないとデータフラッシュが使えない
	
	//クロックソースの選択
	SYSTEM.SCKCR3.WORD = 0x0100;		//大元のクロックに高速オンチップオシレータ32MHzを使用する。
	//SYSTEM.SCKCR3.WORD = 0x0200;		//大元のクロックにメインクロック20MHzを使用する。
	//SYSTEM.SCKCR3.WORD = 0x0300;		//大元のクロックにサブクロック32.768KHzを使用する。
	
	//クロックの元栓の設定
	SYSTEM.MOSCCR.BYTE = 0;			//メインクロック発振器動作開始
	SYSTEM.SOSCCR.BYTE = 0;			//サブクロック発振器動作開始
	//SYSTEM.LOCOCR.BYTE = 0;		//低速オンチップオシレータ動作開始
	SYSTEM.HOCOCR.BYTE = 0;			//高速オンチップオシレータ動作開始
	//SYSTEM.ILOCOCR.BYTE =1;		//IWDT専用オシレータ停止

	SYSTEM.PRCR.WORD = PROTECTON;	//クロックソース選択の保護

	//ポートHの設定
	PORTH.PODR.BYTE=0x00;  			//出力をすべて0
	PORTH.PDR.BYTE=0xFB;			//PH2だけ入力					

}


/*============= LED赤の出力関数(0:消灯、1:点灯) =============*/
void set_LED_R(int on){
	if(on==0)	//関数への入力が0の時
		PORTH.PODR.BIT.B0=0;	//消灯
	else		//それ以外(入力が1の時)
		PORTH.PODR.BIT.B0=1;	//点灯
}

/*============= LED緑の出力関数(0:消灯、1:点灯) =============*/
void set_LED_G(int on){
	if(on==0)	//関数への入力が0の時
		PORTH.PODR.BIT.B1=0;	//消灯
	else		//それ以外(入力が1の時)
		PORTH.PODR.BIT.B1=1;	//点灯
}

/*============= SW1の状態取得関数(SW1上:0、SW1下:1)=============*/
int get_sw1(void){
	return PORTH.PIDR.BIT.B2;
}