2012年9月13日木曜日

SH7144でAD変換をするプログラム。
わざわざBIT単位で指定しているので無駄に長くなっています。

AD_c.c
//==========
//#include "SH7144ENSHUU.c"
#include "iodefine.h"
#include "AD_convert.h"
void init_AD_c(void){
 //A/D変換
 MST.CR2.BIT._AD0=0;  // A/D Conv 0ch スタンバイ解除
 MST.CR2.BIT._AD1=0;  // A/D Conv 1ch スタンバイ解除

 //ADCR
 AD0.ADCR.BIT.TRGE =0; //トリガによる開始は無効
 AD0.ADCR.BIT.CKS =3; //クロック・セレクト
 AD0.ADCR.BIT.ADST =0; //A/D停止
 AD0.ADCR.BIT.ADCS =0; //0:1サイクルスキャン
       //1:連続スキャン
 //
 AD1.ADCR.BIT.TRGE =0; //トリガによる開始は無効
 AD1.ADCR.BIT.CKS =3; //クロック・セレクト
 AD1.ADCR.BIT.ADST =0; //A/D停止
 AD1.ADCR.BIT.ADCS =0; //0:1サイクルスキャン
       //1:連続スキャン

 //ADCSR
 AD0.ADCSR.BIT.ADIE =1; //0:ADI割り込み禁止
       //1:ADI割り込み許可
 AD0.ADCSR.BIT.ADM = 1; //A/D動作モードセレクト //ADMとCHの組み合わせによってA/D変換する端子の組み合わせを決定します。
       //0:シングルモード
       //1:スキャンモード
 AD0.ADCSR.BIT.CH = 3; //チャンネルセレクト1,0 //ADMとCHの組み合わせによってA/D変換する端子の組み合わせを決定します。
 //
 AD1.ADCSR.BIT.ADIE =1; //0:ADI割り込み禁止
       //1:ADI割り込み許可
 AD1.ADCSR.BIT.ADM = 1; //A/D動作モードセレクト //ADMとCHの組み合わせによってA/D変換する端子の組み合わせを決定します。
       //0:シングルモード
       //1:スキャンモード
 AD1.ADCSR.BIT.CH = 3; //チャンネルセレクト1,0 //ADMとCHの組み合わせによってA/D変換する端子の組み合わせを決定します。
 //割り込み優先レベル設定
 INTC.IPRG.BIT._AD = 0x1;
}
get_AD_c(void){
 int x;
 AD0.ADCR.BIT.ADST=1;    // A/D Start
 while(AD0.ADCSR.BIT.ADF==0);//ADF(ADエンド・フラグ)が1になるのを待つ。
 x=AD0.ADDR1.WORD >>6; //ADDR1を読み込み上位10ビットを切り出す。
 AD0.ADCSR.BIT.ADF=0; //ADF(ADエンド・フラグ)をクリア
}
void start_AD0_c(void){AD0.ADCR.BIT.ADST=1;}
void start_AD1_c(void){AD1.ADCR.BIT.ADST=1;}
//A/D変換結果を格納する変数
unsigned short int AD_c_AN0;
unsigned short int AD_c_AN1;
unsigned short int AD_c_AN2;
unsigned short int AD_c_AN3;
unsigned short int AD_c_AN4;
unsigned short int AD_c_AN5;
unsigned short int AD_c_AN6;
unsigned short int AD_c_AN7;
//移動先を格納する変数
int goto_AD0;
int goto_AD1;
int goto_AD2;
int goto_AD3;
int goto_AD4;
int goto_AD5;
int goto_AD6;
int goto_AD7;
long y;
//割り込み処理
//intprg.cの136,137をコメントアウト
// 136 A/D ADI0
#pragma interrupt INT_ADI0
void INT_ADI0(void){
 /*
 AD_c_AN0 = AD0.ADDR0.WORD >>6;//ADDR0を読み込み上位10ビットを切り出す。
 AD_c_AN1 = AD0.ADDR1.WORD >>6;//ADDR1を読み込み上位10ビットを切り出す。
 AD_c_AN2 = AD0.ADDR2.WORD >>6;//ADDR2を読み込み上位10ビットを切り出す。
 AD_c_AN3 = AD0.ADDR3.WORD >>6;//ADDR3を読み込み上位10ビットを切り出す。
 */
 AD_c_AN0 = AD0.ADDR0.WORD >>8;//ADDR0を読み込み上位8ビットを切り出す。
 AD_c_AN1 = AD0.ADDR1.WORD >>8;//ADDR1を読み込み上位8ビットを切り出す。
 AD_c_AN2 = AD0.ADDR2.WORD >>8;//ADDR2を読み込み上位8ビットを切り出す。
 AD_c_AN3 = AD0.ADDR3.WORD >>8;//ADDR3を読み込み上位8ビットを切り出す。

 AD0.ADCSR.BIT.ADF=0;//ADF(ADエンド・フラグ)をクリア
 }
 //

 AD0.ADCSR.BIT.ADF=0;//ADF(ADエンド・フラグ)をクリア
}
// 137 A/D ADI1
#pragma interrupt INT_ADI1
void INT_ADI1(void){
 /*
 AD_c_AN4 = AD1.ADDR4.WORD >>6;//ADDR4を読み込み上位10ビットを切り出す。
 AD_c_AN5 = AD1.ADDR5.WORD >>6;//ADDR5を読み込み上位10ビットを切り出す。
 AD_c_AN6 = AD1.ADDR6.WORD >>6;//ADDR6を読み込み上位10ビットを切り出す。
 AD_c_AN7 = AD1.ADDR7.WORD >>6;//ADDR7を読み込み上位10ビットを切り出す。
 */
 AD_c_AN4 = AD1.ADDR4.WORD >>8;//ADDR4を読み込み上位8ビットを切り出す。
 AD_c_AN5 = AD1.ADDR5.WORD >>8;//ADDR5を読み込み上位8ビットを切り出す。
 AD_c_AN6 = AD1.ADDR6.WORD >>8;//ADDR6を読み込み上位8ビットを切り出す。
 AD_c_AN7 = AD1.ADDR7.WORD >>8;//ADDR7を読み込み上位8ビットを切り出す。

 AD1.ADCSR.BIT.ADF=0;//ADF(ADエンド・フラグ)をクリア
}
//========================




AD_c.h
//=================
extern void init_AD_c(void);

extern void start_AD0_c(void);
extern void start_AD1_c(void);

extern unsigned short int AD_c_AN0;
extern unsigned short int AD_c_AN1;
extern unsigned short int AD_c_AN2;
extern unsigned short int AD_c_AN3;
extern unsigned short int AD_c_AN4;
extern unsigned short int AD_c_AN5;
extern unsigned short int AD_c_AN6;
extern unsigned short int AD_c_AN7;



このブログのSH7144F関連記事トップ
http://the-united-front.blogspot.jp/2013/09/interface-20066sh7144f-blog-1-2012810.html







0 件のコメント:

コメントを投稿