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

📄 10-3.asm

📁 《DSP嵌入式系统开发典型案例》此书的源代码
💻 ASM
字号:
            	.ref   		usb_transfer 
pcr1        	.equ    		01900024h
pcr        	.equ    		018c0024h
			.global 		ftranform
			.global		sinx
			.data
sinx:		.word 	6957,13597,19617,24742,28740,31426,32680,32444,30728,27612,23236,17801
		.word		11554, 4780,-2212,-9102,-15578,-21344,-26136,-29736,-31981,-27609,-6947
		.word     17814, 32064, 27396, 6564,-18141, -32142, -27180, -6181, 18465, 32216, 26959
		.word 	5796,-18787,-32285,-26735,-5411, 19106, 32350, 26507,-13377,-32031, 149, 32092
		.word 	13103,-26681,-24122, 16720, 31026,-3908,-32640,-9571, 28687, 21418,-19843
		.word		-29612, 7614, 32756, 5912,-30315,-18431, 31898,-4428,-28725, 25014, 10799
		.word		-32753, 12673, 23671,-29636,-2432, 31379,-20055,-17007, 32243,-6100,-27872
		.word		26074, 9186,-32657, 14217, 22469,-32207, 29583,-15605,-4362, 22655,-32253
		.word		29472,-15379,-4617, 22841,-32298, 29358,-15151,-4872, 23024,-32340, 29243
		.word		-14922,-5126, 23207,-32381, 32609,-32738, 32765,-32693, 32519,-32246, 31873
		.word		-31403, 30836,-30174, 29420,-28575, 27642,-26624, 25525,-24347, 23094,-21770
		.word		20379,-18926, 17414,-28889, 32756,-27996, 15863, 448,-16640, 28451,-32768
		.word		28456,-16649, 458, 15854,-27990, 32755,-28894, 17423,-1364,-15055, 27509
		.word		29310,-453,-28894, 27003, 4081,-30753, 24177, 8537,-32022, 20887, 12829,-32676
		.word		17196, 16875,-32702, 13174, 20596,-32100, 8900, 23922,-30881, 4454,32743,1893
		.word		32376,-8169, 30792, 14138,-28052,-19576, 24257, 24278,-19551,-28068, 14110
		.word		30803,-8139,-32381, 1862, 32742, 4485,-31872,-10663,-17986,-24195,-28904
		.word		31821,-32767,-31681,-28633,-23809,-17510,-10126,-2114, 6029, 13798, 20712
		.word		26342, 30340,32458,32563,30651, 26839, 21363,-3724,-26422,-32171,-17283
		.word		8691, 29091, 30829, 12791,-13452,-31066,-28752,-7994, 17891, 32300, 25989
		.word		3007,-21904,-32765,-22607, 2052, 25395, 24756,-16906,-30553, 6428, 32758
		.word		4806,-31110,-15474, 25803, 24323,-17462,-30311, 7068, 32735, 4158,-31309
		.word		-14895,26201,23880,-18012,-18012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
			
		.sect  	".datatt"			
tt:		.word		216,433,649,865,1081,1298,1514,1730,1946,2163,2379,2595,2811,3028,3244,3460
		.word		03677,3893,4109,4325,4542,4761,4981,5200,5420,5639,5859,6078,6298,6518,6737
		.word		6957, 07176,7396,7615,7835,8054,8274,8493,8713,8933,9152,9375 ,9598,9821
		.word		10043,10266,10489, 10712,10935,11158,11380,11603,11826,12049,12272,12494
		.word		12717,12940,13163,13386,13609,13831,14057, 14284, 14510,14736,14962,15188
		.word		15414,15640,15866,16092,16318,16545,16771,16997,17223,17449,17675, 17901
		.word		18127,18353,18579,18809,19038,19268,19497,19726,19956,20185,20414, 20644
		.word		20873, 21103, 21332, 21561, 21791,22020,22249,22479,22708,22938,23167, 23396
		.word		23629,23862,24094,24327,24560,24792,25025, 25258, 25490, 25723, 25956, 26188
		.word		26421,26653,26886,27119,27351,27584,27817,28049,28282,28518,28754, 28990
		.word		29226,29462,29698,29934,30169,30405,30641,30877,31113,31349,31585, 31821
		.word		32057, 32293, 32529, 32765,33001,33237,33476,33715,33954,34193, 34433, 34672
		.word		34911,35150,35389,35629,35868,36107,36346, 36585, 36825, 37064, 37303, 37542
		.word		37782,38021,38260,38502,38745,38987,39230,39472,39715,39957, 40200, 40442
		.word		40685, 40927, 41170,41412,41655,41897,42140,42382,42625, 42867, 43110, 43352
		.word		43604, 43857, 44109, 44361,44614,44866,45118,45371,45623,45875, 46128, 46380
		.word		46632,46884,47137,47389,47641,47894,48146, 48398, 48651, 48906, 49162, 49417
		.word		49673,49929,50184,50440,50695,50951,51207,51462,51718,51973, 52229, 52485
		.word		52740, 52996,53251,53507,53762,54018,54277,54536, 54795, 55054, 55312, 55571
		.word		55830, 56089, 56348, 56607,56866,57124,57383,57642,57901,58160, 58419, 58678
		.word		58937, 59195, 59195
	
		.bss 		fft, 16000, 0, 0			   		; 为变量fft申请16000个内存空间
		.global 	ft					   		; 定义全局变量ft
		.text
ftranform:	
         	MVC 	csr,b0				   		; 设置全局控制寄存器
      	AND 	-2,b0,b0
      	MVC 	b0,csr     					; 屏蔽所有可屏蔽中断
						
		MVKL 	pcr1,a10						; 设置pcr1寄存器
         MVKH 	pcr1,a10
         MVKL 	3a0ah,b10						; 设置dx1引脚为低电平
         STW  	b10,*a10
         NOP  	4							; 等待较长时间,是为了确保硬件完成设置
         NOP  	8
         NOP  	8
            
         MVKL 	3a2ah,b10						; 设置dx1引脚为高电平
         STW  	b10,*a10
         NOP  	4
         NOP  	8
         NOP  	8
         
         MVKL 	3a2ah,b10						; 设置dx1引脚为低电平
         STW  	b10,*a10
         NOP  	4
         NOP  	8
         NOP  	8
         
         MVKL 	3a2ah,b10						; 设置dx1引脚为高电平
         STW  	b10,*a10
         NOP  	4
         NOP  	8
         NOP  	8
         
         MVKL 	3a2ah,b10						; 设置dx1引脚为低电平
         STW  	b10,*a10
         NOP  	4
         NOP  	8
         NOP  	8
         
         MVKL 	3a2ah,b10						; 设置dx1引脚为高电平
         STW  	b10,*a10
         NOP  	4
         NOP  	8
         NOP  	8
         
         MVKL 	3a0ah,b10						; 设置dx1引脚为低电平
         STW  	b10,*a10
         NOP  	4
		
		MVK	4000, a0						; 寄存器a0为整个外循环loopout的次数
		MVKL	fft, a4
		MVKH	fft, a4
		MVKL	0, b3							; 寄存器b3清0
loopout:	ADD 	b3,1,b3				; 寄存器b3累加已经执行的外循环loopout的次数
		ZERO	a5							; 寄存器a5保存数据的实部
		ZERO	b5							; 寄存器b5保存数据的虚部
		MVKL	sinx, a2
		MVKH	sinx, a2
		MVKL	tt, a13
		MVKH	tt, a13
		MVK	250, b4						; 设置内循环loopin次数为250次
loopin:	SUB 	b4,1,b4						; 内循环次数减1
		LDW		*a13++, a6
		NOP		5		
		MPYU	b3, a6, b9						; 寄存器b9 保存 k*t(n)
		NOP			
		LDW		*a2++, a6						; 寄存器a6和b6保存sinx
		EXTU	b9, 16, 31, b2
		EXTU	b9, 17, 31, b1
		EXTU 	b9, 18, 18, b9
		MVK	487Fh, a8						; 寄存器a8保存2*pi
		MPYU	b9, a8, b8
		MPY 	b9, 6h, b7
		SHR		a6, 16, a6
		SHL     a6, 4, a6
		SHRU	b8, 16, b9
		ADD 	b9, b7, b9						; 寄存器b9 保存 2*pi*k*t (n)
		MV 		b9, b8						; 寄存器b8 保存 2*pi*k*t (n)
		MV		b8, a8						; 寄存器a8 保存 2*pi*k*t (n)
		
		MV		a6, b6						; 开始计算非均匀采样信号的频谱
		ZERO	b9
	||	ZERO	a9
		MVKL	752h, a3						; 计算sin(2*pi*t(n)*(k-1)/N))
		ADD 	b9, a3, b9						; 正弦函数采用泰勒级数计算
	||	ADD 	a9, a3, a9
		MPYU	b9, b8, b12						; 计算b9和b8的低16位的乘积
	||	MPYU	a9, a8, a12						; 计算a9和a8的低16位的乘积
		MPYHSLU	b9, b8, b11					; 计算b9的高16位和b8的低16位乘积
	||	MPYHSLU	a9, a8, a11 				; 计算a9的高16位和a8的低16位乘积
		MPYLUHS	b9, b8, b10					; 计算b9的低16位和b8的高16位乘积
	||	MPYLUHS	a9, a8, a10					; 计算a9的低16位和a8的高16位乘积
		MPYH	b9, b8, b7						; 计算b9和b8的高16位的乘积
	||	MPYH	a9, a8, a7						; 计算a9和a8的高16位的乘积
		SHRU	b12, 16, b12					; 对计算后的乘积进行移位累加
	||	SHRU	a12, 16, a12
		SHL		b7, 16, b7
	||	SHL		a7, 16, a7
		ADD 	b11, b10, b9
	||	ADD 	a11, a10, a9
		ADD 	b9, b12, b9
	||	ADD 	a9, a12, a9
		ADD 	b9, b7, b9
	||	ADD 	a9, a7, a9
		
		MVKL		0CBCEh, a3				; 计算(cos(2*pi*t(n)*(k-1)/N)
		ADD 		b9, a3, b9					; 余弦函数采用泰勒级数计算
		MVKL		61Eh, a3					; 寄存器a3保存级数展开后的系数
		ADD 		a9, a3, a9
		MPYU		b9, b8, b12					; 做泰勒级数的乘积
	||	MPYU		a9, a8, a12
		MPYHSLU	b9, b8, b11
	||	MPYHSLU	a9, a8, a11
		MPYLUHS	b9, b8, b10
	||	MPYLUHS	a9, a8, a10
		MPYH		b9, b8, b7
	||	MPYH		a9, a8, a7
		SHRU		b12, 16, b12
	||	SHRU		a12, 16, a12
		SHL			b7, 16, b7
	||	SHL			a7, 16, a7
		ADD 		b11, b10, b9				; 求泰勒级数各项的和
	||	ADD 		a11, a10, a9
		ADD 		b9, b12, b9
	||	ADD 		a9, a12, a9
		ADD 		b9, b7, b9
	||	ADD 		a9, a7, a9
	
		MVKL		559h, a3				   	; 寄存器a3为泰勒级数的系数
		ADD 		b9, a3, b9
		MVKL		7BFCh, a3
		MVKLH		0FFFFh, a3
		ADD 		a9, a3, a9
		MPYU		b9, b8, b12					; 做泰勒级数的乘积
	||	MPYU		a9, a8, a12
		MPYHSLU	b9, b8, b11
	||	MPYHSLU	a9, a8, a11
		MPYLUHS	b9, b8, b10
	||	MPYLUHS	a9, a8, a10
		MPYH		b9, b8, b7
	||	MPYH		a9, a8, a7
		SHRU		b12, 16, b12
	||	SHRU		a12, 16, a12
		SHL			b7, 16, b7
	||	SHL			a7, 16, a7
		ADD 		b11, b10, b9				; 求泰勒级数各项的和
	||	ADD 		a11, a10, a9
		ADD 		b9, b12, b9
	||	ADD 		a9, a12, a9
		ADD 		b9, b7, b9
	||	ADD 		a9, a7, a9
		
		MVKL		0FED2h, a3		    		; 寄存器a3为泰勒级数的系数
		MVKLH		0, a3
		ADD 		b9, a3, b9
		MVKL		0F2h, a3
		ADD 		a9, a3, a9
		MPYU		b9, b8, b12					; 做泰勒级数的乘积
	||	MPYU		a9, a8, a12
		MPYHSLU	b9, b8, b11
	||	MPYHSLU	a9, a8, a11
		MPYLUHS	b9, b8, b10
	||	MPYLUHS	a9, a8, a10
		MPYH	b9, b8, b7
	||	MPYH	a9, a8, a7
		SHRU	b12, 16, b12
	||	SHRU	a12, 16, a12
		SHL		b7, 16, b7
	||	SHL		a7, 16, a7
		ADD 	b11, b10, b9					; 求泰勒级数各项的和
	||	ADD 	a11, a10, a9
		ADD 	b9, b12, b9
	||	ADD 	a9, a12, a9
		ADD 	b9, b7, b9
	||	ADD 	a9, a7, a9
		
		MVKL	0Dh, a3					    ; 寄存器a3为泰勒级数的系数
		ADD 	b9, a3, b9
		MVKL	0FFF2h, a3
		MVKLH	0, a3
		ADD 	a9, a3, a9
		
		MPYU	b9, b6, b12						; 做泰勒级数的乘积
	||	MPYU	a9, a6, a12
		MPYHSLU	b9, b6, b11
	||	MPYHSLU	a9, a6, a11
		MPYLUHS	b9, b6, b10
	||	MPYLUHS	a9, a6, a10
		MPYH	b9, b6, b7
	||	MPYH	a9, a6, a7
		SHRU	b12, 16, b12
	||	SHRU	a12, 16, a12
		SHL		b7, 16, b7
	||	SHL		a7, 16, a7
		ADD 	b11, b10, b9					; 求泰勒级数各项的和
	||	ADD 	a11, a10, a9
		ADD 	b9, b12, b9
	||	ADD 	a9, a12, a9
		ADD 	b9, b7, b9
	||	ADD 	a9, a7, a9

			AND		b2, b1, b0				
	[b0]		ADD 	a5, b9, a5
 ||	[b0]		SUB 	b5, a9, b5
			XOR 	b2, 1, b2
			AND		b2, b1, b0
	[b0]		SUB 	a5, b9, a5
 ||	[b0]		ADD 	b5, a9, b5		
			XOR 	b1, 1, b1
			AND 	b2, b1, b0
	[b0]		ADD 	a5, a9, a5
 ||	[b0]		ADD 	b5, b9, b5			
			XOR 	b2, 1, b2
			AND 	b2, b1, b0
	[b0]		SUB 	a5, a9, a5
 ||	[b0]		SUB 	b5, b9, b5							
				
			CMPLTU	0, b4, b0				; 寄存器b4中内容为尚未执行的内循环的次数
	[b0]		B 		loopin				; 判断内循环loopin次数是否为0
			NOP 	5
										; 外循环计算傅立叶变换后虚部和实部的平方和
			MPYU	b5, b5, b12				; 计算b5的低字节的平方
		||	MPYU	a5, a5, a12				; 计算a5的低字节的平方
			MPYHSLU	b5, b5, b11			; 计算b5的高字节和低字节的乘积
		||	MPYHSLU	a5, a5, a11			; 计算a5的高字节和低字节的乘积
			MPYLUHS	b5, b5, b10			; 计算b5的低字节和高字节的乘积
		||	MPYLUHS	a5, a5, a10			; 计算a5的低字节和高字节的乘积
			MPYH	b5, b5, b7				; 计算b5的高字节的平方
		||	MPYH	a5, a5, a7				; 计算a5的高字节的平方
			SHRU	b12, 16, b12			; 将计算结果进行移位和累加
		||	SHRU	a12, 16, a12
			SHL		b7, 16, b7
		||	SHL		a7, 16, a7
			ADD 	b11, b10, b5
		||	ADD 	a11, a10, a5
			ADD 	b5, b12, b5
		||	ADD 	a5, a12, a5
			ADD 	b5, b7, b5
		||	ADD 	a5, a7, a5
			
			ADD 	a5, b5, a5				; 寄存器a5为计算后的频谱值
			STW		a5,*a4++				; 依次保存各个频点的频谱值
			NOP		5
										; 寄存器b3为已经执行的外循环次数
			CMPLTU	b3, a0, b1				; 判断b3的内容是否达到a0的值
	[b1]		B 		loopout				; 条件不满足跳到外循环
			NOP 	5
loop:			NOP							; 傅立叶变换结束,得到信号的频谱
			B 		usb_transfer			; 程序跳转到USB程序,将频谱输出到计算机
			NOP 	5
			NOP	
			.end

⌨️ 快捷键说明

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