; ;****************************************************************************** ; ; file:speech.asm ; ; This program tests the 256K x 16 Extended Memory Board ; for the Motorola DSP56000 ADS ; ; Chuck Pateros ; January 9, 1991 page 132,,1,1 org x:0 divide dc 2 ; divide-by ratio for decimating speech mask dc $ffff00 ; mask for limiting D/A resolution nrept dc 16384 ; number of repeats for 32,768 data point readin rambas dc 32768 ; base address of extended RAM ; Program start address org p:$100 ; ; Set up ADS board in case of force break instead of force reset ; movep #$1100,x:<<$FFFFFE ;set bcr for 1 external X,Y wait movec #0,sp ;init stack pointer movec #0,sr ;clear loop flag ; Set up the SSI for operation with the DSP56ADC16EVB ; The following code sets port C to function as SCI/SSI move #$0,a0 ;zero PCC to cycle it movep a0,x:<<$FFE1 move #$0001ff,a0 movep a0,x:<<$FFE1 ;write PCC ; The following code sets the SSI CRA and CRB control registers for external ; continuous clock, synchronous, normal mode. move #$004000,a0 ;CRA pattern for word length=16 bits movep a0,x:<<$FFEC move #$003200,a0 ;CRB pattern for continous ck,sych,normal mode movep a0,x:<<$FFED ;word long frame sync: FSL=0;ext ck/fs ; ; Set up port B to be used as address extension bits (low order 3 bits) ; move #$0,a0 ; parallel i/0 movep a0,x:<<$ffe0 move #$007fff,a0 ; set all bits to outputs movep a0,x:<<$ffe2 move #$0,a0 ; set to zero output movep a0,x:<<$ffe4 loop ; ; Write data into RAM ; move #$0,r1 ; set to zero RAM page do #8,cycle2 move x:rambas,r0 movep r1,x:<<$ffe4 ; write out RAM page and inc move (r1)+ ; ; do each block ; do x:nrept,cycle poll jclr #7,x:<<$FFEE,poll ; loop until RDF bit = 1 movep x:<<$FFEF,y0 ; get A/D converter data movep y0,x:<<$FFEF ; put A/D converter data move y0,y:(r0) poll2 jclr #7,x:<<$FFEE,poll2 ; loop until RDF bit = 1 movep x:<<$FFEF,x0 ; get A/D converter data movep x0,x:<<$FFEF ; put A/D converter data move x0,x:(r0)+ cycle nop nop cycle2 nop nop talk nop ; ; Read data back from RAM ; move #$0,r1 ; set to zero RAM page move x:>divide,r2 ; get divide by ratio do #8,cyc2 move x:>rambas,r0 ; point to base of RAM movep r1,x:<<$ffe4 ; update RAM page move (r1)+ ; increment RAM page ; ; read each block ; do x:nrept,cyc poll3 jclr #7,x:<<$FFEE,poll3 ; loop until RDF bit = 1 nop nop movep x:<<$FFEF,y0 ; get A/D converter data move (r2)- clr a move r2,y0 add y0,a jne nonew move x:>divide,r2 move x:mask,a1 move y:(r0),y1 and y1,a move a1,b1 nonew nop movep b1,x:<<$FFEF ; put A/D converter data poll4 jclr #7,x:<<$FFEE,poll4 ; loop until RDF bit = 1 movep x:<<$FFEF,y0 ; get A/D converter data move x:(r0)+,x1 move (r2)- clr a move r2,y0 add y0,a jne nonew2 move x:>divide,r2 move x:mask,a1 and x1,a move a1,b1 nonew2 nop movep b1,x:<<$FFEF ; put A/D converter data cyc nop nop cyc2 nop nop jmp talk intrpt rti org p:$001c jsr intrpt end