⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmain.asm

📁 5509的代码程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;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 + -