📄 shft.asm
字号:
.title "TMS320C2xx PROCESSOR SELFCHECK -- SHIFTER TESTS"
.length 60
.width 120
.option X
************************************************************
* SHIFTER TESTS *
* *
* This routine checks the three shifters of the C2xx: *
* *
* 1. input data-scaling shifter *
* 2. output data-scaling shifter *
* 3. product-scaling shifter *
* *
* Written by: *
* *
* Release Version 1.0 *
* *
************************************************************
.def shft, end2xx
.nolist
.copy "options.h"
.copy "memmap.h"
.list
.text
shft .set $+SS
; preliminary setup
LDP #0h ; data page @ 0h
*
* INPUT DATA-SCALING SHIFTER TEST
*
SPLK #1h,TEMP00 ; data(TEMP00) = 1h
LACC TEMP00,0 ; ACC = 00000001h
ADD TEMP00,1 ; ACC = 00000003h
ADD TEMP00,2 ; ACC = 00000007h
ADD TEMP00,3 ; ACC = 0000000fh
ADD TEMP00,4 ; ACC = 0000001fh
ADD TEMP00,5 ; ACC = 0000003fh
ADD TEMP00,6 ; ACC = 0000007fh
ADD TEMP00,7 ; ACC = 000000ffh
ADD TEMP00,8 ; ACC = 000001ffh
ADD TEMP00,9 ; ACC = 000003ffh
ADD TEMP00,10 ; ACC = 000007ffh
ADD TEMP00,11 ; ACC = 00000fffh
ADD TEMP00,12 ; ACC = 00001fffh
ADD TEMP00,13 ; ACC = 00003fffh
ADD TEMP00,14 ; ACC = 00007fffh
ADD TEMP00,15 ; ACC = 0000ffffh
XOR #0ffffh ; ACC = 0
BCND ershft1,NEQ ; if ACC != 0 then error
*
* OUTPUT DATA-SCALING SHIFTER TEST
*
SETC SXM ; sign extension mode on
LACL #1h ; ACC = 00000001h
SACL TEMP01,0 ; data(TEMP01) = 0001h
LACC TEMP01 ; ACC = 00000001h
SACL TEMP01,1 ; data(TEMP01) = 0002h
LACC TEMP01 ; ACC = 00000002h
SACL TEMP01,2 ; data(TEMP01) = 0008h
LACC TEMP01 ; ACC = 00000008h
SACL TEMP01,3 ; data(TEMP01) = 0040h
LACC TEMP01 ; ACC = 00000040h
SACL TEMP01,4 ; data(TEMP01) = 0400h
LACC TEMP01 ; ACC = 00000400h
SACL TEMP01,5 ; data(TEMP01) = 8000h
LACC TEMP01 ; ACC = ffff8000h
SACH TEMP01,6 ; data(TEMP01) = ffe0h
LACC TEMP01,16 ; ACC = ffe00000h
SACH TEMP01,7 ; data(TEMP01) = f000h
LACL TEMP01 ; ACC = 0000f000h
XOR #0f000h ; ACC = 0
BCND ershft2,NEQ ; if ACC != 0 then error
*
* PRODUCT-SCALING SHIFTER TEST
*
SPLK #0aah,TEMP00 ; data(TEMP00)=aah
LT TEMP00 ; TREG = aa00h
MPY #100h ; PREG = ffffaa00h
LPH TEMP00 ; PREG = 00aaaa00h
SPM 0 ; set shift = 0
PAC ; ACC = 00aaaa00h
SPM 1 ; set shift = 1 left
APAC ; ACC = 01fffe00h
SPM 2 ; set shift = 4 left
APAC ; ACC = 0caa9e00h
SPM 3 ; set shift = 6 right
APAC ; ACC = 0cad48a8h
SPM 0 ; turn off shifter
XOR #48a8h ; ACC = 0cad0000h
XOR #0cadh,16 ; ACC = 0
BCND ershft3,NEQ ; if ACC != 0 then error
RET ; test passes
*
* ERROR HANDLERS
*
ershft1 .set $+SS
LACL #80h ; input data-scaling shifter error
RET ; test fails
;
ershft2 .set $+SS
LACL #81h ; output data-scaling shifter error
RET ; test fails
ershft3 .set $+SS
LACL #82h ; product-scaling shifter error
RET ; test fails
*
* Constants needed to perform the optional program code checksum test.
*
end2xx .set $+SS
CHKSUMHI .word 0ffach
CHKSUMLO .word 0a017h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -