作成: 2005-05-17 23:04:32 (火)
更新: 2005-05-23 00:11:34 (月)
参照: 6651

#contents


H8MAXでD/A、A/D変換器を使う

/* internal Peripherals Register address define */
/* CPU: H8/306x                                 */

#if !defined(__REGS_H8306x__)
#define __REGS_H8306x__
 
#if defined(__KERNEL__)

#define DASTCR 0xFEE01A
//#define DADR0  0xFEE09C
//#define DADR1  0xFEE09D
//#define DACR   0xFEE09E
#define DADR0  0xFFFF9C     // h8/3069F
#define DADR1  0xFFFF9D     // H8/3069F
#define DACR   0XFFFF9E     // H8/3069F

D/Aコンバータのデバイスドライバをテスト

  • Armadillo-J dist (uClinux-dist-aj20050421.tar.gz)のLEDデバイスドライバを参考に、手探りでやってみた。
    • 現状、D/Aはキャラクタデバイス(h8maxdac c 254 0)として、DAOE0をON、OFFする機能のみ


D/A、A/D変換のテストコード(2005-05-17)

//-----------------------
//  H8MAX A/D, D/A Test
//-----------------------
#include <stdio.h>
#define __KERNEL__
#include <asm/regs306x.h>
#define regb(x) ( *( unsigned char* )x )
#define regbs(x,d) ( *(unsigned char*)x = (unsigned char)d)
#define NORMAL ((int) 0);

int main( int argc, char* argv[] )
{
       printf( "\t--- A/D Converter ---\n");
       printf( "\tADCR   = 0x%x\n", regb(ADCR  ));

       // start A/D convert
       regbs(ADCSR, 0x20);
       printf( "\tADCSR  = 0x%x\n", regb(ADCSR ));
       printf( "\tADDRAH = 0x%x\n", regb(ADDRAH));
       printf( "\tADDRAL = 0x%x\n", regb(ADDRAL));
       printf( "\tADDRBH = 0x%x\n", regb(ADDRBH));
       printf( "\tADDRBL = 0x%x\n", regb(ADDRBL));
       printf( "\tADDRCH = 0x%x\n", regb(ADDRCH));
       printf( "\tADDRCL = 0x%x\n", regb(ADDRCL));
       printf( "\tADDRDH = 0x%x\n", regb(ADDRDH));
       printf( "\tADDRDL = 0x%x\n", regb(ADDRDL));
       // regbs(ADCSR, 0x00);
       // printf( "\tADCSR = 0x%x\n", regb(ADCSR));

       printf( "\t--- D/A Converter ---\n");
       // set DASTCR
       regbs(DASTCR, 0xFF);
       printf( "\tDASTCR = 0x%x\n", regb(DASTCR));

       // DACR: bit7,6,5 = 0 (DAOE1,DAOE0,DAE = OFF)
       regbs(DACR, 0x1F);
       printf( "\tDACR   = 0x%x\n", regb(DACR));

       // set DADR0 (128/256) * 5V
       regbs(DADR0, 0x80);
       // set DADR1 (128/256) * 5V
       regbs(DADR1, 0x80);

       printf( "\tDADR0  = 0x%x\n", regb(DADR0 ));
       printf( "\tDADR1  = 0x%x\n", regb(DADR1 ));

       // D/A output: DAOE0,DAOE1 = 1
       regbs(DACR, 0xDF);
       printf( "\tDACR   = 0x%x\n", regb(DACR  ));

       return NORMAL;
}

テスト結果:テスターでD/A出力電圧を確認した。

  • ブラウザからCGIで試行予定
           --- A/D Converter ---
           ADCR   = 0x7e
           ADCSR  = 0x20
           ADDRAH = 0x9e
           ADDRAL = 0x0
           ADDRBH = 0x0
           ADDRBL = 0x0
           ADDRCH = 0x0
           ADDRCL = 0x0
           ADDRDH = 0x0
           ADDRDL = 0x0
           --- D/A Converter ---
           DASTCR = 0xff
           DACR   = 0x1f
           DADR0  = 0x80
           DADR1  = 0x80
           DACR   = 0xdf

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Mon, 23 May 2005 00:11:34 JST (4390d)