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 件のコメント:
コメントを投稿