📄 sine.lst
字号:
C166 COMPILER V6.04, SINE 09/04/2007 16:24:44 PAGE 1
C166 COMPILER V6.04, COMPILATION OF MODULE SINE
OBJECT MODULE PLACED IN Sine.OBJ
COMPILER INVOKED BY: C:\Keil\C166\BIN\C166.EXE Sine.c MODV2 BROWSE MODV2 DEBUG
stmt lvl source
1 /******************************************************************************
2 ; Module: Sine
3 ; Filename: Sine.c
4 ; Project: DSP library for XC166 microcontroller
5 ;------------------------------------------------------------------------------
6 ; Compiler: Keil
7 ;
8 ; Version: V1.2
9 ;
10 ; Description: Implementation of sine function
11 ;
12 ; Date: April 2003
13 ;
14 ; History:
15 ;******************************************************************************/
16
17 /******************************************************************************
18 ; DataS Sine( DataS x );
19 ;
20 ; INPUT:
21 ; x By pi normalized input value between [-1,1] in 1Q15 format
22 ; x = xrad/pi, where xrad contains the angle in radians
23 ; [-pi,pi].
24 ;
25 ; OUTPUT:
26 ; y Output value in 1Q15 format
27 ;
28 ; ALGORITHM:
29 ; Using Taylor series to compute sin(x) with xrad in 1rd quadrant
30 ; (0-pi/2)
31 ; sin(x) = 3.140625*x + 0.02026367*x^2 - 5.325196*x^3 +
32 ; 0.5446778*x^4 + 1.800293*x^5
33 ;
34 ; REGISTER USAGE:
35 ; 1. From .c file to .asm file:
36 ; definded by compiler
37 ;
38 ; 2. From .asm file to .c file:
39 ; (R4) = y
40 ;
41 ; Assumption:
42 ;
43 ;*****************************************************************************/
44
45 #include "DspLib_Keil.h"
46
47
48 DataS Sine(DataS x)
49 {
50 1 DataS sdata coeff[5] = {0x1CCE,0x08B7,0x0AACC, 0x0053,0x3240};
*** WARNING C189 IN LINE 50 OF SINE.C: 'coeff': storage class changed to 'static'
51 1 //hex values in 4Q12 format
52 1 __asm
53 1 {
54 1
C166 COMPILER V6.04, SINE 09/04/2007 16:24:44 PAGE 2
55 1 //MAC registers initialization
56 1 MOV MCW,#0600h ; MP=1, with left shift
57 1
58 1 ;cheaking sign of input
59 1 MOV R5,x ;(R5)=x
60 1 SHR R5,#15 ;(R5)>>15
61 1
62 1 ;compuetr abs value of input
63 1 MOV R4,#0
64 1 CoABS R4,x ;(ACC)=abs(x)
65 1 CoSTORE x,MAS ;(R12)=abs(x)
66 1
67 1 ;cheak if abs(x)>0.5
68 1 CMP x,#4000h
69 1 JMPR cc_SLE, loop ;if abs(x)<0.5(pi/2), x is in 1rd and 4th quadrant
70 1 SUB x,#7FFFh ;if abs(x)>0.5(pi/2), x is in 2nd and 3rd quadrant
71 1 NEG x
72 1 loop:
73 1 MOV R6,#coeff ;(R6)=pointer of data field
74 1 CoMUL x,[R6+] ;(ACC)=1.800293*x
75 1 CoADD R4,[R6+] ;(ACC)=1.800293*x + 0.5446778
76 1 CoSTORE R7,MAS ;(R7)=limited(ACC)
77 1 CoMUL x,R7
78 1 CoADD R4,[R6+] ;(ACC)=(1.800293*x + 0.5446778)*x - 5.325196
79 1 CoSTORE R7,MAS
80 1 CoMUL x,R7
81 1 CoADD R4,[R6+] ;(ACC)=((1.800293*x + 0.5446778)*x - 5.325196)*x + 0.02026367
82 1 CoSTORE R7,MAS
83 1 CoMUL x,R7
84 1 CoADD R4,[R6] ;(ACC)=(((1.800293*x + 0.5446778)*x - 5.325196)*x + 0.02026367)*x
85 1 ; + 3.140625
86 1 CoSTORE R7,MAS
87 1 CoMUL x,R7 ;(ACC)=((((1.800293*x + 0.5446778)*x - 5.325196)*x + 0.02026367)*x
88 1 ; + 3.140625)*x
89 1 CoSHL #3 ;(ACC)<<3, change format to 1Q15
90 1 CoSTORE R4,MAS ;(R4)=sin(x)
91 1
92 1 CMP R5,#0
93 1 JMPR cc_EQ,return
94 1 NEG R4 ;(R4)=sin(-x)
95 1 return:
96 1
97 1 RET
98 1 }
99 1
100 1 }
101
102
103
MODULE INFORMATION: INITIALIZED UNINITIALIZED
CODE SIZE = 104 --------
NEAR-CONST SIZE = -------- --------
FAR-CONST SIZE = -------- --------
HUGE-CONST SIZE = -------- --------
XHUGE-CONST SIZE = -------- --------
NEAR-DATA SIZE = -------- --------
FAR-DATA SIZE = -------- --------
XHUGE-DATA SIZE = -------- --------
IDATA-DATA SIZE = -------- --------
SDATA-DATA SIZE = 10 --------
C166 COMPILER V6.04, SINE 09/04/2007 16:24:44 PAGE 3
BDATA-DATA SIZE = -------- --------
HUGE-DATA SIZE = -------- --------
BIT SIZE = -------- --------
INIT'L SIZE = 14 --------
END OF MODULE INFORMATION.
C166 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -