
#include "iodefine.h"
#include "ADConv.h"

//SH7125用
//PF0〜PF7をAN0〜7として使用

/*==========アナログ入力の初期化関数==========*/
void init_ADC(void){
//  ADCモジュールのスタンバイ解除
	STB.CR4.BIT._AD0=0;	//AN0-3
	STB.CR4.BIT._AD1=0;	//AN4-7

//  A/D コントロール／ステータスレジスタの設定
	AD0.ADCSR.BIT.ADIE  =0;	// A/Dインタラプト(ADI)イネーブル
	AD0.ADCSR.BIT.TRGE  =0;	// トリガイネーブル
	AD0.ADCSR.BIT.CONADF=0;	// ADF コントロール
	AD0.ADCSR.BIT.STC   =0;	// ステートコントロール		 
	AD0.ADCSR.BIT.CKSL  =0;	// A/D変換時間;Pφ/4
	AD0.ADCSR.BIT.ADM   =1;	// 変換動作モード(4チャネルスキャンモード)
	AD0.ADCSR.BIT.ADCS  =0;	// A/D連続スキャン(1サイクルスキャン)	
	AD0.ADCSR.BIT.CH    =3;	// チャネルセレクト(AN0-3全て)

	AD1.ADCSR.BIT.ADIE  =0;	// A/Dインタラプト(ADI)イネーブル
	AD1.ADCSR.BIT.TRGE  =0;	// トリガイネーブル
	AD1.ADCSR.BIT.CONADF=0;	// ADF コントロール
	AD1.ADCSR.BIT.STC   =0;	// ステートコントロール		 
	AD1.ADCSR.BIT.CKSL  =0;	// A/D変換時間;Pφ/4
	AD1.ADCSR.BIT.ADM   =1;	// 変換動作モード(4チャネルスキャンモード)
	AD1.ADCSR.BIT.ADCS  =0;	// A/D連続スキャン(1サイクルスキャン)	
	AD1.ADCSR.BIT.CH    =3;	// チャネルセレクト(AN0-3全て)
}

/*==========アナログ変換実行関数==========*/
void check_ai(void){
    AD0.ADCR.BIT.ADST = 1;        //AN0-3 AD変換開始
    AD1.ADCR.BIT.ADST = 1;        //AN4-7 AD変換開始
    while( AD0.ADCSR.BIT.ADF == 0 || AD1.ADCSR.BIT.ADF == 0 ){}    //変換終了待ち
}


/*==========アナログ入力取得関数(ビット番号)==========*/
short get_ai(int bit){
	unsigned short value;	//一時保管用変数

	if( bit<0 || bit>7 )	//存在しないポートを指定した場合
		return -1;	//関数を強制終了

	value = ( bit==0 )? AD0.ADDR0:	//参照する値を一時保管
		( bit==1 )? AD0.ADDR1:
		( bit==2 )? AD0.ADDR2:
		( bit==3 )? AD0.ADDR3:
		( bit==4 )? AD1.ADDR4:
		( bit==5 )? AD1.ADDR5:
		( bit==6 )? AD1.ADDR6:
		( bit==7 )? AD1.ADDR7: 0;

	return value>>6;	//下位6bitを削除して値を出力
}
