在DSP库函数里面看到 qmath 中有qsin(x) qsinlt(x)可是都是汇编的 看不大懂
;***********************************************************************;
;* *;
;* File Name : qsinlt.asm *;
;* *;
;* Originator : Advanced Embeeded Control (AEC) *;
;* Texas Instruments Inc. *;
;* *;
;* Description : This file contain source code for fixed point SIN *;
;* function implemented using 256-point look-up table *;
;* *;
;* Date : 21/1/2002 *;
;***********************************************************************;
; Module definition for external referance
.def _qsinlt
.ref SINTAB_360
_qsinlt:
SETC SXM,OVM
MOVL XAR5,#SINTAB_360
; Obtain the SIN of the angle "X=alpha" using Look-up Table and Linear Interpolation method
MOVB XAR0,#0
MOV T,#0
MOVB AR0,AL.MSB ; AR0=indice (alpha/2^8)
MOVB T,AL.LSB ; T=(X-X1) in Q8 format
MOV ACC,*+XAR5[AR0] ; ACC=Y1=*(SINTAB_360 + indice)
ADDB XAR0,#1
MOV PL,*+XAR5[AR0] ; PL=Y2
SUB PL,AL ; PL=Y2-Y1 in Q15
MPY P,T,PL ; P=Y2-Y1 in Q23
LSL ACC,8 ; ACC=Y1 in Q23
ADDL ACC,P ; Y=Y1+(Y2-Y1)*(X-X1)
MOVH AL,ACC<<8 ; AL=Y in Q15 format
LRETR
;***********************************************************************;
;* *;
;* File Name : qsin.asm *;
;* *;
;* Originator : Advanced Embeeded Control (AEC) *;
;* Texas Instruments Inc. *;
;* *;
;* Description : This file contain source code for fixed point SIN *;
;* function implemented using Tylor series *;
;* *;
;* Date : 21/1/2002 *;
;***********************************************************************;
;* Tylor Series Approximation in the first quardrant: *;
;* *;
;* sin(x) = 3.1406625*x+0.02026367*x^2-5.325196*x^3+0.5446778*x^4 *;
;* +1.800293*x^5, where 'x' is the normalized radians *;
;* *;
;***********************************************************************;
.ref _qsin ;External ref
K5 .set 0x6480 ; Scaled to Q13
K4 .set 0x52FF ; Scaled to Q20
K3 .set 0xAACC ; Scaled to Q12
K2 .set 0x45B8 ; Scaled to Q15
K1 .set 0x7338 ; Scaled to Q14
_qsin:
SETC SXM,OVM ; ACC=x
MOV ACC,AL<<16 ; AH='x', AL=0
CLRC TC
ABSTC ACC ; TC= sign(x), AH=abs(x)
LSL ACC,#1 ; Convert to first quadrant (0 to pi/2)
ABS ACC
SFR ACC,#1
MOVL XT,ACC ; XT=x in Q31 and in first quardrant
; Comment Next 2-instructions, if this works
MPY ACC,T,#K1
; MOV AR5,#K1 ; AR5=K1
; MPY ACC,T,AR5 ; ACC=K1*x in Q29
ADD ACC,#K2<<14 ; ACC=K1*x+K2 in Q29
QMPYL ACC,XT,ACC ; ACC=(K1*x+K2)*x in Q28
ADD AH,#K3 ; ACC=(K1*x+K2)*x+K3 in Q28
QMPYL ACC,XT,ACC ; ACC=((K1*x+K2)*x+K3)*x in Q27
ADD ACC,#K4<<7 ; ACC=((K1*x+K2)*x+K3)*x+K4 in Q27
QMPYL ACC,XT,ACC ; ACC=(((K1*x+K2)*x+K3)*x+K4)*x in Q26
ADD ACC,#K5<<13 ; ACC=(((K1*x+K2)*x+K3)*x+K4)*x+K5 in Q26
QMPYL ACC,XT,ACC ; ACC=((((K1*x+K2)*x+K3)*x+K4)*x+K5)*x in Q25
LSL ACC,#6 ; in Q31
ABS ACC ; Saturate to 0x7fff
NEGTC ACC ; ACC=-sin(x), if TC=1
MOV AL,AH
LRETR