9-6-1
/*
Sample for Finite Impuls Response Filter
*/
#include
#include "iodefine.h"
#define size 51
extern void setDSP(void) ;
extern unsigned int fir(unsigned short) ;
extern unsigned short hn[size],hn_rom[size],*inpa,xn[size] ;
void initAdDa0(void) ;
void initTmu0(void) ;
void initXYRAM() ;
void main(void) ;
void main(void){
unsigned short *p;
inpa = &xn[50] ;
for(p=&xn[0] ; p<&xn[51] ; p++) *p = 0 ;
initXYRAM() ;
set_cr(0x60001002) ; /* DSP bit on */
setDSP() ;
initAdDa0() ; /* Initialize A/D1 D/A0 */
initTmu0() ; /* Initialize TMU0 */
while(1) /* sleep()*/ ;
}
void initAdDa0(void){
AD.CR.BYTE = 0x27 ; /* */
AD.CSR.BYTE = 0x31 ; /* Scan mode AN1 */
DA.DACR.BYTE = 0x40 ; /* Enable DA0 */
PC.CR.WORD = 0x5555 ; /* Port C = output */
}
void initTmu0(void){
TMU0.TCR.WORD = 0x0020 ; /* 1/4 Pclock,Enable interrupt */
TMU0.TCNT = TMU0.TCOR = 170 ; /* 44kHz */
INTC.IPRA.WORD = 0xf000 ; /* Priority = 15 */
TMU.TSTR.BIT.STR0 = 1 ; /* Start TMU0 */
}
void tuni0(void){
TMU0.TCR.BIT.UNF = 0 ; /* Clear UNF bit */
DA.DADR0 = (fir(AD.DRBH<<7)+ 0x8000)>>7 ;
}
void initXYRAM(void){
unsigned short *p , *q;
for(p=&hn[0],q=&hn_rom[0] ; p < &hn[51] ; p++,q++) *p = *q ;
}
|
9-6-2
.cpu shdsp
.export _setDSP,_fir,_hn,_hn_rom,_xn,_inpa
.import _inp
;void setDSP(void)
; Set DSP bit on SR (only SH3-DSP )
; Set S bit on SR (lock overflow)
_setDSP:
repeat lp_start,lp_start,#48 ;set repeat counter & address
mov.w set_dsp,r1 ;get DSP=1 , DMY=1 , S=1 data
stc sr,r2 ;get SR
or r2,r1 ;modify SR
mov.l modu,r3 ;get mod address
ldc r1,sr ;set SR
rts ;
ldc r3,mod ;set MOD
.align 4
modu: .data.w LWORD _xn_end - 2 ;
.data.w LWORD _xn ;
set_dsp: .data.w h'1802 ;
; unsigned short fir( unsigned short in )
_fir:
mov.l inpa,r5 ;get Xn data set address
mov.l @r5,r6 ;
mov.w r4,@r6 ;set input data to Xn
mov.l _hna,r4 ;get Hn address
;multiply and calculate
pclr a0 movx @r4+,x0 movy @r6+,y0
pmuls x0,y0,m0 movx @r4+,x0 movy @r6+,y0
lp_start:
padd a0,m0,a0 pmuls x0,y0,m0 movx @r4+,x0 movy @r6+,y0
padd a0,m0,a0 pmuls x0,y0,m0 movx @r4+,x0 movy @r6,y0
padd a0,m0,a0 pmuls x0,y0,m0
padd a0,m0,a0
sts a0,r0 ;transfer Yn -> R0
mov r6,@r5 ;set new Xn address
rts
shlr16 r0 ;return unsigned short data
.align 4
_hna: .data.l _hn
_hna_end: .data.l _hn_end
_hna_rom: .data.l _hn_rom
inpa: .data.l _inpa
.section B,data,align=4
_inpa: .res.l 1
.section IN,data,locate=h'a5017000
_xn: .res.w 51
_xn_end: .equ $
|