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

📄 sincos.asm

📁 f2407:电机控制
💻 ASM
字号:
;----------------------------------------------------------------------------------------------------------
;重庆大学DSP实验室
;C函数名:void sin_cos(sincos_struct *p, int angle)
;本函数采用查表、线性插值的方法同时求
;取函数参数angle(单位:度)的正弦和余
;弦函数值,即sin(angle)、cos(angle)
;插值公式:	   x-x1	
;		y=y1+--------(y2-y1)		         
;		       x2-x1
;其中,(x1,y1),(x2,y2)分别是正弦表中
;离待求点(x,y)最近的两个已知点
;入口条件:
;	无符号整形数angle;范围:0000h~ffffh;单位:度
;	0000h		<---->		0度
;	4000h		<---->		90度
;	8000h		<---->		180度
;	c000h		<---->		270度
;	ffffh		<---->		360度
;出口条件:
;	有符号整形数sinx,cosx;Q15;范围:0000h~ffffh
;本函数可供C语言程序调用,使用时需在main()函数前作如下定义:
;	声明外部函数:
;		extern void sin_cos(sincos_struct *p, int angle) ;
;	定义全局变量保存函数返回值:
;	typedef struct
;	{	int	inv_step;	;Q15, 步长的倒数, 对于一个360点的正弦表,其步长为1度,由于
;						;1度用无符号16进制可表示成0xffff/360=182.04166667
;						;所以invstep=1/182.04166667=0.0054932=0xB4(Q15)
;		int k_cosx;		;cosx=sin(x+pi/2), K_cosx=pi/2=index_max/4=360/4 for a 360 point table
;		int sinx;		;Q15, 返回angle的正弦值
;		int cosx;		;Q15, 返回angle的余弦值
;   }sincos_struct;

;2002,3,4
;-----------------------------------------------------------------------------------------------------------		
         
 		.def _sin_cos
		.global _sin_cos 
_sin_cos_frame .set 5h


 
_sin_cos:
		POPD	*+
		SAR		AR0,*+
		SAR		AR1,*
		LAR		AR0,#_sin_cos_frame
		LAR		AR2,*0+,AR2
		LAR		AR0,#2
		LAR		AR3,*,AR3      	;C COMPATIBLE
								;STACK: angle/ *p/address/ar0/ar1
								;ARP:AR3, AR2:AR1, AR3:AR1
		SBRK	#3
		SETC	SXM
		LAR		AR5,*-,AR5
		LT		*+,AR3			
		MPYU	*,AR2           
		PAC		
		SACH	*,1				;index=floor(angle/step)
								;STACK:angle/ *p/address/ar0/index
								;ARP:AR2, AR2:index, AR3:angle, AR5:k_cosx
		SUB		*+,15
		SACL	*-				;Q15, K=(x-x1)/(x2-x1)=(x-x1)/step=x/step-x1/step=x/step-index
								;STACK:angle/ *p/address/ar0/index/k
								;ARP:AR2, AR2:index, AR3:angle, AR5:k_cosx
		LACC	*0+
		ADD		#SIN_TAB
		TBLR	*+				;search for sin1
		ADD		#1
		TBLR	*+,AR5			;search for sin2
		ADD		*+,AR2			;add pi/2
		TBLR	*+				;search for cos2
		SUB		#1                              
		TBLR	*0-				;search for cos1
								;STACK:angle/ *p/address/ar0/index/k/sin1/sin2/cos2/cos1
								;ARP:AR2, AR2:sin2, AR3:angle, AR5:sinx
		LACC	*-
		SUB		*+				;sin2-sin1
		SACL	*0-				;STACK:angle/ *p/address/ar0/index/k/sin1/sin2-sin1/cos2/cos1
								;ARP:AR2, AR2:k, AR3:angle, AR5:sinx
		LT		*0+
		MPY		*-				;kx=(x-x1)*(y2-y1)/(x2-x1)=k*(sin2-sin1)
								;ARP:AR2, AR2:sin1, AR3:angle, AR5:sinx
		LACC	*0+,15,AR5		;sin1-->ACC
		APAC					;sinx=sin1+k*(sin2-sin1)
		SACH	*+,1,AR2		;STACK:angle/ *p/address/ar0/index/k/sin1/sin2-sin1/cos2/cos1
								;ARP:AR2, AR2:cos2, AR3:angle, AR5:cosx
		LACC	*+
		SUB		*-
		SACL	*				;cos2-cos1
		MPY		*+				;K*(cos2-cos1)=(x-x1)(cos2-cos1)/(x2-x1)
		LACC	*,15,AR5
		APAC					;cosx=cos1+(x-x1)*(cos2-cos1)/(x2-x1)
		SACH	*,1,AR1
		SBRK	#(_sin_cos_frame+1)
		LAR		AR0,*-
		PSHD	*
		RET
												
 
SIN_TAB:
    .word 0, 571, 1143, 1714, 2285, 2855, 3425, 3993, 4560, 5126
    .word 5690, 6252, 6812, 7371, 7927, 8480, 9032, 9580, 10125, 10668
    .word 11207, 11743, 12275, 12803, 13327, 13848, 14364, 14876, 15383, 15886
    .word 16383, 16876, 17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621
    .word 21062, 21497, 21926, 22347, 22762, 23170, 23571, 23964, 24351, 24730
    .word 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 27788, 28087
    .word 28377, 28659, 28932, 29196, 29451, 29697, 29935, 30163, 30381, 30591
    .word 30791, 30982, 31164, 31336, 31498, 31651, 31794, 31928, 32051, 32165
    .word 32270, 32364, 32449, 32523, 32588, 32643, 32688, 32723, 32748, 32763
    .word 32767, 32763, 32748, 32723, 32688, 32643, 32588, 32523, 32449, 32364
    .word 32270, 32165, 32051, 31928, 31794, 31651, 31498, 31336, 31164, 30982
    .word 30791, 30591, 30381, 30163, 29935, 29697, 29451, 29196, 28932, 28659
    .word 28377, 28087, 27788, 27481, 27165, 26841, 26509, 26169, 25821, 25465
    .word 25101, 24730, 24351, 23964, 23571, 23170, 22762, 22347, 21926, 21497
    .word 21062, 20621, 20173, 19720, 19260, 18794, 18323, 17846, 17364, 16876
    .word 16383, 15886, 15383, 14876, 14364, 13848, 13327, 12803, 12275, 11743
    .word 11207, 10668, 10125, 9580, 9032, 8480, 7927, 7371, 6812, 6252
    .word 5690, 5126, 4560, 3993, 3425, 2855, 2285, 1714, 1143, 571
    .word 0, -572, -1144, -1715, -2286, -2856, -3426, -3994, -4561, -5127
    .word -5691, -6253, -6813, -7372, -7928, -8481, -9033, -9581, -10126, -10669
    .word -11208, -11744, -12276, -12804, -13328, -13849, -14365, -14877, -15384, -15887
    .word -16385, -16877, -17365, -17847, -18324, -18795, -19261, -19721, -20174, -20622
    .word -21063, -21498, -21927, -22348, -22763, -23171, -23572, -23965, -24352, -24731
    .word -25102, -25466, -25822, -26170, -26510, -26842, -27166, -27482, -27789, -28088
    .word -28378, -28660, -28933, -29197, -29452, -29698, -29936, -30164, -30382, -30592
    .word -30792, -30983, -31165, -31337, -31499, -31652, -31795, -31929, -32052, -32166
    .word -32271, -32365, -32450, -32524, -32589, -32644, -32689, -32724, -32749, -32764
    .word -32767, -32764, -32749, -32724, -32689, -32644, -32589, -32524, -32450, -32365
    .word -32271, -32166, -32052, -31929, -31795, -31652, -31499, -31337, -31165, -30983
    .word -30792, -30592, -30382, -30164, -29936, -29698, -29452, -29197, -28933, -28660
    .word -28378, -28088, -27789, -27482, -27166, -26842, -26510, -26170, -25822, -25466
    .word -25102, -24731, -24352, -23965, -23572, -23171, -22763, -22348, -21927, -21498
    .word -21063, -20622, -20174, -19721, -19261, -18795, -18324, -17847, -17365, -16877
    .word -16384, -15887, -15384, -14877, -14365, -13849, -13328, -12804, -12276, -11744
    .word -11208, -10669, -10126, -9581, -9033, -8481, -7928, -7372, -6813, -6253
    .word -5691, -5127, -4561, -3994, -3426, -2856, -2286, -1715, -1144, -572
    .word -1, 571, 1143, 1714, 2285, 2855, 3425, 3993, 4560, 5126
    .word 5690, 6252, 6812, 7371, 7927, 8480, 9032, 9580, 10125, 10668
    .word 11207, 11743, 12275, 12803, 13327, 13848, 14364, 14876, 15383, 15886
    .word 16384, 16876, 17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621
    .word 21062, 21497, 21926, 22347, 22762, 23170, 23571, 23964, 24351, 24730
    .word 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 27788, 28087
    .word 28377, 28659, 28932, 29196, 29451, 29697, 29935, 30163, 30381, 30591
    .word 30791, 30982, 31164, 31336, 31498, 31651, 31794, 31928, 32051, 32165
    .word 32270, 32364, 32449, 32523, 32588, 32643, 32688, 32723, 32748, 32763
    .word 32767 
    .end		
		   							
		   			
		

⌨️ 快捷键说明

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