;-----------------------------------------------------------; ; DSK_SPEC.ASM ; ; (C) 1992-93 ; ; Texas Instruments Inc. ; ; By: Keith Larson ; ; TMS320Cxx DSP Applications ; ; ; ; Performs a self-test in native code and transmits RS232 ; ; messages back to the host ; ;-----------------------------------------------------------; YES .set 1 NO .set 0 ;---------------------------------------------------------------- BCMD .set 0xFA10 ;JUMP CMD BXMIT .set 0xFA12 ;JUMP XMIT BXMIT16 .set 0xFA14 ;JUMP XMIT16 BRECV .set 0xFA06 ;JUMP RECV BRECV16 .set 0xFA08 ;JUMP RECV16 ;---------------------------------------------------------- TA .set 09h ;TA =RA = 6h 0000110000011000 RA .set 09h ; TAP .set 01h ;TAP=RAP= 1h 0000001000000101 RAP .set 01h ; TB .set 018h ;TB =RB =13h 0001101000110110 RB .set 018h ; CTRL .set 000h ;CONTROL= 0h 0000000000000011 ;----------------------------------------------------------- TADDR .set 0x67 ; CHAR .set 0x68 ; STAT0 .set 0x69 ; STAT1 .set 0x6a ; SCRATCH .set 0x6b ; ACCU_lo .set 0x6c ; CMEM .set 0x6e ; AD1 .set 0x70 ; AD2 .set 0x71 ; AD3 .set 0x72 ; ;---------------------------------------------------------------- .include "mmregs.asm" .ps 0xFA0A ; rewrite RINT and XINT b RINT ; XINT: ret ; ret ; ;---------------------------------------------------------------- .ps 0xfAD0 ; RINT sst1 STAT1 lst1 STAT1 eint ret ;---------------------------------------------------------------- AICLB .set 00001011b ; .entry ldpk 0 ; sendagn lrlk AR7,RS232OK ; call SendMSG ; rsxm ; conf 1 ; lark AR5,0x60 ;start of B1 (data) lark AR6,0x1f ;length of B1 call CHKMEM ; lrlk AR5,0x400 ;start of B1 (data) lrlk AR6,0x3FF ;length of B1 call CHKMEM ;start of B3 (data) is in AR5 ;------------------------------------------------------------------ AIC_RST lack 0x80 ; sach DXR ; clear the DXR sacl GREG ; lrlk AR0,0xffff ; Setup a read from global memory larp AR0 ; rptk 31 ; pulse /BR low for 32 cycles lt * ; resetting the AIC ;----------------------- lalk RA,2 ; setup xA vals adlk TA,9 ; call AIC2nd ; call LF ; ;----------------------- lalk RAP,2 ; setup xAP vals adlk TAP,9 ; addk 1 ; call AIC2nd ; lrlk AR7,AIC ; call SendMSG ; ;----------------------- lalk RB,2 ; setup xB vals adlk TB,9 ; addk 2 ; call AIC2nd ; call LF ; ;----------------------- lack AICLB ; Set up AIC control register call AIC2nd ; ;-------------------------------- ; Find loopback conversion slope ;-------------------------------- ssxm ; Endpoint lalk 0x7000 ; Loopback +0.875% call L_BACK ; sacl AD1 ; lac DXR ; Loopback -0.875% neg ; call L_BACK ; sacl AD2 ; zac ; Loopback +0.000% call L_BACK ; sacl AD3 ; ;------------------------ lac AD1 ; Check 3 point linearity add AD2 ; sfr ; sub AD3 ; sacl AD3 call XMITHEX ; call LF ; lrlk AR7,AIC ; call SendMSG ; lac AD3 abs ; subk 0x40 ; Max allowable error for 2^-10 linearity blz AICOK ; call BAD ; b sendagn ; AICOK call OK ; b sendagn ; ;-------------------------------- L_BACK sacl DXR ; call XMITHEX ; lac DRR ; call XMITHEX ; call LF ; ret ; ;=================================================================== AIC2nd ork 0xC000,2 ; ACC = 0x0003XXXX lark AR7,0x20 ; sar AR7,IMR ; XINT=on RINT=off sar AR7,DXR ; Clear DXR LSB's idle ; XINT flag may already be set sach DXR ; request AIC register XMIT idle ; sacl DXR ; send new register value idle ; sacl DXR,2 ; clear LSB's lack 0x10 ; sacl IMR ; XINT=off RINT=on ret ;------------------------------------------- ;CHKMEM ARx=start data address ARy=length ;------------------------------------------- CHKMEM lrlk AR7,MEM ; call SendMSG ;send message to host 'Checking mem @' call PRT_AR5 ; ;---------------------------------- CHKMEM2 larp AR5 ; lac * ;get DATA xork 0x5555 ;DATA ^ BITMASK1 sacl * ; xor * ; bnz BADMEM ;OK? lac * ; xork 0x5555 ;(DATA ^ BITMASK1)^BITMASK1 = DATA sacl * ;restore original DATA xork 0xAAAA ;DATA ^ BITMASK2 sacl * ; xor * ; bnz BADMEM ;OK? lac * ; xork 0xAAAA ;(DATA ^ BITMASK2)^BITMASK2 = DATA sacl *+ ;restore original DATA ;------------------------ MEMOK call WIDGET ; Special FX, toggle <,> characters ;------------------------ larp AR6 ; banz CHKMEM2,*- ;Check next location call PRT_AR5 ; call OK ; ret ; ;------------------------ BADMEM call PRT_AR5,*+ ; call BAD ; larp AR6 ; banz CHKMEM2,*- ;Check next location ret ; ;================================================================== ; RS232 MESSAGING ROUTINES ;================================================================== WIDGET lalk 0x083C ;< with bs sar AR5,TADDR ; bit TADDR,15 ;toggle slash for special effect! bbz FSLASH ; lalk 0x083E ;> with bs FSLASH call BXMIT16 ; ret ; ;-------------------------------- PRT_AR5 sar AR5,ACCU_lo ; lac ACCU_lo ; ; call XMITHEX ; ; ret ; ;-------------------------------- XMITHEX sacl ACCU_lo ; sacl SCRATCH ; lalk 0x7830 ; xmit '0x' via RS232 call BXMIT16 ; lark AR4,3 ; shift upper char to ACCU_hi XMITHX2 lac SCRATCH,4 ; sacl SCRATCH ; save lower 3 chars sach CHAR ; save upper 1 char lac CHAR ; load char andk 0xF ; Convert 0-9 and A-F to ASCII subk 10 ; blz LT_A ; addk 7 ; LT_A addk 0x3A ; 57 ; call BXMIT ; xmit the ASCII character larp AR4 ; banz XMITHX2,*- ; next char? lalk 0x2020 ; SP/SP call BXMIT16 ; lac ACCU_lo ; ret ; ;-------------------------------- BAD lrlk AR7,BAD_MSG ; call SendMSG ; call HENTER ; ret ; ;-------------------------------- OK lrlk AR7,OK_MSG ; call SendMSG ; ;-------------------------------- HENTER lrlk AR7,ENTER ; call SendMSG ; ret ; ;-------------------------------- LF sacl ACCU_lo ; lack 0xA ; call BXMIT ; lac ACCU_lo ; ret ; ;-------------------------------- SendMSG dint ; sar AR7,TADDR ; lac TADDR ; tblr CHAR ; swap bytes for xmit lac CHAR ; rptk 7 ; send MSB's sfr ; call s_char ; lac CHAR ; send LSB's call s_char ; larp AR7 ; b SendMSG,*+ ; ;------------------------ s_char andk 0xff ; if 0 terminate after sending subk 0xff ; if 0xff terminate NO send bz POP_RET ; addk 0xff ; bnz VCHAR ; popd TADDR ; If 0 pop TOS for smaller code size! VCHAR call BXMIT ; transmit char ret ; POP_RET pop ; ret ; ;---------------------------------------------------------------- ;RS232OK .string 0x1b,"[2JDSK-RS232 Loop",9,9," OK" ;---------------------------------------------------------------- RS232OK .string "\fDSK-RS232 Loop\t\t\tOK" ENTER .string "\t>enter<",0 AIC .string 0xA,"AIC Loopback :",-1 MEM .string 0xA,"C26 MEM Check:",-1 OK_MSG .string "\tOK",-1 BAD_MSG .string "\tBAD\a",-1 ;---------------------------------------------------------------- .end