;------------------------------------------------------------------------
;
; FILE :10_bit_fir.src
; DATE :Thu, Oct 23, 2003
; DESCRIPTION :Main Program
; CPU TYPE :H8/3664F
;
; This file is generated by Hitachi Project Generator (Ver.2.1).
;
;------------------------------------------------------------------------
;サンプリング周波数は、実測で 5.3KHzになりました、訂正します。 m(__)m
ADDRA .equ H'FFB0
ADCSR .equ H'FFB8
ADF .bequ 7,ADCSR
ADST .bequ 5,ADCSR
PDRB .equ H'FFDD
PCR5 .equ H'FFE8
PDR5 .equ H'FFD8
PCR1 .equ H'FFE4
PCR2 .equ H'FFE5
PCR7 .equ H'FFEA
PCR8 .equ H'FFEB
fir .equ 61 ;fir_filterを変更する時は、係数の数を、ここで、変更する。
.export _main
_main:
mov.b #255,r0l
mov.b r0l,@PCR5 ;set mode output
mov.b r0l,@PCR1 ;空きI/Oポートの処理 Port1を出力に設定して置く。
mov.b r0l,@PCR8 ;Port8
mov.b #H'07,r0l
mov.b r0l,@PCR2 ;Port2
mov.b #H'70,r0l
mov.b r0l,@PCR7 ;Port7
mov.b #B'00000000,r0l
mov.b r0l,@ADCSR ;set AD MODE ,AN0=in, ADIE=no
bset ADST
loop: bsr to_da
bra loop
to_da:
btst ADST
beq kaishi
rts
kaishi:
mov.w @ADDRA,r1
sub.w #h'8e00,r1 ;中点、無入力の時の入力値を引く
shar.w r1
shar.w r1
shar.w r1
shar.w r1
shar.w r1
shar.w r1 ;10ビットフルで計算してみる
;----kakunou subroutine------
kakunou:
or.b r0l,r0l
bne kakunou_suru
mov.b #fir,r0l ;バッファ用カウンタ
mov.l #buffer_0,er2 ;er2=buffer_0 address+1
mov.l #buffer_1,er3 ;er3=buffer_1 address+1
kakunou_suru:
mov.w r1,@-er2 ;buffer_0に格納--- dataは16ビットに変更
mov.w r1,@-er3 ;buffer_1に格納
;プレデクリメントである事に注意!
dec.b r0l
;----fir_keisan subroutine------
fir_keisan:
push.w r0
push.w r2 ;er2、3は、どうせ、上位2バイトはゼロ
push.w r3
;er3は、プレデクリメントだから、
;kakunouした後の、er3は、そのままの位置でよい筈や。
mov.l #fir_data,er2 ;er2 = fir dataの始めaddress
;前準備
sub.l er5,er5 ;総和に使用する er5=0
mov.b #fir,r0l ;計算用カウンター
; fir 計算開始
mokkai:
mov.w @er3+,r4 ;r4=buffer data
mov.w @er2+,r6 ;r6=fir data
mulxs.w r6,er4
add.l er4,er5 ;総和=er5をとる
addx.b #0,r0h ;加算結果にオーバーフローがあれば、キャリーをr0hに保管する
dec.b r0l
bne mokkai
shar.l er5
shar.l er5
shar.l er5
shar.l er5
shar.l er5
shar.l er5
shar.l er5 ;Q7
shar.l er5 ;Q8
shar.l er5 ;Q9
shar.l er5 ;Q10
okuru:
add.l #127,er5
not.b r5l
mov.b r5l,@PDR5
pop.w r3
pop.w r2
pop.w r0
bset ADST
out:
rts
;----- data section ------------------------------------
.section mydata,data,align=2
init_buffer:
.DATAB.w fir, 0 ;data格納用バッファ1
buffer_1:
.DATAB.w fir, 0 ;バッファ0
buffer_0:
fir_data:
;
----------------------------------------------------------
; 61 Q10 Band(1) Low:0.00000 High:0.10000 R= -103.3078
; Band(2) Low:0.20000 High:0.30000 R= 5.934998E-05
; Band(3) Low:0.40000 High:0.50000 R= -103.3078
;----------------------------------------------------------
.DATA.W 0,0,0,0 ; 4
.DATA.W 0,0,1,0 ; 8
.DATA.W -2,0,0,0 ; 12
.DATA.W 7,0,-6,0 ; 16
.DATA.W -12,0,26,0 ; 20
.DATA.W 2,0,-58,0 ; 24
.DATA.W 52,0,91,0 ; 28
.DATA.W -304,0,407,0 ; 32
.DATA.W -304,0,91,0 ; 36
.DATA.W 52,0,-58,0 ; 40
.DATA.W 2,0,26,0 ; 44
.DATA.W -12,0,-6,0 ; 48
.DATA.W 7,0,0,0 ; 52
.DATA.W -2,0,1,0 ; 56
.DATA.W 0,0,0,0 ; 60
.DATA.W 0 ; 61
.end