
#include "iodefine.h"
#include "io_setup.h"

/*=============各ポートの入出力設定と汎用IOの機能設定=============*/
void hardware_setup(void){
    //ポートEの特殊機能設定
    //今回はポートEの0〜7を汎用IOに設定する
    PFC.PECRL2.BIT.PE7MD  = 0x0;	//PE07 IO
    PFC.PECRL2.BIT.PE6MD  = 0x0;	//PE06 IO
    PFC.PECRL2.BIT.PE5MD  = 0x0;	//PE05 IO
    PFC.PECRL2.BIT.PE4MD  = 0x0;	//PE04 IO

    PFC.PECRL1.BIT.PE3MD  = 0x0;	//PE03 IO
    PFC.PECRL1.BIT.PE2MD  = 0x0;	//PE02 IO
    PFC.PECRL1.BIT.PE1MD  = 0x0;	//PE01 IO
    PFC.PECRL1.BIT.PE0MD  = 0x0;	//PE00 IO

    //ポートEの入出力を設定する
    //3,2を入力それ以外は出力
    //1111 1111 1111 0011(2進数)
    //   F    F    F    3(16進数)
    PFC.PEIORL.WORD = 0xFFF3;
    // ！！！注意！！！
    //ベースボードを接続する場合PE02は出力に設定しないこと。

    //ポートAの特殊機能設定
    PFC.PACRL4.BIT.PA15MD = 0x0;	//PA15 IO
    PFC.PACRL4.BIT.PA14MD = 0x0;	//PA14 IO
    PFC.PACRL4.BIT.PA13MD = 0x0;	//PA13 IO
    PFC.PACRL4.BIT.PA12MD = 0x0;	//PA12 IO

    PFC.PACRL3.BIT.PA11MD = 0x0;	//PA12 IO
    PFC.PACRL3.BIT.PA10MD = 0x0;	//PA12 IO

    //ポートAの入出力を設定する
	PFC.PAIORL.WORD = 0x0000;	//全部入力

}

/*============= LED赤の出力関数(0:消灯、1:点灯) =============*/
void set_LED_R(int on){
	if(on==0)	//関数への入力が0の時
		PE.DRL.BIT.B0=0;	//消灯
	else		//それ以外(入力が0の時)
		PE.DRL.BIT.B0=1;	//点灯
}

/*============= LED緑の出力関数(0:消灯、1:点灯) =============*/
void set_LED_G(int on){
	if(on==0)	//関数への入力が0の時
		PE.DRL.BIT.B1=0;	//消灯
	else		//それ以外(入力が0の時)
		PE.DRL.BIT.B1=1;	//点灯
}

/*============= SW1の状態取得関数(SW1上:0、SW1下:1)=============*/
int get_sw1(void){
	return PE.DRL.BIT.B2;
}


/*============= PortA 10-15入力関数(ビット番号) =============*/
int get_PortA_bit(int bit){
	int state=0;	//変数を宣言しておく
	int outdata=0;	//変数を宣言しておく

	if( bit<10 || bit>15 )	//関係ない端子を指定した場合
		return -1;			//0,1以外の数値を返して強制終了
   
	state = PA.DRL.WORD&(0x0001<<bit);	//0または0以外の値として取得
	outdata = (state==0)? 1 : 0 ;		//0-1に変換(プルアップへの対応のため反転)
	return outdata;	//指定したポートの状態を返す
}

/*============= PortE 4-7出力関数(ビット番号、ON/OFF) =============*/
void set_PortE_bit(int bit,int on){
	int outdata=0;

	if( bit<4 || bit>7 )	//関係ない端子を指定した場合
		return;				//ここでこの関数を強制終了

	outdata=0x0001<<bit;

	if(on==0){	//OFFする場合
		PE.DRL.WORD &=~outdata;	//OFF 指定したビットのみ０にする
	}else{
		PE.DRL.WORD |= outdata;	//ON 指定したビットのみ１にする
	}
}
