📄 sendmain.asm
字号:
;Function:SendMain is the sending function of BW0
.mmregs
.include RegisterMap.h
.ref Encode,Interleave
.ref WalshModem,PNModem,PhaseMap,WaveForm,CarrierModem
.def temp,Walshed,Cos_part,Sin_part,Psk_I
.def Bw0_data,Gray,Encoded_data
.def Walsh_array,PN_array,Tcl_Pre,Ascend_coe
.def SinW_array,CosW_array,Cos_array,Sin_array
temp .usect "vars",10 ; 10个字
Encoded_data .usect "vars",52 ; 52个字
Send_data .usect "vars",52
Walshed .usect "vars",832
Cos_part .usect "vars",5*16+45
Sin_part .usect "vars",5*16+45
Psk_I .usect "vars",5*16
sp_stack .usect "stack",100
ssp_stack .usect "stack",100
Assemb_data .usect "ddd",7360
.data
Assemb_count .word 0
HeaderSend .word 0
DataSend .word 0
Gray .word 0,1,2,3,4,-3,-2,-1 ;Gray array
Bw0_data .word 1,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 1,0,0,1, 0,1,1,0, 1,0 ;the data will be sended in Bw0
InitAD_DA .word 0x0001,0x0200,0x0001,0x0404,0x0001,0x0640,0x0001,0x0800
;TestData .word 1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,0,0,0
.text
.def MainStart
MainStart:
;设定状态寄存器
mov #0x3800,0x0002 ;set ST0_55:Tc1=Tc2=1,CARRY=1 ;Tc1、Tc2为测试控制标志,用于存放某些测试指令的测试结果; carry 为进位/借位标志,与M40有关
mov #0x6900,0x0003 ;set ST1_55:XF=1,INTM=1,SXDM=1,C54Cm=0,CPL=1 (SP寻址)
mov #0x8000,0x0004 ;set ST2_55:ARMS=1 (控制模式)
bclr xf
;设定DSP时钟,144MHz
mov #0x6493,port(#CLKMD) ;时钟模式寄存器。在复位时和复位后,由它决定主时钟是否二分频
;初始化多串口
mov #0x4020,port(#SPCR1_1) ;McBSP1 串口控制寄存器1 。
;0100000000100000B
;0--------------- DBL 数字回环模式
;-10------------- RJUST 接收数据对齐调整方式
;---00----------- CLKSTP 时钟停止模式选择
;-----000-------- Reserved 保留
;--------0------- DXENA DX管脚上的额外延迟开关
;---------0------ ABIS A-bis模式选择
;----------10---- RINTM 接收中断RINT的触发方式
;------------0--- RSYNCERR 接收帧同步错误标志
;-------------0-- RFULL 接收过速错误标志
;--------------0- RRDY 接收就绪标志
;---------------0 RRST 接收器复位,低有效
mov #0x0220,port(#SPCR2_1) ;McBSP1 串口控制寄存器2
;0000001000100000B
;000000---------- Reserved 保留
;------10-------- FREE/SOFT 在仿真调试中遇到高级语言调试器里的断点时,McBSP的行为控制
;--------0------- FRST 帧同步逻辑复位,低有效
;---------0------ GRST 采样速率发生器复位,低有效
;----------10---- XINTM 发送中断XINT的触发方式
;------------0--- XSYNCERR 发送帧同步错误标志
;-------------0-- XEMPTY 发送寄存器空标志
;--------------0- XRDY 发送就绪标志
;---------------0 XRST 发送器复位
mov #0x0040,port(#RCR1_1) ;McBSP1 接收控制寄存器1 。
mov #0x0041,port(#RCR2_1) ;McBSP1 接收控制寄存器2 。
mov #0x0040,port(#XCR1_1) ;McBSP1 发送控制寄存器1 。
mov #0x0041,port(#XCR2_1) ;McBSP1 发送控制寄存器2 。
mov #0x0080,port(#SRGR1_1) ;McBSP1 采样速率发生寄存器1 。
mov #0x8080,port(#SRGR2_1) ;McBSP1 采样速率发生寄存器2 。
mov #0x0001,port(#MCR1_1) ;McBSP1 多同道寄存器1 。
mov #0x0001,port(#MCR2_1) ;McBSP1 多同道寄存器2 。
mov #0x0080,port(#PCR_1) ;McBSP1 管脚控制寄存器 。
mov #0x0001,port(#RCERA_1) ;McBSP1 接收同道使能寄存器A 。
mov #0x0001,port(#XCERA_1) ;McBSP1 发送同道使能寄存器A 。
amov #(sp_stack+100),xsp
mov #(ssp_stack+100),ssp
mov #0x02e3,port(#SPCR2_1) ;以上三个功能同时启动
mov #0x4207,port(#SPCR1_1) ;RRST=1,启动接收器
amov #InitAD_DA,xar0
bset xf ;ST1_55: XF:外部标志 用于驱动外部管脚XF的输出电平;
mov #(8-1),brc0
;初始化AD/DA
rptb DASetEnd-1
L1: mov port(#SPCR2_1),t0 ;SPCR2_1 串口控制寄存器, XRDY为发送就绪标志位
and #0x0002,t0
bcc L1,t0==#0
mov *ar0+,t1
mov t1,port(#DXR1_1) ;McBSP1 数据发送寄存器1 。
DASetEnd:
***************************
*(r=1/2,k=7)的卷积编码
*编码以后的数据存在Encoded_data中
***************************
call Encode ;call Encode funcion
***************************
*交织:交织后的数据存在Inte_data中
***************************
call Interleave ;call Interleave function
******************************
*Walsh_modem:according to the 4 bit data,select walsh array
*walsh调制:根据4位信息位所对应的walsh序列,进行映射,数据分组长度变为原来的16倍
*数据保存在Walshed中
******************************
call WalshModem
*****************************
*PN序列和walsh调制以后的序列模8加
*相加以后的值放在Walshed序列中
*****************************
call PNModem
*********************************
*Phase_map:相位映射
*形成Cos_part部分量和Sin_part部分量
*********************************
;call PhaseMap
*********************************
*Wave_form:波形成型
*波形成型滤波器,消除码间干扰
*相位映射以后的序列与波形成型滤波器的系数相卷积
*********************************
;call WaveForm
****************************
*副载波的调制
*
****************************
;call CarrierModem
**************************
*将Out8psk中存放的调制后的信号送到多串口
*至此发送端的程序完成
*下面是接收程序
**************************
;****************************
;初始化Assemb_data
amov #Assemb_data,xar0
rpt #(7360-1)
mov #0,*ar0+
;****************************
mov #0x00c0,port(#IODIR) ;通用输入输出GPIO 方向控制寄存器
mov #0x00c0,port(#IODATA) ; ........管脚电平寄存器
mov #1000,*(#SendTimes)
BeginSend:
amov #Tcl_Pre,xar7 ;xar0指向报头序列
mov #40,t0
mov t0,*(#HeaderSend)
mov #0,*(#Assemb_count)
BeginSendHeader:
call PhaseMap
call WaveForm
call CarrierModem
*************************
*///将数据保存在Assemb_data中
; amov #Assemb_data,xar1
; mov *(#Assemb_count),t0
; amov #Psk_I,xar0
; mov #(80-1),brc0
; rptb save_data_end-1
; mov *ar0+,*ar1(t0)
; add #1,t0
; nop
;save_data_end
; mov t0,*(#Assemb_count)
*************************
call McBspSendData
mov *(#HeaderSend),t0 ;HeaderSend 在这里为计数器,初始值为40,每次发送16个数据,共发送40次
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -