安徽工业大学IS95移动通信系统正向业务信道的设计与开发程序更改加质疑问题剖析.docx
《安徽工业大学IS95移动通信系统正向业务信道的设计与开发程序更改加质疑问题剖析.docx》由会员分享,可在线阅读,更多相关《安徽工业大学IS95移动通信系统正向业务信道的设计与开发程序更改加质疑问题剖析.docx(50页珍藏版)》请在冰点文库上搜索。
安徽工业大学IS95移动通信系统正向业务信道的设计与开发程序更改加质疑问题剖析
程序均已经改正,本文档包括三个文件(.ASMwalsh.INC.cmd)及质疑问题总结:
IS95.ASM
*******************************************************************************
***定时20ms循环处理话音数据包
*******************************************************************************
***伪指令不占空间不影响执行速度,只是定义和描述但对汇编链接有重要指示作用
*******************************************************************************
.title"IS95前向信道设计";程序名
.global_c_int00;全局起始标号
.mmregs;把所有存储器映像寄存器定义为全局型
.copy"walsh.inc";编译时从"walsh.inc"文件中复制walsh表
STACK.usect"stack",10H;自定义未初始化堆栈的设置(调用子程序,中断时将当前执行位置自动压栈)
.bsspn1,2048;.bss.text.date三个称为标准段,此处未初始化大小2048个字
.bsspn2,2048;2^15/16
.bssw,1536
.bsswa,1536
.bssiq,32;依次存储4组8个样点波形
;SIN0+COS0;SIN0+COS180;SIN180+COS0;SIN180+COS180
.bssp,4;P用于42级缓存三个,用于Wlash地址是4个
.bssq,4;P用于42级掩码三个,用于Wlash地址是4个
.bssv,1;用于记录pn码循环的位置0-2047
.bssk,1;k为偏置系数
.bssx,1
.bssy,1
.bssz,1
.data
cos:
.word07fffH,05a82H,00000H,0a57fH,08002H,0a57fH,00000H,05A82H
sin:
.word00000H,05A82H,07fffH,05a82H,00000H,0a57fH,08002H,0a57fH
PA0.set0
PA1.set1;速率标志1,2,4,8
PA2.set2
PA3.set3
PA4.set4
PA5.set5
PA6.set6
PA7.set7
PA8.set8
PA9.set9;输出调制波形
.sect".vectors";中断向量表(自定义已初始化段)
rst:
B_c_int00;(0号复位中断)无条件转移2个字
NOP
NOP;两个NOP占2个字,加在一起0号中断共四个字
.space15*4*16;预留1-15号中断地址空间,每个占四个字
int0:
Bclock;16号GPS外部中断
NOP
NOP
.space2*4*16;预留17.18号中断地址空间,每个占四个字
tint:
Btimeout;19号定时中断向量(20ms(ttt3))
NOP
NOP
.space12*4*16
.text;主程序
_c_int00
STM#STACK+10,SP;置堆栈指针
*************************************************************************************************************
*初始化,产生四种SIN与COS相加的波形
*cos+sin;cos-sin;sin-cos;-cos-sin
*************************************************************************************************************
SSBXSXM;=1符号扩展
STM#w,AR2;wwa两个中间变量
STM#wa,AR3
LD#cos,A
STM#7,BRC
RPTBddd-1
READA*AR2+
ADD#1,A;w中存8个cos样点
ddd:
LD#sin,A
STM#7,BRC
RPTBddd1-1
READA*AR3+
ADD#1,A;wa中存8个sin样点
ddd1:
STM#iq,AR4
STM#w,AR2
STM#wa,AR3
STM#7,BRC
RPTBttt-1
LD*AR2+,A
ADD*AR3+,A
STLA,*AR4+;*(iq)=cos0+sin0
ttt:
STM#w,AR2
STM#wa,AR3
STM#7,BRC
RPTBttt1-1
LD*AR2+,A
SUB*AR3+,A
STLA,*AR4+;*(iq+8)=cos0+sin180
ttt1:
STM#w,AR2
STM#wa,AR3
STM#7,BRC
RPTBttt2-1
LD*AR3+,A
SUB*AR2+,A
STLA,*AR4+;*(iq+16)=cos180+sin0
ttt2:
STM#w,AR2
STM#wa,AR3
STM#7,BRC
RPTBttt3-1
LD*AR2+,A
NEGA;对A取算术反
SUB*AR3+,A
STLA,*AR4+;*(iq+24)=cos180+sin180
**********************************************************************************************************
**初始化PN1和PN2,准正交15级M序列
**先产生好引导序列,最后15个零,初始状态14个零一个一
**序列周期2^15-1=32768-1=32767,
**每两秒75个PN序列周期,1.2288M*2S=75*3276832768bit/16bit=2048字
**I(x)=x15+x13+x9+x8+x7+x5+1
**Q(x)=x15+x12+x11+x10+x6+x5+x4+x3+1
**********************************************************************************************************
chushipn1:
STM#32766,BRC;PN1
LD#0x0001,A;移存器初态,初始状态14个零1个一,1为X位
STM#15,AR4;15-0循环计数器(记录数组是不是已经满了),一个字16位
STM#pn1,AR3;放置序列地址
ST#0x0001,*AR3;先输出1
RPTBPP1-1
LD#0,B;B为M序列反馈位
XORA,-4,B;X5与B异或
XORA,-6,B;X7与B异或
XORA,-7,B;X8与B异或
XORA,-8,B;X9与B异或
XORA,-12,B;X13与B异或
XORA,-14,B;X15与B异或
AND#0x0001,B
SFTLA,1;左移一位(A左为X15,右为X)
ORB,A;反馈位或到最低位
BANZPPP1,*AR4-;未积满一个字后转移到PPP1
STLB,*+AR3;装满了,先更新输出地址在把B输出去
STM#15,AR4
BPPP2
PPP1:
ADD*AR3,1,B;AR3左移一位加上B
STLB,*AR3;送回AR3
PPP2:
NOP
PP1:
LD*AR3,A
AND#0XFFFE,A;提前输出的1强制变为0
STLA,*AR3
chushipn2:
STM#32766,BRC;PN2
LD#0x0001,A;初始状态14个零一个一
STM#15,AR4;计数器,一个字16位
STM#pn2,AR3;放置序列地址
ST#0x0001,*AR3;先输出1
RPTBPP2-1
LD#0,B;B为M序列反馈位
XORA,-2,B;x3与B异或
XORA,-3,B
XORA,-4,B
XORA,-5,B
XORA,-9,B
XORA,-10,B
XORA,-11,B
XORA,-14,B
AND#0x0001,B
SFTLA,1;左移一位
ORB,A;反馈位或到最低位
BANZPPP3,*AR4-;未积满一个字后转移
STLB,*+AR3;更新输出地址
STM#15,AR4
BPPP4
PPP3:
ADD*AR3,1,B
STLB,*AR3
PPP4:
NOP
PP2:
LD*AR3,A;提前输出的1强制变为0
AND#0XFFFE,A
STLA,*AR3
*************************************************************
*定时器初始化
*************************************************************
ttt3:
SSBXINTM;=1,关闭所有可屏蔽中断
RSBXSXM;=0禁止符号位扩展
ST#0,*(x);初始化x=0,x为十次定时记数(绝对寻址)(A,@x是直接寻址)
STM#0,SWWSR;插入0等待周期
STM#0xffa8,PMST;改变中断向量映射到0xff80,IPTR取PMST的高九位
STM#9007h,CLKMD;PLLMUL=9(锁相环倍频系数),CLKIN=10M(外部晶振),CLKOUT=CLKINX(PLLMUL+1)=100M
STM#19999,PRD;该为PRD=20000-1;TDDR=10-1主频100M则定时2ms
STM#0039h,TCR
***********************************************************
suspSTM#y,AR4;添加帧质量指示
PORTRPA1,*AR4;速率标志1,2,4,8
BIT*AR4,15-0;速率1(位测试)
BCbbb1,NTC;TC=0跳转到bbb1
CALLcrc12
LD#183,A;184比特信息卷积(里面8尾比特进行卷积)
CALLjuanji
STM#wa,AR5;码元重复1次,wa输出
STM#w,AR3;w输入
RPT#383
MVDD*AR3+,*AR5+
CALLjiaozhi
CALLraoluan
CALLkuopin
CALLpianzhi1
CALLpianzhi2
CALLqpsk
Bbbb;可以把速率一样的合并到公共端
bbb1:
BIT*AR4,15-1;速率2
BCbbb2,NTC
CALLcrc8
LD#87,A
CALLjuanji
STM#wa,AR5;码元重复2次,wa输出w输入
STM#w,AR3
STM#191,BRC
RPTBccb1-1
MVDD*AR3,*AR5+
MVDD*AR3+,*AR5+
ccb1CALLjiaozhi
CALLraoluan
CALLkuopin
CALLpianzhi1
CALLpianzhi2
CALLqpsk
Bbbb
bbb2:
BIT*AR4,15-2;速率4
BCbbb3,NTC
STM#w,AR3
STM#wa,AR4
RPT#39
MVDD*AR3+,*AR4+
LD#39,A
CALLjuanji
STM#wa,AR5;码元重复4次,wa输出w输入
STM#w,AR3
STM#95,BRC
RPTBccb2-1
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3+,*AR5+
ccb2CALLjiaozhi
CALLraoluan
CALLkuopin
CALLpianzhi1
CALLpianzhi2
CALLqpsk
Bbbb
bbb3STM#w,AR3;速率8
STM#wa,AR4
RPT#15
MVDD*AR3+,*AR4+
LD#15,A
CALLjuanji
STM#wa,AR5;码元重复8次,wa输出w输入
STM#w,AR3
STM#47,BRC
RPTBccc-1
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3,*AR5+
MVDD*AR3+,*AR5+
cccCALLjiaozhi
CALLraoluan
CALLkuopin
CALLpianzhi1
CALLpianzhi2
CALLqpsk
nop
bbbnop
*********************************************************************
susp1LD*(x),A
SUB#10,A
BCsusp,AEQ;判断是否到20ms,取第二个数据包处理
Bsusp1
*********************************************************************
timeoutADDM#1,*(x);(绝对寻址)定时中断子程序1加到十即20ms
LD#10,A
SUB*(x),A
BCsecout,ALEQ
Bexit
secoutST#0,*(x)
exitNOP
RETE
*********************************************************************
*外部GPS时钟2秒钟复位一次
*根据偏置系数K确定引导序列的起始位置v
*********************************************************************
clock:
PORTRPA0,*(k);读偏置系数
LD*(k),2,A
AND#0x7fc,A
STLA,*(v)
STM#0FFFFh,IFR;所有中断标志置1
STM#0008h,IMR;TINT0=1定时中断开放
RSBXINTM;=0,开放所有可屏蔽中断
LDMTCR,A
AND#0FFEFH,A
STLMA,TCR;TSS=0,定时器启动工作
RETE
********************************************************************
*CRC效验子程序
*12位帧质量指示码产生器
*w存储172位要效验的信息
*wa存储184位输出信息
*f(x)=x12+x11+x10+x9+x8+x4+x+1
*********************************************************************
crc12STM#w,AR3;间接寻址将输入数据数组w首地址给辅助寄存器AR3
STM#wa,AR4;间接寻址将输出数据数组wa首地址给辅助寄存器AR4
LD#0XFFF,B;B为12位移存器并初始化全1,左X12,右X
STM#171,BRC;计算172位CRC效验
RPTBnext-1
SFTLB,-11,A;取最高延迟位。
B累加器内的数据并未发生变化,A里面为X12
MVDD*AR3,*AR4+;数据由输入到输出,输入地址不变(下面要产生反馈位),输出地址加1【*ARX是间接寻址】
XOR*AR3+,A;最高延迟位与输入模2加产生反馈位存A
AND#0X0001,A
SFTLB,1;移存器移位(X11位进入X12位)
AND#0X0FFE,B;使B低12位的前11位保持不变,最后一位清0,也就是原理图中移位寄存器最左位清0
XORA,11,B;产生移存器的X12
XORA,10,B;产生移存器的X11
XORA,9,B;产生移存器的X10
XORA,8,B;产生移存器的X9
XORA,7,B;产生移存器的X8
XORA,3,B;产生移存器的X4
XORA,B;产生移存器的X(将反馈位写入X)
next:
NOP;将存在移存器中的校验12位码传递到信息位的最后12个字(NOP:
延时几个周期,避免流水线冲突)
SFTLB,-11,A;将移存器中的X12输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-10,A;将移存器中的X11输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-9,A;将移存器中的X10输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-8,A;将移存器中的X9输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-7,A;将移存器中的X8输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-6,A;将移存器中的X7输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-5,A;将移存器中的X6输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-4,A;将移存器中的X5输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-3,A;将移存器中的X4输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-2,A;将移存器中的X3输出
AND#0X0001,A
STLA,*AR4+
SFTLB,-1,A;将移存器中的X2输出
AND#0X0001,A
STLA,*AR4+
AND#0X0001,B;将移存器中的X输出
STLB,*AR4
RET
***********************************************************************************
*crc效验:
F(X)=X8+X7+X4+X3+X+1
*8位帧质量指示码产生器
*w存储80位要效验的信息
*wa存储88位输出信息
***********************************************************************************
crc8STM#w,AR3;输入数据首地址给AR3
STM#wa,AR4;输出数据首地址给AR4
LD#0XFF,B;B为8位移存器初始化全1,右为刚入,左为最早入
STM#79,BRC;计算80位CRC效验
RPTBnex-1
SFTLB,-7,A;取最高延迟位
MVDD*AR3,*AR4+;数据由w->wa
XOR*AR3+,A;最高延迟位与输入模2加产生反馈输入
AND#0X0001,A
SFTLB,1;移存器移位
AND#0X0FE,B
XORA,7,B;产生移存器的X8
XORA,6,B;产生移存器的X7