📄 sendfuncs.asm
字号:
;Function:
.def WalshModem,PNModem,PhaseMap,WaveForm,CarrierModem
.ref Walsh_array,PN_array,Tcl_Pre,Ascend_coe
.ref SinW_array,CosW_array,Cos_array,Sin_array
.ref temp,Inte_data,Walshed,Cos_part,Sin_part,Psk_I
.text
******************************
*Walsh_modem:according to the 4 bit data,select walsh array
*walsh调制:根据4位信息位所对应的walsh序列,进行映射,数据分组长度变为原来的16倍
*数据保存在Walshed中
******************************
WalshModem:
amov #Inte_data,xar0 ;
amov #Walshed,xar1 ;xar0 point to Walshed
rpt #(832-1)
mov #0,*ar1+
mov #Walshed,ar1
amov #Walsh_array,xar3
mov #(13-1),brc0
rptb walsh-1
mov #Walsh_array,ar3
mpymk *ar0+,#8,ac0 ;Inte_data(i*4-3)*8->ac0
macmk *ar0+,#4,ac0,ac0 ;Inte_data(i*4-2)*4+ac0->ac0
macmk *ar0+,#2,ac0,ac0 ;Inte_data(i*4-1)*2+ac0->ac0
add *ar0+,ac0 ;Inte_data(i*4)+ac0->ac0
sfts ac0,#6
add ac0,ar3
nop
nop
rpt #(64-1)
mov *ar3+,*ar1+
walsh:
nop
ret
*****************************
*PN序列和walsh调制以后的序列模8加
*相加以后的值放在Walshed序列中
*****************************
PNModem:
amov #Walshed,xar1
amov #temp,xar2
mov #8,*ar2
mov #(3-1),brc0 ;PN序列重复三次
mov #(256-1),brc1 ;PN序列长256
rptb PNloop1-1
amov #PN_array,xar0
rptb PNloop2-1
mov *ar0+,ac0
add *ar1,ac0
mov ac0,ac1
sub #8,ac1
bcc aa,ac1<0
mov ac1,*ar1+
b bb
aa:
mov ac0,*ar1+
bb:
nop
nop
PNloop2:
PNloop1:
amov #PN_array,xar0 ;还有64个数据与PN序列的前两段再模加
mov #(64-1),brc0
rptb PNloop3-1
mov *ar0+,ac0
add *ar1,ac0
rpt #(16-1)
subc *ar2,ac0,ac0
mov hi(ac0),*ar1+
PNloop3:
nop
ret
*********************************
*Phase_map:相位映射
*形成Cos_part部分量和Sin_part部分量
*********************************
PhaseMap:
amov #Cos_part,xar1 ;这里Cos_part多定义了44个字的数据空间
rpt #(5*16+44-1) ;(在其前后各加22个0)是为了后面的波形成型时候比较方便
mov #0,*ar1+
mov #Cos_part+24,ar1 ;Cos_part从第23个地址处开始存相位映射后的数据
amov #Sin_part,xar2 ;Sin_part同Cos_part
rpt #(5*16+44-1)
mov #0,*ar2+
mov #Sin_part+24,ar2
amov #Cos_array,xar3
amov #Sin_array,xar4
;每隔5个点写入一个数据,即相当于给每个相位映射
;以后的值两边内插了两个0值
mov #(16-1),brc0 ;对640位报头进行相位映射
rptblocal Phaseloop1-1 ;从前导640中每次取16数进行映射做为一次循环
mov *ar7+,t1
mov *ar3(t1),ac0
mov ac0,*ar1
mov *ar4(t1),ac1
mov ac1,*ar2
add #5,ar1
add #5,ar2
Phaseloop1:
ret
*********************************
*Wave_form:波形成型
*波形成型滤波器,消除码间干扰
*相位映射以后的序列与波形成型滤波器的系数相卷积
*********************************
WaveForm:
bset cdplc ;设置cdp循环寻址 ;ST2_55
amov #Ascend_coe,xcdp ;xcdp指向波形成型滤波器的系数表
mov #Ascend_coe,bsac ;循环寻址的首地址
mov #45,bkc ;循环寻址的长度
mov #0,cdp ;存储器的初始偏移值
;I路信号的波形成型
amov #Cos_part+44,xar0
amov #Cos_part+44,xar1
amov #Psk_I,xar3
mov #(80-1),brc0
rptblocal AscendloopI-1
mov #0,ac0
mov ar0,ar1
add #1,ar0
rpt #(45-1)
macm *ar1-,*cdp+,ac0
mov hi(ac0),*ar3+ ;高位得到的是卷积的结果???
AscendloopI:
;Q路信号的波形成型
amov #Sin_part+44,xar0
amov #Sin_part+44,xar1
amov #Cos_part,xar4
mov #(80-1),brc0
rptblocal AscendloopQ-1
mov #0,ac0
mov ar0,ar1
add #1,ar0
rpt #(45-1)
macm *ar1-,*cdp+,ac0
mov hi(ac0),*ar4+
AscendloopQ:
nop
ret
****************************
*副载波的调制
*
****************************
CarrierModem:
amov #Psk_I,xar0 ;I 路信号 80个
amov #Cos_part,xar1 ;Q 路信号 80个
bset cdplc ;设置cdp循环寻址
;I路乘载波
amov #CosW_array,xcdp ;主数据页
mov #CosW_array,bsac ;循环寻址的首地址
mov #20,bkc ;循环寻址的长度
mov #0,cdp ;存储器的初始偏移值
mov #(80-1),brc0
rptblocal zaiboIloop1-1
mpym *ar0,*cdp+,ac0
mov hi(ac0),*ar0+
zaiboIloop1:
;Q路乘载波
bset cdplc
amov #SinW_array,xcdp ;
mov #SinW_array,bsac ;循环寻址的首地址
mov #20,bkc ;循环寻址的长度
mov #0,cdp ;存储器的初始偏移值
mov #(80-1),brc0
rptblocal zaiboQloop1-1
mpym *ar1,*cdp+,ac0
mov hi(ac0),*ar1+
nop
zaiboQloop1:
;I路信号和Q路信号相加,得到调制后的信号
;存放于Psk_I中
amov #Psk_I,xar0
amov #Cos_part,xar1
amov #Psk_I,xar3
mov #(80-1),brc0
rptblocal addloop1-1
mov *ar0+,ac0
add *ar1+,ac0
mov ac0,*ar3+
addloop1:
nop
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -