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

📄 snd_modulator.asm

📁 GSM发送端普通突发GMSK调制部分的dsp程序
💻 ASM
字号:
      
      .ref exp_temp
      .ref data_address
	  .ref table_g	
	  .ref data_out
      .ref data_temp
 
      .mmregs
      .text
      .def 	snd_modulator

snd_modulator:
							
				AMOV   	#data_address,XAR0	
      			AMOV	#data_out,XAR2
      			
      		
      			
      			XOR		AC0
      			XOR		AC1
      			XOR		AC2
      			XOR		AC3
      			XOR		T0
      			XOR		T1
      			XOR		T2
      			XOR		T3
      			
      			MOV		#148,T0
      			MOV		#149,BRC0
      			MOV		#-1,T3
      			RPTB    cov150_over	
  				AMOV	#data_temp,XAR3   ;设置每次做乘法的3个a[n]
      			AMOV	#data_temp,XAR4
  				RPT		#2 				;将要进行累加的数据装如入data_temp
      			MOV		*AR3+,AC3
      			RPT		#1
      			MOV		*AR4+,AC3
      			RPT		#1
      			MOV		*AR4-,*AR3-
      			MOV		*AR4,*AR3
      			MOV		*AR0+,*AR4
      			BCC		add0_cov,T0>#0   ;最后两个字
      			MOV		#0000h,*AR4
add0_cov: 		SUB		#1,T0

				AMOV   	#table_g,XAR1
				RPT		#3				;准备进行累加的数值
				ADD		*AR1+,AC0			
      	 		RPT		#3
      	 		ADD		*AR1+,AC1
      	 		RPT		#3
      	 		ADD		*AR1+,AC2
      			SFTL	AC0,#16
      			SFTL	AC1,#16
      			SFTL	AC2,#16
      		
      			AMOV	#exp_temp,XAR3
      			
      			BCC		time1_run,T3>=#0     ;第一次运行 			
				MANT	AC0,AC0			
       			::NEXP	AC0,T1
       			CMP		*AR4==#0FFFFh,TC1
       			BCC		sum_negtive1,!TC1		;若结果为零取补
       			XOR		#0FFFFh,AC0
       			XOR		#0FFFFh<<#16,AC0
       			ADD		#1,AC0
sum_negtive1:	MOV		HI(AC0),*AR3+		;储存数据
				MOV		T1,*AR3-
      			
time1_run:		BCC		time2_run,T3!=#0	;第二次运行	
      			CMP		*AR4==#0001h,TC1	;累加开始,记录当前值的符号	
      			MOV		*AR4,T1
      			BCC		sum_not_zero1,T1==#0
      			MAR		*AR4+
      			CMP		*AR4==#0001h,TC2
      			BCC		same_symbol1,TC1^TC2
      			ADD		AC0,AC1
same_symbol1:   BCC		diff_symbol1,!TC1^TC2
				SUB		AC0,AC1
diff_symbol1:	NOP				  		
sum_not_zero1:	MANT	AC1,AC1				;储存结果
       			::NEXP	AC1,T1
       			BCC		sum_negtive2,TC2		;若结果为零取补
       			XOR		#0FFFFh,AC1
       			XOR		#0FFFFh<<#16,AC1
       			ADD		#1,AC1
sum_negtive2:	MOV		HI(AC1),*AR3+		;储存数据
				MOV		T1,*AR3-
      	        
time2_run:		BCC		time3_run,T3<=#0    ;第三次以后运行  	        
      	        CMP		*AR4==#0001h,TC1	;累加开始,记录当前值的符号
      			MOV		*AR4,T1
      			BCC		sum_not_zero21,T1==#0
      			MAR		*AR4+
      			CMP		*AR4==#0001h,TC2
      			BCC		same_symbol21,TC1^TC2
      			ADD		AC0,AC1
same_symbol21:  BCC		diff_symbol21,!TC1^TC2
				SUB		AC0,AC1
diff_symbol21:	NOP     	        
sum_not_zero21:	BCC		add_1,T1!=#0
				MAR		*AR4+
add_1:			NOP	
				CMP		*AR4==#0001h,TC1	;累加开始,记录当前值的符号
      			MOV		*AR4,T1
      			BCC		sum_not_zero22,T1==#0
      			MAR		*AR4+
      			CMP		*AR4==#0001h,TC2
      			BCC		same_symbol22,TC1^TC2
      			ADD		AC1,AC2
same_symbol22:  BCC		diff_symbol22,!TC1^TC2
				SUB		AC1,AC2
diff_symbol22:	NOP				  		
sum_not_zero22:	MANT	AC2,AC2				;储存结果
       			::NEXP	AC2,T2
       			BCC		sum_negtive3,TC2		;若结果为零取补
       			XOR		#0FFFFh,AC2
       			XOR		#0FFFFh<<#16,AC2
       			ADD		#1,AC2
sum_negtive3:	MOV		HI(AC2),*AR3+		;储存数据
				MOV		T2,*AR3-
time3_run:		ADD		#1,T3
				XOR		AC0
      			XOR		AC1
      			XOR		AC2
      			XOR		AC3       			
				MOV		*AR3+,*AR2+
				MOV		*AR3-,*AR2+
cov150_over:	NOP		       			
       			XOR		T1
       
       
       RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -