[H8-ML(1972)] RE: [H8-ML(1969)] A/D変換について
From: "xkobayas" <xkobayas@xxxxxxxxxx>
Date: 2002年06月18日(火)14時59分28秒
> A/D変換について、教えてください。
>
下記プログラムでH8-3664 ADC動作しています
試してください
割り込み通知をEventで行っていますが、FlagCheckに変更すれば
使えます
最初に ini_adc( )を読んでおいて、後はget_adc( )を繰り返し
呼ぶだけです

     ///// nkobayas@xxxxxxxxxx

---------------------------------------------------------------------------
;H8-3664: address 16bits
	.heading	"ADC: AD converter"
	.print		list
	.include	"hardware.d"
	.include	"task.d"

	.import	iset_flg,_wai_flg

	.section	P,code,align=2

;
; int getADC(void)	get AN0
	.export	_get_adc
_get_adc:
	bset	#bADST,@ADCSR:8		;start A/D conversion (auto cleared)
    ;wait for completion of A/D conversion
	mov.w	#TWF_ANDW+TWF_CLR,e1	;(wfmode)
	mov.w	#EVNTADC,r1		;(waiptn)
	mov.w	#SYSSIG,e0		;(flgid)
	xor.w	r0,r0			;(p_flgptn)
	jsr	@_wai_flg ;(UINT* p_flgptn, ID flgid, UINT waiptn, UINT wfmode)
	mov.w	@an0data,r0
    ;shift right 6bits to eliminate 0
	shlr.w	r0
	shlr.w	r0
	shlr.w	r0
	shlr.w	r0
	shlr.w	r0
	shlr.w	r0
	rts
;--------------------------------------------------------------------------
; INT handler
;
	.export	adeINT
adeINT:
	push.l	er0
	push.l	er1
	push.l	er2
	push.l	er3
	push.l	er4
	push.l	er5
	push.l	er6
	btst	#bADF,@ADCSR:8	;A/D end ?
	beq	intRtn		;spurious INT -->
	bclr	#bADF,@ADCSR:8	;ACK INT
    ;only AN0 used (single mode)
	mov.w	@ADDRA,r0	;get conversion (6 lowest bits:0)
	mov.w	r0,@an0data
    ;send signal for ADC completed
    	mov.w	#SYSSIG,r4		;sigID
    	mov.b	#EVNTADC,r5l		;eventBitPattern
    	jsr	@iset_flg	;(r4=sigID, r5l=bitEventInfo) simple subroutine
intRtn:
	pop.l	er6
	pop.l	er5
	pop.l	er4
	pop.l	er3
	pop.l	er2
	pop.l	er1
	pop.l	er0
	rte
; ------------ initialization --------------------------------
	.export	_ini_adc
_ini_adc:
	mov.b	#b'01000000,r0l
		;  ||||||___CH2-0: (000=AN0)
		;  |||||_CKS: clock select (*0/1)=(134/70) states
		;  ||||_SCAN: (*0/1)=(single/scan)mode
		;  |||_ADST: A/D start (0/1)=(*/start conversion) auto clr
		;  ||_ADIE: A/D interrupt enable (0/*1)=(disable/enable)
		;  |_ADF: A/D end flag
	mov.b	r0l,@ADCSR:8

	mov.b	#b'00000000,r0l
		;  ||||||||_0: always zero
		;  ||______(reserved)
		;  |_TRGE: trigger enable (*0/1)=(disable/enable)
	mov.b	r0l,@ADCR:8
	rts

	.section	B,data,align=2
an0data:	.res.w	1

	.end


スレッド概略
[1969(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]