;---------------------------------------------------------------;
;输入参数: ;
;ar0 -->指向输入缓冲起始地址的指针,也就是待交织的数据的首地址 ;
;ar1 -->指向交织表起始地址的指针 ;
;ar2 -->指向输出缓冲起始地址的指针,也就是交织完的数据的地址 ;
;ar3 -->待交织数据的长度,以比特表示 ;
;----------------------------------------------------------------
;uninter_word -->待交织的数据的长度,以字表示 ;
;inter_bit -->交织数据的比特位置 ;
;loc_bit -->待交织数据的比特位置 ;
;loc_word -->待交织数据的字的位置 ;
;---------------------------------------------------------------;
.def inter_R
inter_R: ldm ar3,a ;待交织数据的长度
sftl a,-4 ;长度/16 得到待交织数据所占的字数
stl a,uninter_word ;存储待交织数据的长度(字的个数)
stm #15,BRC ;循环的次数为 16
outstart: st #0000h,inter_bit ;字内比特起始位置为 0
inerstart: rptb i_inner-1 ;循环开始
ld *ar1,-4,a ;由交织表的数据得到此输出比特在待交织数据中的 WORD 位置
stl a,loc_word ;将此 WORD 位置保存起来
ld #15,b ;由交织表的数据得到此输出比特在待交织数据
and *ar1+,b ;中的 BIT 位置
stl b,loc_bit ;将此 BIT 位置保存起来
ld #1,a
rsbx c ;清 C
rpt loc_bit
rol a ;将 1<<loc_bit+1
ror a
stlm a,ar4 ;保存 A 中的数据
ldm ar0,b ;保存 AR0 中的数据
ldm ar0,a ;在输入缓冲区中寻找要交织的 BIT 的字的位置
add loc_word,a ;ar0+loc_word
stlm a,ar0
ldm ar4,a
and *ar0,a ;a 中的第 loc_bit 个比特就是需要交织到此比特位置的数据
stlm b,ar0
rsbx c
rpt loc_bit
ror a ;数据右移到 A 的最低位中
rol a
rsbx c
rpt inter_bit
rol a ;A<<inter_bit,inter_bit 是输出缓冲当前字中
ror a ;要处理的比特位置
ssbx c ;置 C
ld #0ffffh,16,b
or #0fffeh,b
rpt inter_bit
rol b
ror b
and *ar2,b ;清除输出缓冲此比特位置原有的数据
or a,b ;将 A 中的数据通过“或”操作写入输出 B 中
stl b,*ar2 ;将 B 中的数据写入输出缓冲区中
addm #0001h,inter_bit ;输出缓冲中待操作的比特位置加 1
nop
i_inner mar *ar2+ ;输出缓冲中待操作的字位置加 1
ld uninter_word,a
sub #1,a ;待交织数据的字的长度减 1
stl a,uninter_word
and #0ffffh,a ;判断整字的待交织数据是否交织完
bc outstart,aneq ;没有交织完则继续交织,否则去判断剩下的数据够不够一个字
ldm ar3,a ;如果待交织数据长度除以 16 所得余不为 0
and #15,a ;的话,还要继续处理最后一个字的数据
bc endprog,aeq
sub #1,a
stlm a,brc
stm #0000h,ar3
B inerstart
endprog: ret
不知道图片能否上传,再把错误陈列下:
"c:\ti\c5500\cgtools\bin\cl55" -g -q -fr"C:/ti/tutorial/jiaozhi2/Debug" -d"_DEBUG" -@"Debug.lkf" "jiaozhi.asm"
"jiaozhi.asm", ERROR! at line 13: [E9999] Syntax Error
.def inter_R
^
"jiaozhi.asm", ERROR! at line 13: [E9999] Invalid mnemonic specified
.def inter_R
^
"jiaozhi.asm", REMARK at line 55: [R5571] This instruction may corrupt the
carry bit if the M40 bit is set
(see the C55x silicon exceptions
errata; Advisory CPU_41)
addm #0001h,inter_bit ;输出缓冲中待操作的比特位置加 1
"jiaozhi.asm", REMARK at line 57: [R5573] Any BKxx and BSAxx updates are not
pipline protected against MAR
operations within 5 cycles (see
line 55) (see the C55x silicon
exceptions errata; Advisory CPU_43)
i_inner mar *ar2+ ;输出缓冲中待操作的字位置加 1
"jiaozhi.asm", ERROR! at EOF: [E0300] The following symbols are undefined:
3 Assembly Errors, No Assembly Warnings
uninter_word
loc_word
loc_bit
inter_bit
Errors in Source - Assembler Aborted
Compile Complete,
4 Errors, 0 Warnings, 2 Remarks.