Files
bassofono/codice/build/FIRFilterCode.lst
nzasch 5610d2606c opamp
2021-07-03 04:08:08 +02:00

4627 lines
169 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
ARM GAS /tmp/ccKC6A84.s page 1
1 .cpu cortex-m4
2 .eabi_attribute 27, 1
3 .eabi_attribute 28, 1
4 .eabi_attribute 23, 1
5 .eabi_attribute 24, 1
6 .eabi_attribute 25, 1
7 .eabi_attribute 26, 1
8 .eabi_attribute 30, 2
9 .eabi_attribute 34, 1
10 .eabi_attribute 18, 4
11 .file "FIRFilterCode.c"
12 .text
13 .Ltext0:
14 .cfi_sections .debug_frame
15 .global __aeabi_i2d
16 .global __aeabi_dmul
17 .global __aeabi_dsub
18 .global __aeabi_dcmpgt
19 .global __aeabi_dcmplt
20 .global __aeabi_ddiv
21 .global __aeabi_dcmpeq
22 .global __aeabi_dadd
23 .section .text.RectWinFIR,"ax",%progbits
24 .align 1
25 .p2align 2,,3
26 .global RectWinFIR
27 .syntax unified
28 .thumb
29 .thumb_func
30 .fpu fpv4-sp-d16
32 RectWinFIR:
33 .LFB0:
34 .file 1 "Core/Src/FIRFilterCode.c"
1:Core/Src/FIRFilterCode.c ****
2:Core/Src/FIRFilterCode.c **** /*
3:Core/Src/FIRFilterCode.c **** By Daniel Klostermann
4:Core/Src/FIRFilterCode.c **** Iowa Hills Software, LLC IowaHills.com
5:Core/Src/FIRFilterCode.c **** If you find a problem, please leave a note at:
6:Core/Src/FIRFilterCode.c **** http://www.iowahills.com/feedbackcomments.html
7:Core/Src/FIRFilterCode.c **** May 1, 2016
8:Core/Src/FIRFilterCode.c ****
9:Core/Src/FIRFilterCode.c **** ShowMessage is a C++ Builder function, and it usage has been commented out.
10:Core/Src/FIRFilterCode.c **** If you are using C++ Builder, include vcl.h for ShowMessage.
11:Core/Src/FIRFilterCode.c **** Otherwise replace ShowMessage with something appropriate for yor compiler.
12:Core/Src/FIRFilterCode.c ****
13:Core/Src/FIRFilterCode.c **** RectWinFIR() generates the impulse response for a rectangular windowed low pass, high pass,
14:Core/Src/FIRFilterCode.c **** band pass, or notch filter. Then a window, such as the Kaiser, is applied to the FIR coefficients.
15:Core/Src/FIRFilterCode.c **** See the FilterKitMain.cpp file for an example on how to use this code.
16:Core/Src/FIRFilterCode.c ****
17:Core/Src/FIRFilterCode.c **** double FirCoeff[MAXNUMTAPS];
18:Core/Src/FIRFilterCode.c **** int NumTaps; NumTaps can be even or odd and < MAXNUMTAPS
19:Core/Src/FIRFilterCode.c **** TPassTypeName PassType; PassType is defined in the header file. firLPF, firHPF, firBPF
20:Core/Src/FIRFilterCode.c **** double OmegaC 0.0 < OmegaC < 1.0 The corner freq, or center freq if BPF or NOTCH
21:Core/Src/FIRFilterCode.c **** double BW 0.0 < BW < 1.0 The band width if BPF or NOTCH
22:Core/Src/FIRFilterCode.c **** */
23:Core/Src/FIRFilterCode.c ****
24:Core/Src/FIRFilterCode.c **** // http://www.iowahills.com/Example%20Code/WindowedFIRFilterWebCode.txt
ARM GAS /tmp/ccKC6A84.s page 2
25:Core/Src/FIRFilterCode.c ****
26:Core/Src/FIRFilterCode.c **** #include "FIRFilterCode.h"
27:Core/Src/FIRFilterCode.c ****
28:Core/Src/FIRFilterCode.c **** #include <math.h>
29:Core/Src/FIRFilterCode.c **** // #include <new.h> // For the new operator.
30:Core/Src/FIRFilterCode.c **** #include <stdbool.h>
31:Core/Src/FIRFilterCode.c **** #include <stdlib.h>
32:Core/Src/FIRFilterCode.c ****
33:Core/Src/FIRFilterCode.c **** // Rectangular Windowed FIR. The equations used here are developed in numerous textbooks.
34:Core/Src/FIRFilterCode.c **** void RectWinFIR(double *FirCoeff, int NumTaps, TFIRPassTypes PassType, double OmegaC, double BW){
35 .loc 1 34 0
36 .cfi_startproc
37 @ args = 0, pretend = 0, frame = 48
38 @ frame_needed = 0, uses_anonymous_args = 0
39 .LVL0:
40 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
41 .LCFI0:
42 .cfi_def_cfa_offset 36
43 .cfi_offset 4, -36
44 .cfi_offset 5, -32
45 .cfi_offset 6, -28
46 .cfi_offset 7, -24
47 .cfi_offset 8, -20
48 .cfi_offset 9, -16
49 .cfi_offset 10, -12
50 .cfi_offset 11, -8
51 .cfi_offset 14, -4
52 0004 2DED048B vpush.64 {d8, d9}
53 .LCFI1:
54 .cfi_def_cfa_offset 52
55 .cfi_offset 80, -52
56 .cfi_offset 81, -48
57 .cfi_offset 82, -44
58 .cfi_offset 83, -40
59 0008 8DB0 sub sp, sp, #52
60 .LCFI2:
61 .cfi_def_cfa_offset 104
62 .loc 1 34 0
63 000a 8146 mov r9, r0
64 000c 8B46 mov fp, r1
65 000e 8DED000B vstr.64 d0, [sp]
35:Core/Src/FIRFilterCode.c **** int j;
36:Core/Src/FIRFilterCode.c **** double Arg, OmegaLow, OmegaHigh;
37:Core/Src/FIRFilterCode.c ****
38:Core/Src/FIRFilterCode.c **** switch(PassType)
66 .loc 1 38 0
67 0012 042A cmp r2, #4
68 0014 18D8 bhi .L1
69 0016 DFE812F0 tbh [pc, r2, lsl #1]
70 .L4:
71 001a 1C00 .2byte (.L3-.L4)/2
72 001c 6700 .2byte (.L5-.L4)/2
73 001e CF00 .2byte (.L6-.L4)/2
74 0020 4F01 .2byte (.L7-.L4)/2
75 0022 0500 .2byte (.L8-.L4)/2
76 .p2align 1
77 .L8:
ARM GAS /tmp/ccKC6A84.s page 3
78 .LVL1:
39:Core/Src/FIRFilterCode.c **** {
40:Core/Src/FIRFilterCode.c **** case firLPF: // Low Pass
41:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
42:Core/Src/FIRFilterCode.c **** {
43:Core/Src/FIRFilterCode.c **** Arg = (double)j - (double)(NumTaps-1) / 2.0;
44:Core/Src/FIRFilterCode.c **** FirCoeff[j] = OmegaC * Sinc(OmegaC * Arg * M_PI);
45:Core/Src/FIRFilterCode.c **** }
46:Core/Src/FIRFilterCode.c **** break;
47:Core/Src/FIRFilterCode.c ****
48:Core/Src/FIRFilterCode.c **** case firHPF: // High Pass
49:Core/Src/FIRFilterCode.c **** if(NumTaps % 2 == 1) // Odd tap counts
50:Core/Src/FIRFilterCode.c **** {
51:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
52:Core/Src/FIRFilterCode.c **** {
53:Core/Src/FIRFilterCode.c **** Arg = (double)j - (double)(NumTaps-1) / 2.0;
54:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaC * Sinc(OmegaC * Arg * M_PI);
55:Core/Src/FIRFilterCode.c **** }
56:Core/Src/FIRFilterCode.c **** }
57:Core/Src/FIRFilterCode.c ****
58:Core/Src/FIRFilterCode.c **** else // Even tap counts
59:Core/Src/FIRFilterCode.c **** {
60:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
61:Core/Src/FIRFilterCode.c **** {
62:Core/Src/FIRFilterCode.c **** Arg = (double)j - (double)(NumTaps-1) / 2.0;
63:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
64:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
65:Core/Src/FIRFilterCode.c **** }
66:Core/Src/FIRFilterCode.c **** }
67:Core/Src/FIRFilterCode.c **** break;
68:Core/Src/FIRFilterCode.c ****
69:Core/Src/FIRFilterCode.c **** case firBPF: // Band Pass
70:Core/Src/FIRFilterCode.c **** OmegaLow = OmegaC - BW/2.0;
71:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
72:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
73:Core/Src/FIRFilterCode.c **** {
74:Core/Src/FIRFilterCode.c **** Arg = (double)j - (double)(NumTaps-1) / 2.0;
75:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
76:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
77:Core/Src/FIRFilterCode.c **** }
78:Core/Src/FIRFilterCode.c **** break;
79:Core/Src/FIRFilterCode.c ****
80:Core/Src/FIRFilterCode.c **** case firNOTCH: // Notch, if NumTaps is even, the response at Pi is attenuated.
81:Core/Src/FIRFilterCode.c **** OmegaLow = OmegaC - BW/2.0;
82:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
83:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
84:Core/Src/FIRFilterCode.c **** {
85:Core/Src/FIRFilterCode.c **** Arg = (double)j - (double)(NumTaps-1) / 2.0;
86:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaHigh * Sinc(OmegaHigh * Arg * M_PI) - OmegaLow * Sinc(
87:Core/Src/FIRFilterCode.c **** }
88:Core/Src/FIRFilterCode.c **** break;
89:Core/Src/FIRFilterCode.c ****
90:Core/Src/FIRFilterCode.c **** case firALLPASS: // All Pass, this is trivial, but it shows how an fir all pass (delay) can be d
91:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)FirCoeff[j] = 0.0;
79 .loc 1 91 0
80 0024 0029 cmp r1, #0
81 0026 03DD ble .L10
ARM GAS /tmp/ccKC6A84.s page 4
82 0028 CA00 lsls r2, r1, #3
83 .LVL2:
84 002a 0021 movs r1, #0
85 .LVL3:
86 002c FFF7FEFF bl memset
87 .LVL4:
88 .L10:
92:Core/Src/FIRFilterCode.c **** FirCoeff[(NumTaps-1) / 2] = 1.0;
89 .loc 1 92 0
90 0030 0BF1FF3B add fp, fp, #-1
91 .LVL5:
92 0034 0BEBDB7B add fp, fp, fp, lsr #31
93 .LVL6:
94 0038 CB4B ldr r3, .L72+40
95 003a 4FEA6B0B asr fp, fp, #1
96 003e 0022 movs r2, #0
97 0040 09EBCB09 add r9, r9, fp, lsl #3
98 .LVL7:
99 0044 C9E90023 strd r2, [r9]
100 .LVL8:
101 .L1:
93:Core/Src/FIRFilterCode.c **** break;
94:Core/Src/FIRFilterCode.c **** }
95:Core/Src/FIRFilterCode.c **** // Now use the FIRFilterWindow() function to reduce the sinc(x) effects.
96:Core/Src/FIRFilterCode.c **** }
102 .loc 1 96 0
103 0048 0DB0 add sp, sp, #52
104 .LCFI3:
105 .cfi_remember_state
106 .cfi_def_cfa_offset 52
107 @ sp needed
108 004a BDEC048B vldm sp!, {d8-d9}
109 .LCFI4:
110 .cfi_restore 82
111 .cfi_restore 83
112 .cfi_restore 80
113 .cfi_restore 81
114 .cfi_def_cfa_offset 36
115 004e BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
116 .LVL9:
117 .L3:
118 .LCFI5:
119 .cfi_restore_state
41:Core/Src/FIRFilterCode.c **** {
120 .loc 1 41 0
121 0052 0029 cmp r1, #0
122 0054 F8DD ble .L1
43:Core/Src/FIRFilterCode.c **** FirCoeff[j] = OmegaC * Sinc(OmegaC * Arg * M_PI);
123 .loc 1 43 0
124 0056 481E subs r0, r1, #1
125 .LVL10:
126 0058 FFF7FEFF bl __aeabi_i2d
127 .LVL11:
128 005c 0022 movs r2, #0
129 005e C34B ldr r3, .L72+44
130 0060 FFF7FEFF bl __aeabi_dmul
131 .LVL12:
ARM GAS /tmp/ccKC6A84.s page 5
132 0064 B6A3 adr r3, .L72
133 0066 D3E90023 ldrd r2, [r3]
134 006a 0446 mov r4, r0
135 006c 0D46 mov r5, r1
136 006e DDE90001 ldrd r0, [sp]
137 0072 FFF7FEFF bl __aeabi_dmul
138 .LVL13:
41:Core/Src/FIRFilterCode.c **** {
139 .loc 1 41 0
140 0076 4FF00008 mov r8, #0
141 007a CDE90201 strd r0, [sp, #8]
142 007e DA46 mov r10, fp
143 0080 0CE0 b .L15
144 .LVL14:
145 .L67:
146 .LBB17:
147 .LBB18:
97:Core/Src/FIRFilterCode.c ****
98:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
99:Core/Src/FIRFilterCode.c ****
100:Core/Src/FIRFilterCode.c **** // This gets used in numerous places above.
101:Core/Src/FIRFilterCode.c **** // If using Visual C, this (and the header file declaration) may need to be commented out.
102:Core/Src/FIRFilterCode.c **** double Sinc(double x)
103:Core/Src/FIRFilterCode.c **** {
104:Core/Src/FIRFilterCode.c **** if(x > -1.0E-5 && x < 1.0E-5)return(1.0);
148 .loc 1 104 0
149 0082 3046 mov r0, r6
150 0084 3946 mov r1, r7
151 0086 FFF7FEFF bl __aeabi_dcmplt
152 .LVL15:
153 008a F0B1 cbz r0, .L12
154 008c DDE90001 ldrd r0, [sp]
155 .L14:
156 .LVL16:
157 .LBE18:
158 .LBE17:
41:Core/Src/FIRFilterCode.c **** {
159 .loc 1 41 0
160 0090 08F10108 add r8, r8, #1
161 .LVL17:
162 0094 C245 cmp r10, r8
44:Core/Src/FIRFilterCode.c **** }
163 .loc 1 44 0
164 0096 E9E80201 strd r0, [r9], #8
41:Core/Src/FIRFilterCode.c **** {
165 .loc 1 41 0
166 009a D5D0 beq .L1
167 .LVL18:
168 .L15:
43:Core/Src/FIRFilterCode.c **** FirCoeff[j] = OmegaC * Sinc(OmegaC * Arg * M_PI);
169 .loc 1 43 0
170 009c 4046 mov r0, r8
171 009e FFF7FEFF bl __aeabi_i2d
172 .LVL19:
173 00a2 2246 mov r2, r4
174 00a4 2B46 mov r3, r5
175 00a6 FFF7FEFF bl __aeabi_dsub
ARM GAS /tmp/ccKC6A84.s page 6
176 .LVL20:
44:Core/Src/FIRFilterCode.c **** }
177 .loc 1 44 0
178 00aa DDE90223 ldrd r2, [sp, #8]
179 00ae FFF7FEFF bl __aeabi_dmul
180 .LVL21:
181 .LBB21:
182 .LBB19:
183 .loc 1 104 0
184 00b2 A5A3 adr r3, .L72+8
185 00b4 D3E90023 ldrd r2, [r3]
186 .LBE19:
187 .LBE21:
44:Core/Src/FIRFilterCode.c **** }
188 .loc 1 44 0
189 00b8 0646 mov r6, r0
190 00ba 0F46 mov r7, r1
191 .LVL22:
192 .LBB22:
193 .LBB20:
194 .loc 1 104 0
195 00bc FFF7FEFF bl __aeabi_dcmpgt
196 .LVL23:
197 00c0 A3A3 adr r3, .L72+16
198 00c2 D3E90023 ldrd r2, [r3]
199 00c6 0028 cmp r0, #0
200 00c8 DBD1 bne .L67
201 .L12:
105:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
202 .loc 1 105 0
203 00ca 47EC106B vmov d0, r6, r7
204 00ce FFF7FEFF bl sin
205 .LVL24:
206 00d2 3246 mov r2, r6
207 00d4 3B46 mov r3, r7
208 00d6 51EC100B vmov r0, r1, d0
209 00da FFF7FEFF bl __aeabi_ddiv
210 .LVL25:
211 00de DDE90023 ldrd r2, [sp]
212 00e2 FFF7FEFF bl __aeabi_dmul
213 .LVL26:
214 00e6 D3E7 b .L14
215 .LVL27:
216 .L5:
217 .LBE20:
218 .LBE22:
49:Core/Src/FIRFilterCode.c **** {
219 .loc 1 49 0
220 00e8 0029 cmp r1, #0
221 00ea 01F00103 and r3, r1, #1
222 00ee B8BF it lt
223 00f0 5B42 rsblt r3, r3, #0
224 00f2 012B cmp r3, #1
225 00f4 00F0D381 beq .L17
226 .LVL28:
60:Core/Src/FIRFilterCode.c **** {
227 .loc 1 60 0
ARM GAS /tmp/ccKC6A84.s page 7
228 00f8 0029 cmp r1, #0
229 00fa A5DD ble .L1
62:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
230 .loc 1 62 0
231 00fc 481E subs r0, r1, #1
232 .LVL29:
233 00fe FFF7FEFF bl __aeabi_i2d
234 .LVL30:
235 0102 0022 movs r2, #0
236 0104 994B ldr r3, .L72+44
237 0106 FFF7FEFF bl __aeabi_dmul
238 .LVL31:
239 010a 8DA3 adr r3, .L72
240 010c D3E90023 ldrd r2, [r3]
241 0110 0446 mov r4, r0
242 0112 0D46 mov r5, r1
243 0114 DDE90001 ldrd r0, [sp]
244 0118 FFF7FEFF bl __aeabi_dmul
245 .LVL32:
63:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
246 .loc 1 63 0
247 011c 9FED8E9B vldr.64 d9, .L72+24
248 0120 CDE90201 strd r0, [sp, #8]
60:Core/Src/FIRFilterCode.c **** {
249 .loc 1 60 0
250 0124 4FF00008 mov r8, #0
251 0128 DA46 mov r10, fp
252 012a 07E0 b .L29
253 .LVL33:
254 .L68:
63:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
255 .loc 1 63 0
256 012c 89ED009B vstr.64 d9, [r9]
257 .L28:
60:Core/Src/FIRFilterCode.c **** {
258 .loc 1 60 0
259 0130 08F10108 add r8, r8, #1
260 .LVL34:
261 0134 C245 cmp r10, r8
262 0136 09F10809 add r9, r9, #8
263 013a 85D0 beq .L1
264 .LVL35:
265 .L29:
62:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
266 .loc 1 62 0
267 013c 4046 mov r0, r8
268 013e FFF7FEFF bl __aeabi_i2d
269 .LVL36:
270 0142 2246 mov r2, r4
271 0144 2B46 mov r3, r5
272 0146 FFF7FEFF bl __aeabi_dsub
273 .LVL37:
63:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
274 .loc 1 63 0
275 014a 0022 movs r2, #0
276 014c 0023 movs r3, #0
62:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
ARM GAS /tmp/ccKC6A84.s page 8
277 .loc 1 62 0
278 014e 0646 mov r6, r0
279 0150 0F46 mov r7, r1
280 .LVL38:
63:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
281 .loc 1 63 0
282 0152 FFF7FEFF bl __aeabi_dcmpeq
283 .LVL39:
64:Core/Src/FIRFilterCode.c **** }
284 .loc 1 64 0
285 0156 3246 mov r2, r6
286 0158 3B46 mov r3, r7
63:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = cos(OmegaC * Arg * M_PI) / M_PI / Arg + cos(Arg * M_PI);
287 .loc 1 63 0
288 015a 0028 cmp r0, #0
289 015c E6D1 bne .L68
64:Core/Src/FIRFilterCode.c **** }
290 .loc 1 64 0
291 015e DDE90201 ldrd r0, [sp, #8]
292 0162 FFF7FEFF bl __aeabi_dmul
293 .LVL40:
294 0166 41EC100B vmov d0, r0, r1
295 016a FFF7FEFF bl cos
296 .LVL41:
297 016e 74A3 adr r3, .L72
298 0170 D3E90023 ldrd r2, [r3]
299 0174 B0EE408A vmov.f32 s16, s0
300 0178 F0EE608A vmov.f32 s17, s1
301 017c 3046 mov r0, r6
302 017e 3946 mov r1, r7
303 0180 FFF7FEFF bl __aeabi_dmul
304 .LVL42:
305 0184 41EC100B vmov d0, r0, r1
306 0188 FFF7FEFF bl cos
307 .LVL43:
308 018c 74A3 adr r3, .L72+32
309 018e D3E90023 ldrd r2, [r3]
310 0192 51EC180B vmov r0, r1, d8
311 0196 8DED000B vstr.64 d0, [sp]
312 019a FFF7FEFF bl __aeabi_dmul
313 .LVL44:
314 019e 3246 mov r2, r6
315 01a0 3B46 mov r3, r7
316 01a2 FFF7FEFF bl __aeabi_ddiv
317 .LVL45:
318 01a6 9DED000B vldr.64 d0, [sp]
319 01aa 53EC102B vmov r2, r3, d0
320 01ae FFF7FEFF bl __aeabi_dadd
321 .LVL46:
322 01b2 C9E90001 strd r0, [r9]
323 01b6 BBE7 b .L28
324 .LVL47:
325 .L6:
70:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
326 .loc 1 70 0
327 01b8 51EC110B vmov r0, r1, d1
328 .LVL48:
ARM GAS /tmp/ccKC6A84.s page 9
329 01bc 0022 movs r2, #0
330 .LVL49:
331 01be 6B4B ldr r3, .L72+44
332 01c0 FFF7FEFF bl __aeabi_dmul
333 .LVL50:
334 01c4 DDE90067 ldrd r6, [sp]
335 01c8 0446 mov r4, r0
336 01ca 0D46 mov r5, r1
337 01cc 0246 mov r2, r0
338 01ce 0B46 mov r3, r1
339 01d0 3046 mov r0, r6
340 01d2 3946 mov r1, r7
341 01d4 FFF7FEFF bl __aeabi_dsub
342 .LVL51:
71:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
343 .loc 1 71 0
344 01d8 3246 mov r2, r6
70:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
345 .loc 1 70 0
346 01da CDE90001 strd r0, [sp]
347 .LVL52:
71:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
348 .loc 1 71 0
349 01de 3B46 mov r3, r7
350 01e0 2046 mov r0, r4
351 01e2 2946 mov r1, r5
352 01e4 FFF7FEFF bl __aeabi_dadd
353 .LVL53:
72:Core/Src/FIRFilterCode.c **** {
354 .loc 1 72 0
355 01e8 BBF1000F cmp fp, #0
71:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
356 .loc 1 71 0
357 01ec 0446 mov r4, r0
358 01ee 0D46 mov r5, r1
359 .LVL54:
72:Core/Src/FIRFilterCode.c **** {
360 .loc 1 72 0
361 01f0 7FF72AAF ble .L1
74:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
362 .loc 1 74 0
363 01f4 0BF1FF30 add r0, fp, #-1
364 01f8 FFF7FEFF bl __aeabi_i2d
365 .LVL55:
366 01fc 0022 movs r2, #0
367 01fe 5B4B ldr r3, .L72+44
368 0200 FFF7FEFF bl __aeabi_dmul
369 .LVL56:
370 0204 4EA3 adr r3, .L72
371 0206 D3E90023 ldrd r2, [r3]
372 020a 0746 mov r7, r0
373 020c 8846 mov r8, r1
374 020e DDE90001 ldrd r0, [sp]
375 0212 FFF7FEFF bl __aeabi_dmul
376 .LVL57:
377 0216 4AA3 adr r3, .L72
378 0218 D3E90023 ldrd r2, [r3]
ARM GAS /tmp/ccKC6A84.s page 10
379 021c CDE90001 strd r0, [sp]
380 0220 2046 mov r0, r4
381 0222 2946 mov r1, r5
382 0224 FFF7FEFF bl __aeabi_dmul
383 .LVL58:
75:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
384 .loc 1 75 0
385 0228 9FED4B9B vldr.64 d9, .L72+24
386 022c CDE90201 strd r0, [sp, #8]
72:Core/Src/FIRFilterCode.c **** {
387 .loc 1 72 0
388 0230 0026 movs r6, #0
389 .LVL59:
390 0232 DA46 mov r10, fp
391 0234 07E0 b .L33
392 .LVL60:
393 .L69:
75:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
394 .loc 1 75 0
395 0236 89ED009B vstr.64 d9, [r9]
396 .L32:
72:Core/Src/FIRFilterCode.c **** {
397 .loc 1 72 0
398 023a 0136 adds r6, r6, #1
399 .LVL61:
400 023c 5645 cmp r6, r10
401 023e 09F10809 add r9, r9, #8
402 0242 3FF401AF beq .L1
403 .LVL62:
404 .L33:
74:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
405 .loc 1 74 0
406 0246 3046 mov r0, r6
407 0248 FFF7FEFF bl __aeabi_i2d
408 .LVL63:
409 024c 3A46 mov r2, r7
410 024e 4346 mov r3, r8
411 0250 FFF7FEFF bl __aeabi_dsub
412 .LVL64:
75:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
413 .loc 1 75 0
414 0254 0022 movs r2, #0
415 0256 0023 movs r3, #0
74:Core/Src/FIRFilterCode.c **** if(Arg == 0.0)FirCoeff[j] = 0.0;
416 .loc 1 74 0
417 0258 0446 mov r4, r0
418 025a 0D46 mov r5, r1
419 .LVL65:
75:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
420 .loc 1 75 0
421 025c FFF7FEFF bl __aeabi_dcmpeq
422 .LVL66:
76:Core/Src/FIRFilterCode.c **** }
423 .loc 1 76 0
424 0260 2246 mov r2, r4
425 0262 2B46 mov r3, r5
75:Core/Src/FIRFilterCode.c **** else FirCoeff[j] = ( cos(OmegaLow * Arg * M_PI) - cos(OmegaHigh * Arg * M_PI) ) / M_PI / Arg
ARM GAS /tmp/ccKC6A84.s page 11
426 .loc 1 75 0
427 0264 0028 cmp r0, #0
428 0266 E6D1 bne .L69
76:Core/Src/FIRFilterCode.c **** }
429 .loc 1 76 0
430 0268 DDE90001 ldrd r0, [sp]
431 026c FFF7FEFF bl __aeabi_dmul
432 .LVL67:
433 0270 41EC100B vmov d0, r0, r1
434 0274 FFF7FEFF bl cos
435 .LVL68:
436 0278 2246 mov r2, r4
437 027a 2B46 mov r3, r5
438 027c DDE90201 ldrd r0, [sp, #8]
439 0280 B0EE408A vmov.f32 s16, s0
440 0284 F0EE608A vmov.f32 s17, s1
441 0288 FFF7FEFF bl __aeabi_dmul
442 .LVL69:
443 028c 41EC100B vmov d0, r0, r1
444 0290 FFF7FEFF bl cos
445 .LVL70:
446 0294 51EC180B vmov r0, r1, d8
447 0298 53EC102B vmov r2, r3, d0
448 029c FFF7FEFF bl __aeabi_dsub
449 .LVL71:
450 02a0 2FA3 adr r3, .L72+32
451 02a2 D3E90023 ldrd r2, [r3]
452 02a6 FFF7FEFF bl __aeabi_dmul
453 .LVL72:
454 02aa 2246 mov r2, r4
455 02ac 2B46 mov r3, r5
456 02ae FFF7FEFF bl __aeabi_ddiv
457 .LVL73:
458 02b2 C9E90001 strd r0, [r9]
459 02b6 C0E7 b .L32
460 .LVL74:
461 .L7:
81:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
462 .loc 1 81 0
463 02b8 51EC110B vmov r0, r1, d1
464 .LVL75:
465 02bc 0022 movs r2, #0
466 .LVL76:
467 02be 2B4B ldr r3, .L72+44
468 02c0 FFF7FEFF bl __aeabi_dmul
469 .LVL77:
470 02c4 DDE90067 ldrd r6, [sp]
471 02c8 0446 mov r4, r0
472 02ca 0D46 mov r5, r1
473 02cc 0246 mov r2, r0
474 02ce 0B46 mov r3, r1
475 02d0 3046 mov r0, r6
476 02d2 3946 mov r1, r7
477 02d4 FFF7FEFF bl __aeabi_dsub
478 .LVL78:
82:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
479 .loc 1 82 0
ARM GAS /tmp/ccKC6A84.s page 12
480 02d8 3246 mov r2, r6
81:Core/Src/FIRFilterCode.c **** OmegaHigh = OmegaC + BW/2.0;
481 .loc 1 81 0
482 02da CDE90201 strd r0, [sp, #8]
483 .LVL79:
82:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
484 .loc 1 82 0
485 02de 3B46 mov r3, r7
486 02e0 2046 mov r0, r4
487 02e2 2946 mov r1, r5
488 02e4 FFF7FEFF bl __aeabi_dadd
489 .LVL80:
83:Core/Src/FIRFilterCode.c **** {
490 .loc 1 83 0
491 02e8 BBF1000F cmp fp, #0
82:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
492 .loc 1 82 0
493 02ec 0446 mov r4, r0
494 02ee 0D46 mov r5, r1
495 02f0 CDE90445 strd r4, [sp, #16]
496 .LVL81:
83:Core/Src/FIRFilterCode.c **** {
497 .loc 1 83 0
498 02f4 7FF7A8AE ble .L1
85:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaHigh * Sinc(OmegaHigh * Arg * M_PI) - OmegaLow * Sinc(
499 .loc 1 85 0
500 02f8 0BF1FF30 add r0, fp, #-1
501 02fc FFF7FEFF bl __aeabi_i2d
502 .LVL82:
503 0300 0022 movs r2, #0
504 0302 1A4B ldr r3, .L72+44
505 0304 FFF7FEFF bl __aeabi_dmul
506 .LVL83:
507 0308 0DA3 adr r3, .L72
508 030a D3E90023 ldrd r2, [r3]
509 030e CDE90601 strd r0, [sp, #24]
510 0312 2046 mov r0, r4
511 0314 2946 mov r1, r5
512 0316 FFF7FEFF bl __aeabi_dmul
513 .LVL84:
514 031a 09A3 adr r3, .L72
515 031c D3E90023 ldrd r2, [r3]
516 0320 CDE90801 strd r0, [sp, #32]
517 0324 DDE90201 ldrd r0, [sp, #8]
518 0328 FFF7FEFF bl __aeabi_dmul
519 .LVL85:
83:Core/Src/FIRFilterCode.c **** {
520 .loc 1 83 0
521 032c 4FF0000A mov r10, #0
522 0330 CDE90A01 strd r0, [sp, #40]
523 0334 CDF80090 str r9, [sp]
524 .LVL86:
525 0338 6BE0 b .L43
526 .L73:
527 033a 00BFAFF3 .align 3
527 0080
528 .L72:
ARM GAS /tmp/ccKC6A84.s page 13
529 0340 182D4454 .word 1413754136
530 0344 FB210940 .word 1074340347
531 0348 F168E388 .word 2296604913
532 034c B5F8E4BE .word -1092290379
533 0350 F168E388 .word 2296604913
534 0354 B5F8E43E .word 1055193269
535 0358 00000000 .word 0
536 035c 00000000 .word 0
537 0360 83C8C96D .word 1841940611
538 0364 305FD43F .word 1070882608
539 0368 0000F03F .word 1072693248
540 036c 0000E03F .word 1071644672
541 .LVL87:
542 .L70:
543 .LBB23:
544 .LBB24:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
545 .loc 1 104 0
546 0370 8FA3 adr r3, .L74+8
547 0372 D3E90023 ldrd r2, [r3]
548 0376 2046 mov r0, r4
549 0378 2946 mov r1, r5
550 037a FFF7FEFF bl __aeabi_dcmplt
551 .LVL88:
552 037e 0028 cmp r0, #0
553 0380 5ED0 beq .L34
554 0382 8F4F ldr r7, .L74+24
555 0384 0026 movs r6, #0
556 .L36:
557 .LVL89:
558 .LBE24:
559 .LBE23:
86:Core/Src/FIRFilterCode.c **** }
560 .loc 1 86 0
561 0386 4246 mov r2, r8
562 0388 4B46 mov r3, r9
563 038a DDE90801 ldrd r0, [sp, #32]
564 038e FFF7FEFF bl __aeabi_dmul
565 .LVL90:
566 .LBB27:
567 .LBB28:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
568 .loc 1 104 0
569 0392 85A3 adr r3, .L74
570 0394 D3E90023 ldrd r2, [r3]
571 .LBE28:
572 .LBE27:
86:Core/Src/FIRFilterCode.c **** }
573 .loc 1 86 0
574 0398 0446 mov r4, r0
575 039a 0D46 mov r5, r1
576 .LVL91:
577 .LBB31:
578 .LBB29:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
579 .loc 1 104 0
580 039c FFF7FEFF bl __aeabi_dcmpgt
ARM GAS /tmp/ccKC6A84.s page 14
581 .LVL92:
582 03a0 0028 cmp r0, #0
583 03a2 6BD0 beq .L37
584 03a4 82A3 adr r3, .L74+8
585 03a6 D3E90023 ldrd r2, [r3]
586 03aa 2046 mov r0, r4
587 03ac 2946 mov r1, r5
588 03ae FFF7FEFF bl __aeabi_dcmplt
589 .LVL93:
590 03b2 0028 cmp r0, #0
591 03b4 62D0 beq .L37
592 03b6 DDE90423 ldrd r2, [sp, #16]
593 .L39:
594 .LVL94:
595 .LBE29:
596 .LBE31:
86:Core/Src/FIRFilterCode.c **** }
597 .loc 1 86 0
598 03ba 3046 mov r0, r6
599 03bc 3946 mov r1, r7
600 03be FFF7FEFF bl __aeabi_dsub
601 .LVL95:
602 03c2 4246 mov r2, r8
603 03c4 4B46 mov r3, r9
604 03c6 0646 mov r6, r0
605 03c8 0F46 mov r7, r1
606 03ca DDE90A01 ldrd r0, [sp, #40]
607 03ce FFF7FEFF bl __aeabi_dmul
608 .LVL96:
609 .LBB32:
610 .LBB33:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
611 .loc 1 104 0
612 03d2 75A3 adr r3, .L74
613 03d4 D3E90023 ldrd r2, [r3]
614 .LBE33:
615 .LBE32:
86:Core/Src/FIRFilterCode.c **** }
616 .loc 1 86 0
617 03d8 0446 mov r4, r0
618 03da 0D46 mov r5, r1
619 .LVL97:
620 .LBB36:
621 .LBB34:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
622 .loc 1 104 0
623 03dc FFF7FEFF bl __aeabi_dcmpgt
624 .LVL98:
625 03e0 0028 cmp r0, #0
626 03e2 3AD0 beq .L40
627 03e4 72A3 adr r3, .L74+8
628 03e6 D3E90023 ldrd r2, [r3]
629 03ea 2046 mov r0, r4
630 03ec 2946 mov r1, r5
631 03ee FFF7FEFF bl __aeabi_dcmplt
632 .LVL99:
633 03f2 90B3 cbz r0, .L40
ARM GAS /tmp/ccKC6A84.s page 15
634 03f4 DDE90223 ldrd r2, [sp, #8]
635 .L42:
636 .LVL100:
637 .LBE34:
638 .LBE36:
86:Core/Src/FIRFilterCode.c **** }
639 .loc 1 86 0
640 03f8 3046 mov r0, r6
641 03fa 3946 mov r1, r7
642 03fc FFF7FEFF bl __aeabi_dsub
643 .LVL101:
644 0400 009B ldr r3, [sp]
645 0402 E3E80201 strd r0, [r3], #8
83:Core/Src/FIRFilterCode.c **** {
646 .loc 1 83 0
647 0406 0AF1010A add r10, r10, #1
648 .LVL102:
649 040a D345 cmp fp, r10
86:Core/Src/FIRFilterCode.c **** }
650 .loc 1 86 0
651 040c 0093 str r3, [sp]
83:Core/Src/FIRFilterCode.c **** {
652 .loc 1 83 0
653 040e 3FF41BAE beq .L1
654 .LVL103:
655 .L43:
85:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaHigh * Sinc(OmegaHigh * Arg * M_PI) - OmegaLow * Sinc(
656 .loc 1 85 0
657 0412 5046 mov r0, r10
658 0414 FFF7FEFF bl __aeabi_i2d
659 .LVL104:
660 0418 DDE90623 ldrd r2, [sp, #24]
661 041c FFF7FEFF bl __aeabi_dsub
662 .LVL105:
86:Core/Src/FIRFilterCode.c **** }
663 .loc 1 86 0
664 0420 65A3 adr r3, .L74+16
665 0422 D3E90023 ldrd r2, [r3]
85:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaHigh * Sinc(OmegaHigh * Arg * M_PI) - OmegaLow * Sinc(
666 .loc 1 85 0
667 0426 8046 mov r8, r0
668 0428 8946 mov r9, r1
669 .LVL106:
86:Core/Src/FIRFilterCode.c **** }
670 .loc 1 86 0
671 042a FFF7FEFF bl __aeabi_dmul
672 .LVL107:
673 .LBB37:
674 .LBB25:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
675 .loc 1 104 0
676 042e 5EA3 adr r3, .L74
677 0430 D3E90023 ldrd r2, [r3]
678 .LBE25:
679 .LBE37:
86:Core/Src/FIRFilterCode.c **** }
680 .loc 1 86 0
ARM GAS /tmp/ccKC6A84.s page 16
681 0434 0446 mov r4, r0
682 0436 0D46 mov r5, r1
683 .LVL108:
684 .LBB38:
685 .LBB26:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
686 .loc 1 104 0
687 0438 FFF7FEFF bl __aeabi_dcmpgt
688 .LVL109:
689 043c 0028 cmp r0, #0
690 043e 97D1 bne .L70
691 .L34:
692 .loc 1 105 0
693 0440 45EC104B vmov d0, r4, r5
694 0444 FFF7FEFF bl sin
695 .LVL110:
696 0448 2246 mov r2, r4
697 044a 2B46 mov r3, r5
698 044c 51EC100B vmov r0, r1, d0
699 0450 FFF7FEFF bl __aeabi_ddiv
700 .LVL111:
701 0454 0646 mov r6, r0
702 0456 0F46 mov r7, r1
703 0458 95E7 b .L36
704 .LVL112:
705 .L40:
706 .LBE26:
707 .LBE38:
708 .LBB39:
709 .LBB35:
710 045a 45EC104B vmov d0, r4, r5
711 045e FFF7FEFF bl sin
712 .LVL113:
713 0462 2246 mov r2, r4
714 0464 2B46 mov r3, r5
715 0466 51EC100B vmov r0, r1, d0
716 046a FFF7FEFF bl __aeabi_ddiv
717 .LVL114:
718 046e DDE90223 ldrd r2, [sp, #8]
719 0472 FFF7FEFF bl __aeabi_dmul
720 .LVL115:
721 0476 0246 mov r2, r0
722 0478 0B46 mov r3, r1
723 047a BDE7 b .L42
724 .LVL116:
725 .L37:
726 .LBE35:
727 .LBE39:
728 .LBB40:
729 .LBB30:
730 047c 45EC104B vmov d0, r4, r5
731 0480 FFF7FEFF bl sin
732 .LVL117:
733 0484 2246 mov r2, r4
734 0486 2B46 mov r3, r5
735 0488 51EC100B vmov r0, r1, d0
736 048c FFF7FEFF bl __aeabi_ddiv
ARM GAS /tmp/ccKC6A84.s page 17
737 .LVL118:
738 0490 DDE90423 ldrd r2, [sp, #16]
739 0494 FFF7FEFF bl __aeabi_dmul
740 .LVL119:
741 0498 0246 mov r2, r0
742 049a 0B46 mov r3, r1
743 049c 8DE7 b .L39
744 .LVL120:
745 .L17:
746 .LBE30:
747 .LBE40:
51:Core/Src/FIRFilterCode.c **** {
748 .loc 1 51 0
749 049e 0029 cmp r1, #0
750 04a0 7FF7D2AD ble .L1
53:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaC * Sinc(OmegaC * Arg * M_PI);
751 .loc 1 53 0
752 04a4 481E subs r0, r1, #1
753 .LVL121:
754 04a6 FFF7FEFF bl __aeabi_i2d
755 .LVL122:
756 04aa 0022 movs r2, #0
757 04ac 454B ldr r3, .L74+28
758 04ae FFF7FEFF bl __aeabi_dmul
759 .LVL123:
760 04b2 41A3 adr r3, .L74+16
761 04b4 D3E90023 ldrd r2, [r3]
762 04b8 CDE90201 strd r0, [sp, #8]
763 04bc DDE90001 ldrd r0, [sp]
764 04c0 FFF7FEFF bl __aeabi_dmul
765 .LVL124:
51:Core/Src/FIRFilterCode.c **** {
766 .loc 1 51 0
767 04c4 4FF00008 mov r8, #0
768 04c8 CDE90401 strd r0, [sp, #16]
769 04cc CDF818B0 str fp, [sp, #24]
770 04d0 2FE0 b .L25
771 .LVL125:
772 .L71:
773 .LBB41:
774 .LBB42:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
775 .loc 1 104 0
776 04d2 2046 mov r0, r4
777 04d4 2946 mov r1, r5
778 04d6 FFF7FEFF bl __aeabi_dcmplt
779 .LVL126:
780 04da 0028 cmp r0, #0
781 04dc 43D0 beq .L19
782 04de DFF8E0B0 ldr fp, .L74+24
783 04e2 4FF0000A mov r10, #0
784 .L21:
785 .LVL127:
786 .LBE42:
787 .LBE41:
54:Core/Src/FIRFilterCode.c **** }
788 .loc 1 54 0
ARM GAS /tmp/ccKC6A84.s page 18
789 04e6 DDE90423 ldrd r2, [sp, #16]
790 04ea 3046 mov r0, r6
791 04ec 3946 mov r1, r7
792 04ee FFF7FEFF bl __aeabi_dmul
793 .LVL128:
794 .LBB45:
795 .LBB46:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
796 .loc 1 104 0
797 04f2 2DA3 adr r3, .L74
798 04f4 D3E90023 ldrd r2, [r3]
799 .LBE46:
800 .LBE45:
54:Core/Src/FIRFilterCode.c **** }
801 .loc 1 54 0
802 04f8 0446 mov r4, r0
803 04fa 0D46 mov r5, r1
804 .LVL129:
805 .LBB49:
806 .LBB47:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
807 .loc 1 104 0
808 04fc FFF7FEFF bl __aeabi_dcmpgt
809 .LVL130:
810 0500 2BA3 adr r3, .L74+8
811 0502 D3E90023 ldrd r2, [r3]
812 0506 0028 cmp r0, #0
813 0508 3AD0 beq .L22
814 050a 2046 mov r0, r4
815 050c 2946 mov r1, r5
816 050e FFF7FEFF bl __aeabi_dcmplt
817 .LVL131:
818 0512 0028 cmp r0, #0
819 0514 34D0 beq .L22
820 0516 DDE90023 ldrd r2, [sp]
821 .L24:
822 .LVL132:
823 .LBE47:
824 .LBE49:
54:Core/Src/FIRFilterCode.c **** }
825 .loc 1 54 0
826 051a 5046 mov r0, r10
827 051c 5946 mov r1, fp
828 051e FFF7FEFF bl __aeabi_dsub
829 .LVL133:
51:Core/Src/FIRFilterCode.c **** {
830 .loc 1 51 0
831 0522 069B ldr r3, [sp, #24]
832 0524 08F10108 add r8, r8, #1
833 .LVL134:
834 0528 9845 cmp r8, r3
54:Core/Src/FIRFilterCode.c **** }
835 .loc 1 54 0
836 052a E9E80201 strd r0, [r9], #8
51:Core/Src/FIRFilterCode.c **** {
837 .loc 1 51 0
838 052e 3FF48BAD beq .L1
ARM GAS /tmp/ccKC6A84.s page 19
839 .LVL135:
840 .L25:
53:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaC * Sinc(OmegaC * Arg * M_PI);
841 .loc 1 53 0
842 0532 4046 mov r0, r8
843 0534 FFF7FEFF bl __aeabi_i2d
844 .LVL136:
845 0538 DDE90223 ldrd r2, [sp, #8]
846 053c FFF7FEFF bl __aeabi_dsub
847 .LVL137:
54:Core/Src/FIRFilterCode.c **** }
848 .loc 1 54 0
849 0540 1DA3 adr r3, .L74+16
850 0542 D3E90023 ldrd r2, [r3]
53:Core/Src/FIRFilterCode.c **** FirCoeff[j] = Sinc(Arg * M_PI) - OmegaC * Sinc(OmegaC * Arg * M_PI);
851 .loc 1 53 0
852 0546 0646 mov r6, r0
853 0548 0F46 mov r7, r1
854 .LVL138:
54:Core/Src/FIRFilterCode.c **** }
855 .loc 1 54 0
856 054a FFF7FEFF bl __aeabi_dmul
857 .LVL139:
858 .LBB50:
859 .LBB43:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
860 .loc 1 104 0
861 054e 16A3 adr r3, .L74
862 0550 D3E90023 ldrd r2, [r3]
863 .LBE43:
864 .LBE50:
54:Core/Src/FIRFilterCode.c **** }
865 .loc 1 54 0
866 0554 0446 mov r4, r0
867 0556 0D46 mov r5, r1
868 .LVL140:
869 .LBB51:
870 .LBB44:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
871 .loc 1 104 0
872 0558 FFF7FEFF bl __aeabi_dcmpgt
873 .LVL141:
874 055c 14A3 adr r3, .L74+8
875 055e D3E90023 ldrd r2, [r3]
876 0562 0028 cmp r0, #0
877 0564 B5D1 bne .L71
878 .L19:
879 .loc 1 105 0
880 0566 45EC104B vmov d0, r4, r5
881 056a FFF7FEFF bl sin
882 .LVL142:
883 056e 2246 mov r2, r4
884 0570 2B46 mov r3, r5
885 0572 51EC100B vmov r0, r1, d0
886 0576 FFF7FEFF bl __aeabi_ddiv
887 .LVL143:
888 057a 8246 mov r10, r0
ARM GAS /tmp/ccKC6A84.s page 20
889 057c 8B46 mov fp, r1
890 057e B2E7 b .L21
891 .LVL144:
892 .L22:
893 .LBE44:
894 .LBE51:
895 .LBB52:
896 .LBB48:
897 0580 45EC104B vmov d0, r4, r5
898 0584 FFF7FEFF bl sin
899 .LVL145:
900 0588 2246 mov r2, r4
901 058a 2B46 mov r3, r5
902 058c 51EC100B vmov r0, r1, d0
903 0590 FFF7FEFF bl __aeabi_ddiv
904 .LVL146:
905 0594 DDE90023 ldrd r2, [sp]
906 0598 FFF7FEFF bl __aeabi_dmul
907 .LVL147:
908 059c 0246 mov r2, r0
909 059e 0B46 mov r3, r1
910 05a0 BBE7 b .L24
911 .L75:
912 05a2 00BFAFF3 .align 3
912 0080
913 .L74:
914 05a8 F168E388 .word 2296604913
915 05ac B5F8E4BE .word -1092290379
916 05b0 F168E388 .word 2296604913
917 05b4 B5F8E43E .word 1055193269
918 05b8 182D4454 .word 1413754136
919 05bc FB210940 .word 1074340347
920 05c0 0000F03F .word 1072693248
921 05c4 0000E03F .word 1071644672
922 .LBE48:
923 .LBE52:
924 .cfi_endproc
925 .LFE0:
927 .section .text.Sinc,"ax",%progbits
928 .align 1
929 .p2align 2,,3
930 .global Sinc
931 .syntax unified
932 .thumb
933 .thumb_func
934 .fpu fpv4-sp-d16
936 Sinc:
937 .LFB1:
103:Core/Src/FIRFilterCode.c **** if(x > -1.0E-5 && x < 1.0E-5)return(1.0);
938 .loc 1 103 0
939 .cfi_startproc
940 @ args = 0, pretend = 0, frame = 0
941 @ frame_needed = 0, uses_anonymous_args = 0
942 .LVL148:
943 0000 38B5 push {r3, r4, r5, lr}
944 .LCFI6:
945 .cfi_def_cfa_offset 16
ARM GAS /tmp/ccKC6A84.s page 21
946 .cfi_offset 3, -16
947 .cfi_offset 4, -12
948 .cfi_offset 5, -8
949 .cfi_offset 14, -4
103:Core/Src/FIRFilterCode.c **** if(x > -1.0E-5 && x < 1.0E-5)return(1.0);
950 .loc 1 103 0
951 0002 55EC104B vmov r4, r5, d0
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
952 .loc 1 104 0
953 0006 12A3 adr r3, .L83+8
954 0008 D3E90023 ldrd r2, [r3]
955 000c 10EE100A vmov r0, s0 @ int
956 0010 2946 mov r1, r5
957 0012 FFF7FEFF bl __aeabi_dcmpgt
958 .LVL149:
959 0016 38B1 cbz r0, .L77
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
960 .loc 1 104 0 is_stmt 0 discriminator 1
961 0018 0FA3 adr r3, .L83+16
962 001a D3E90023 ldrd r2, [r3]
963 001e 2046 mov r0, r4
964 0020 2946 mov r1, r5
965 0022 FFF7FEFF bl __aeabi_dcmplt
966 .LVL150:
967 0026 60B9 cbnz r0, .L80
968 .L77:
969 .loc 1 105 0 is_stmt 1
970 0028 45EC104B vmov d0, r4, r5
971 002c FFF7FEFF bl sin
972 .LVL151:
973 0030 2246 mov r2, r4
974 0032 2B46 mov r3, r5
975 0034 51EC100B vmov r0, r1, d0
976 0038 FFF7FEFF bl __aeabi_ddiv
977 .LVL152:
978 003c 41EC100B vmov d0, r0, r1
106:Core/Src/FIRFilterCode.c **** }
979 .loc 1 106 0
980 0040 38BD pop {r3, r4, r5, pc}
981 .LVL153:
982 .L80:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
983 .loc 1 104 0
984 0042 9FED010B vldr.64 d0, .L83
985 .loc 1 106 0
986 0046 38BD pop {r3, r4, r5, pc}
987 .LVL154:
988 .L84:
989 .align 3
990 .L83:
991 0048 00000000 .word 0
992 004c 0000F03F .word 1072693248
993 0050 F168E388 .word 2296604913
994 0054 B5F8E4BE .word -1092290379
995 0058 F168E388 .word 2296604913
996 005c B5F8E43E .word 1055193269
997 .cfi_endproc
ARM GAS /tmp/ccKC6A84.s page 22
998 .LFE1:
1000 .section .text.Bessel,"ax",%progbits
1001 .align 1
1002 .p2align 2,,3
1003 .global Bessel
1004 .syntax unified
1005 .thumb
1006 .thumb_func
1007 .fpu fpv4-sp-d16
1009 Bessel:
1010 .LFB2:
107:Core/Src/FIRFilterCode.c ****
108:Core/Src/FIRFilterCode.c **** // This gets used with the Kaiser window.
109:Core/Src/FIRFilterCode.c **** double Bessel(double x)
110:Core/Src/FIRFilterCode.c **** {
1011 .loc 1 110 0
1012 .cfi_startproc
1013 @ args = 0, pretend = 0, frame = 0
1014 @ frame_needed = 0, uses_anonymous_args = 0
1015 .LVL155:
1016 0000 2DE9F047 push {r4, r5, r6, r7, r8, r9, r10, lr}
1017 .LCFI7:
1018 .cfi_def_cfa_offset 32
1019 .cfi_offset 4, -32
1020 .cfi_offset 5, -28
1021 .cfi_offset 6, -24
1022 .cfi_offset 7, -20
1023 .cfi_offset 8, -16
1024 .cfi_offset 9, -12
1025 .cfi_offset 10, -8
1026 .cfi_offset 14, -4
111:Core/Src/FIRFilterCode.c **** double Sum=0.0, XtoIpower;
112:Core/Src/FIRFilterCode.c **** int i, j, Factorial;
113:Core/Src/FIRFilterCode.c **** for(i=1; i<10; i++)
114:Core/Src/FIRFilterCode.c **** {
115:Core/Src/FIRFilterCode.c **** XtoIpower = pow(x/2.0, (double)i);
1027 .loc 1 115 0
1028 0004 0022 movs r2, #0
110:Core/Src/FIRFilterCode.c **** double Sum=0.0, XtoIpower;
1029 .loc 1 110 0
1030 0006 2DED028B vpush.64 {d8}
1031 .LCFI8:
1032 .cfi_def_cfa_offset 40
1033 .cfi_offset 80, -40
1034 .cfi_offset 81, -36
1035 .loc 1 115 0
1036 000a 534B ldr r3, .L109+56
1037 000c 524F ldr r7, .L109+56
1038 000e 51EC100B vmov r0, r1, d0
1039 0012 FFF7FEFF bl __aeabi_dmul
1040 .LVL156:
116:Core/Src/FIRFilterCode.c **** Factorial = 1;
117:Core/Src/FIRFilterCode.c **** for(j=1; j<=i; j++)Factorial *= j;
118:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1041 .loc 1 118 0
1042 0016 42A5 adr r5, .L109
1043 0018 D5E90045 ldrd r4, [r5]
ARM GAS /tmp/ccKC6A84.s page 23
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1044 .loc 1 115 0
1045 001c 41EC180B vmov d8, r0, r1
1046 0020 4FF0010A mov r10, #1
111:Core/Src/FIRFilterCode.c **** int i, j, Factorial;
1047 .loc 1 111 0
1048 0024 4FF00008 mov r8, #0
1049 0028 4FF00009 mov r9, #0
1050 002c 0026 movs r6, #0
1051 .LVL157:
1052 .L86:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1053 .loc 1 115 0
1054 002e 5046 mov r0, r10
1055 0030 FFF7FEFF bl __aeabi_i2d
1056 .LVL158:
1057 0034 B0EE480A vmov.f32 s0, s16
1058 0038 F0EE680A vmov.f32 s1, s17
1059 003c 41EC110B vmov d1, r0, r1
1060 0040 FFF7FEFF bl pow
1061 .LVL159:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1062 .loc 1 117 0
1063 0044 BAF1010F cmp r10, #1
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1064 .loc 1 115 0
1065 0048 51EC100B vmov r0, r1, d0
1066 .LVL160:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1067 .loc 1 117 0
1068 004c 32D0 beq .L87
1069 .LVL161:
1070 004e BAF1020F cmp r10, #2
1071 0052 45D0 beq .L102
1072 .LVL162:
1073 0054 BAF1030F cmp r10, #3
1074 0058 47D0 beq .L103
1075 .LVL163:
1076 005a BAF1040F cmp r10, #4
1077 005e 4AD0 beq .L104
1078 .LVL164:
1079 0060 BAF1050F cmp r10, #5
1080 0064 4DD0 beq .L105
1081 .LVL165:
1082 0066 BAF1060F cmp r10, #6
1083 006a 1ED0 beq .L106
1084 .LVL166:
1085 006c BAF1070F cmp r10, #7
1086 0070 4DD0 beq .L107
1087 .LVL167:
1088 0072 BAF1090F cmp r10, #9
1089 0076 2CD1 bne .L108
1090 .loc 1 118 0
1091 0078 2BA3 adr r3, .L109+8
1092 007a D3E90023 ldrd r2, [r3]
1093 007e FFF7FEFF bl __aeabi_dmul
1094 .LVL168:
ARM GAS /tmp/ccKC6A84.s page 24
1095 0082 0246 mov r2, r0
1096 0084 0B46 mov r3, r1
1097 0086 FFF7FEFF bl __aeabi_dmul
1098 .LVL169:
1099 008a 0246 mov r2, r0
1100 008c 0B46 mov r3, r1
1101 008e 4046 mov r0, r8
1102 0090 4946 mov r1, r9
1103 0092 FFF7FEFF bl __aeabi_dadd
1104 .LVL170:
119:Core/Src/FIRFilterCode.c **** }
120:Core/Src/FIRFilterCode.c **** return(1.0 + Sum);
1105 .loc 1 120 0
1106 0096 0022 movs r2, #0
1107 0098 304B ldr r3, .L109+60
1108 009a FFF7FEFF bl __aeabi_dadd
1109 .LVL171:
121:Core/Src/FIRFilterCode.c **** }
1110 .loc 1 121 0
1111 009e BDEC028B vldm sp!, {d8}
1112 .LCFI9:
1113 .cfi_remember_state
1114 .cfi_restore 80
1115 .cfi_restore 81
1116 .cfi_def_cfa_offset 32
1117 00a2 41EC100B vmov d0, r0, r1
1118 00a6 BDE8F087 pop {r4, r5, r6, r7, r8, r9, r10, pc}
1119 .LVL172:
1120 .L106:
1121 .LCFI10:
1122 .cfi_restore_state
1123 00aa 21A3 adr r3, .L109+16
1124 00ac D3E90023 ldrd r2, [r3]
1125 00b0 FFF7FEFF bl __aeabi_dmul
1126 .LVL173:
1127 .L87:
118:Core/Src/FIRFilterCode.c **** }
1128 .loc 1 118 0
1129 00b4 0246 mov r2, r0
1130 00b6 0B46 mov r3, r1
1131 .L101:
1132 00b8 FFF7FEFF bl __aeabi_dmul
1133 .LVL174:
1134 00bc 0246 mov r2, r0
1135 00be 0B46 mov r3, r1
1136 00c0 4046 mov r0, r8
1137 00c2 4946 mov r1, r9
1138 00c4 FFF7FEFF bl __aeabi_dadd
1139 .LVL175:
1140 00c8 0AF1010A add r10, r10, #1
1141 .LVL176:
1142 00cc 8046 mov r8, r0
1143 .LVL177:
1144 00ce 8946 mov r9, r1
1145 .LVL178:
1146 00d0 ADE7 b .L86
1147 .LVL179:
ARM GAS /tmp/ccKC6A84.s page 25
1148 .L108:
118:Core/Src/FIRFilterCode.c **** }
1149 .loc 1 118 0 is_stmt 0 discriminator 2
1150 00d2 2246 mov r2, r4
1151 00d4 2B46 mov r3, r5
1152 00d6 FFF7FEFF bl __aeabi_dmul
1153 .LVL180:
1154 00da 0246 mov r2, r0
1155 00dc 0B46 mov r3, r1
1156 00de EBE7 b .L101
1157 .LVL181:
1158 .L102:
1159 00e0 3246 mov r2, r6
1160 00e2 3B46 mov r3, r7
1161 00e4 FFF7FEFF bl __aeabi_dmul
1162 .LVL182:
1163 00e8 E4E7 b .L87
1164 .LVL183:
1165 .L103:
1166 00ea 13A3 adr r3, .L109+24
1167 00ec D3E90023 ldrd r2, [r3]
1168 00f0 FFF7FEFF bl __aeabi_dmul
1169 .LVL184:
1170 00f4 DEE7 b .L87
1171 .LVL185:
1172 .L104:
1173 00f6 12A3 adr r3, .L109+32
1174 00f8 D3E90023 ldrd r2, [r3]
1175 00fc FFF7FEFF bl __aeabi_dmul
1176 .LVL186:
1177 0100 D8E7 b .L87
1178 .LVL187:
1179 .L105:
1180 0102 11A3 adr r3, .L109+40
1181 0104 D3E90023 ldrd r2, [r3]
1182 0108 FFF7FEFF bl __aeabi_dmul
1183 .LVL188:
1184 010c D2E7 b .L87
1185 .LVL189:
1186 .L107:
1187 010e 10A3 adr r3, .L109+48
1188 0110 D3E90023 ldrd r2, [r3]
1189 0114 FFF7FEFF bl __aeabi_dmul
1190 .LVL190:
1191 0118 CCE7 b .L87
1192 .L110:
1193 011a 00BFAFF3 .align 3
1193 0080
1194 .L109:
1195 0120 1AA0011A .word 436314138
1196 0124 A001FA3E .word 1056571808
1197 0128 34C756A5 .word 2773927732
1198 012c E31DC73E .word 1053236707
1199 0130 176CC116 .word 381774871
1200 0134 6CC1563F .word 1062650220
1201 0138 55555555 .word 1431655765
1202 013c 5555C53F .word 1069897045
ARM GAS /tmp/ccKC6A84.s page 26
1203 0140 55555555 .word 1431655765
1204 0144 5555A53F .word 1067799893
1205 0148 11111111 .word 286331153
1206 014c 1111813F .word 1065423121
1207 0150 1AA0011A .word 436314138
1208 0154 A0012A3F .word 1059717536
1209 0158 0000E03F .word 1071644672
1210 015c 0000F03F .word 1072693248
1211 .cfi_endproc
1212 .LFE2:
1214 .global __aeabi_dcmple
1215 .global __aeabi_dcmpge
1216 .section .text.FIRFilterWindow,"ax",%progbits
1217 .align 1
1218 .p2align 2,,3
1219 .global FIRFilterWindow
1220 .syntax unified
1221 .thumb
1222 .thumb_func
1223 .fpu fpv4-sp-d16
1225 FIRFilterWindow:
1226 .LFB3:
122:Core/Src/FIRFilterCode.c ****
123:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
124:Core/Src/FIRFilterCode.c ****
125:Core/Src/FIRFilterCode.c **** // Used to reduce the sinc(x) effects on a set of FIR coefficients. This will, unfortunately,
126:Core/Src/FIRFilterCode.c **** // widen the filter's transition band, but the stop band attenuation will improve dramatically.
127:Core/Src/FIRFilterCode.c **** void FIRFilterWindow(double *FIRCoeff, int N, TWindowType WindowType, double Beta)
128:Core/Src/FIRFilterCode.c **** {
1227 .loc 1 128 0 is_stmt 1
1228 .cfi_startproc
1229 @ args = 0, pretend = 0, frame = 56
1230 @ frame_needed = 0, uses_anonymous_args = 0
1231 .LVL191:
129:Core/Src/FIRFilterCode.c **** if(WindowType == wtNONE) return;
1232 .loc 1 129 0
1233 0000 012A cmp r2, #1
1234 0002 00F01382 beq .L178
128:Core/Src/FIRFilterCode.c **** if(WindowType == wtNONE) return;
1235 .loc 1 128 0
1236 0006 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
1237 .LCFI11:
1238 .cfi_def_cfa_offset 36
1239 .cfi_offset 4, -36
1240 .cfi_offset 5, -32
1241 .cfi_offset 6, -28
1242 .cfi_offset 7, -24
1243 .cfi_offset 8, -20
1244 .cfi_offset 9, -16
1245 .cfi_offset 10, -12
1246 .cfi_offset 11, -8
1247 .cfi_offset 14, -4
1248 000a 2DED048B vpush.64 {d8, d9}
1249 .LCFI12:
1250 .cfi_def_cfa_offset 52
1251 .cfi_offset 80, -52
1252 .cfi_offset 81, -48
ARM GAS /tmp/ccKC6A84.s page 27
1253 .cfi_offset 82, -44
1254 .cfi_offset 83, -40
1255 000e 0B46 mov r3, r1
1256 0010 8FB0 sub sp, sp, #60
1257 .LCFI13:
1258 .cfi_def_cfa_offset 112
130:Core/Src/FIRFilterCode.c ****
131:Core/Src/FIRFilterCode.c **** int j;
132:Core/Src/FIRFilterCode.c **** double dN, *WinCoeff;
133:Core/Src/FIRFilterCode.c ****
134:Core/Src/FIRFilterCode.c **** if(Beta < 0.0)Beta = 0.0;
135:Core/Src/FIRFilterCode.c **** if(Beta > 10.0)Beta = 10.0;
136:Core/Src/FIRFilterCode.c ****
137:Core/Src/FIRFilterCode.c **** // WinCoeff = new(std::nothrow) double[N+2];
138:Core/Src/FIRFilterCode.c **** WinCoeff = (double *) malloc(sizeof(double) * (N+2));
1259 .loc 1 138 0
1260 0012 0233 adds r3, r3, #2
1261 0014 DB00 lsls r3, r3, #3
1262 0016 0C90 str r0, [sp, #48]
1263 0018 1846 mov r0, r3
1264 .LVL192:
1265 001a 57EC106B vmov r6, r7, d0
1266 .LVL193:
1267 001e 0591 str r1, [sp, #20]
1268 0020 1546 mov r5, r2
1269 0022 0893 str r3, [sp, #32]
1270 0024 FFF7FEFF bl malloc
1271 .LVL194:
139:Core/Src/FIRFilterCode.c **** if(WinCoeff == NULL){
1272 .loc 1 139 0
1273 0028 0490 str r0, [sp, #16]
1274 002a 0028 cmp r0, #0
1275 002c 00F08D80 beq .L111
1276 0030 0022 movs r2, #0
1277 0032 D74B ldr r3, .L206+40
1278 0034 3046 mov r0, r6
1279 .LVL195:
1280 0036 3946 mov r1, r7
1281 0038 FFF7FEFF bl __aeabi_dcmple
1282 .LVL196:
1283 003c 0028 cmp r0, #0
1284 003e 00F08180 beq .L184
1285 .LVL197:
1286 .L115:
1287 0042 0022 movs r2, #0
1288 0044 0023 movs r3, #0
1289 0046 3046 mov r0, r6
1290 0048 3946 mov r1, r7
1291 004a 47EC186B vmov d8, r6, r7
1292 004e FFF7FEFF bl __aeabi_dcmpge
1293 .LVL198:
1294 0052 0028 cmp r0, #0
1295 0054 73D0 beq .L185
1296 .L116:
140:Core/Src/FIRFilterCode.c **** // ShowMessage("Failed to allocate memory in WindowData() ");
141:Core/Src/FIRFilterCode.c **** return;
142:Core/Src/FIRFilterCode.c **** }
ARM GAS /tmp/ccKC6A84.s page 28
143:Core/Src/FIRFilterCode.c ****
144:Core/Src/FIRFilterCode.c **** // Calculate the window for N/2 points, then fold the window over (at the bottom).
145:Core/Src/FIRFilterCode.c **** dN = N + 1; // a double
1297 .loc 1 145 0
1298 0056 059B ldr r3, [sp, #20]
1299 0058 581C adds r0, r3, #1
1300 005a FFF7FEFF bl __aeabi_i2d
1301 .LVL199:
146:Core/Src/FIRFilterCode.c **** if(WindowType == wtKAISER)
1302 .loc 1 146 0
1303 005e 022D cmp r5, #2
145:Core/Src/FIRFilterCode.c **** if(WindowType == wtKAISER)
1304 .loc 1 145 0
1305 0060 CDE90601 strd r0, [sp, #24]
1306 .LVL200:
1307 .loc 1 146 0
1308 0064 76D0 beq .L186
147:Core/Src/FIRFilterCode.c **** {
148:Core/Src/FIRFilterCode.c **** double Arg;
149:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)
150:Core/Src/FIRFilterCode.c **** {
151:Core/Src/FIRFilterCode.c **** Arg = Beta * sqrt(1.0 - pow( ((double)(2*j+2) - dN) / dN, 2.0) );
152:Core/Src/FIRFilterCode.c **** WinCoeff[j] = Bessel(Arg) / Bessel(Beta);
153:Core/Src/FIRFilterCode.c **** }
154:Core/Src/FIRFilterCode.c **** }
155:Core/Src/FIRFilterCode.c ****
156:Core/Src/FIRFilterCode.c **** else if(WindowType == wtSINC) // Lanczos
1309 .loc 1 156 0
1310 0066 032D cmp r5, #3
1311 0068 00F0E181 beq .L187
157:Core/Src/FIRFilterCode.c **** {
158:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = Sinc((double)(2*j+1-N)/dN * M_PI );
159:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
160:Core/Src/FIRFilterCode.c **** }
161:Core/Src/FIRFilterCode.c ****
162:Core/Src/FIRFilterCode.c **** else if(WindowType == wtSINE) // Hanning if Beta = 2
1312 .loc 1 162 0
1313 006c 0E2D cmp r5, #14
1314 006e 5ED1 bne .L153
1315 .LVL201:
163:Core/Src/FIRFilterCode.c **** {
164:Core/Src/FIRFilterCode.c **** for(j=0; j<N/2; j++)WinCoeff[j] = sin((double)(j+1) * M_PI / dN);
1316 .loc 1 164 0
1317 0070 059B ldr r3, [sp, #20]
1318 0072 03EBD37A add r10, r3, r3, lsr #31
1319 0076 4FEA6A0A asr r10, r10, #1
1320 007a BAF1000F cmp r10, #0
1321 007e 42DD ble .L148
1322 0080 0246 mov r2, r0
1323 0082 0B46 mov r3, r1
1324 0084 0020 movs r0, #0
1325 .LVL202:
1326 0086 C349 ldr r1, .L206+44
1327 0088 FFF7FEFF bl __aeabi_ddiv
1328 .LVL203:
1329 008c B6A7 adr r7, .L206
1330 008e D7E90067 ldrd r6, [r7]
ARM GAS /tmp/ccKC6A84.s page 29
1331 0092 DDF81090 ldr r9, [sp, #16]
1332 0096 0446 mov r4, r0
1333 0098 0D46 mov r5, r1
1334 009a C846 mov r8, r9
1335 009c 4FF0000B mov fp, #0
1336 .LVL204:
1337 .L149:
1338 .loc 1 164 0 is_stmt 0 discriminator 3
1339 00a0 0BF1010B add fp, fp, #1
1340 .LVL205:
1341 00a4 5846 mov r0, fp
1342 00a6 FFF7FEFF bl __aeabi_i2d
1343 .LVL206:
1344 00aa 3246 mov r2, r6
1345 00ac 3B46 mov r3, r7
1346 00ae FFF7FEFF bl __aeabi_dmul
1347 .LVL207:
1348 00b2 2246 mov r2, r4
1349 00b4 2B46 mov r3, r5
1350 00b6 FFF7FEFF bl __aeabi_dmul
1351 .LVL208:
1352 00ba 41EC100B vmov d0, r0, r1
1353 00be FFF7FEFF bl sin
1354 .LVL209:
1355 00c2 D345 cmp fp, r10
1356 00c4 A9EC020B vstmia.64 r9!, {d0}
1357 .LVL210:
1358 00c8 EAD1 bne .L149
1359 00ca 049B ldr r3, [sp, #16]
1360 00cc 03EBCB04 add r4, r3, fp, lsl #3
1361 .LVL211:
1362 .L150:
165:Core/Src/FIRFilterCode.c **** for(j=0; j<N/2; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
1363 .loc 1 165 0 is_stmt 1 discriminator 3
1364 00d0 98ED000B vldr.64 d0, [r8]
1365 00d4 B0EE481A vmov.f32 s2, s16
1366 00d8 F0EE681A vmov.f32 s3, s17
1367 00dc FFF7FEFF bl pow
1368 .LVL212:
1369 00e0 A8EC020B vstmia.64 r8!, {d0}
1370 00e4 4445 cmp r4, r8
1371 00e6 F3D1 bne .L150
1372 .L183:
1373 00e8 089B ldr r3, [sp, #32]
1374 00ea 103B subs r3, r3, #16
1375 00ec 0993 str r3, [sp, #36]
1376 .L151:
1377 00ee 099B ldr r3, [sp, #36]
1378 00f0 049A ldr r2, [sp, #16]
1379 00f2 1946 mov r1, r3
1380 00f4 1144 add r1, r1, r2
164:Core/Src/FIRFilterCode.c **** for(j=0; j<N/2; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
1381 .loc 1 164 0 discriminator 3
1382 00f6 0023 movs r3, #0
1383 .L152:
1384 .LVL213:
166:Core/Src/FIRFilterCode.c **** }
ARM GAS /tmp/ccKC6A84.s page 30
167:Core/Src/FIRFilterCode.c ****
168:Core/Src/FIRFilterCode.c **** else // Error.
169:Core/Src/FIRFilterCode.c **** {
170:Core/Src/FIRFilterCode.c **** // ShowMessage("Incorrect window type in WindowFFTData");
171:Core/Src/FIRFilterCode.c **** // delete[] WinCoeff;
172:Core/Src/FIRFilterCode.c **** free(WinCoeff);
173:Core/Src/FIRFilterCode.c **** return;
174:Core/Src/FIRFilterCode.c **** }
175:Core/Src/FIRFilterCode.c ****
176:Core/Src/FIRFilterCode.c **** // Fold the coefficients over.
177:Core/Src/FIRFilterCode.c **** for(j=0; j<N/2; j++)WinCoeff[N-j-1] = WinCoeff[j];
1385 .loc 1 177 0 discriminator 3
1386 00f8 F2E80245 ldrd r4, [r2], #8
1387 00fc 0133 adds r3, r3, #1
1388 .LVL214:
1389 00fe 5B45 cmp r3, fp
1390 0100 61E90245 strd r4, [r1, #-8]!
1391 0104 F8DB blt .L152
1392 .LVL215:
1393 .L148:
178:Core/Src/FIRFilterCode.c ****
179:Core/Src/FIRFilterCode.c **** // Apply the window to the FIR coefficients.
180:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)FIRCoeff[j] *= WinCoeff[j];
1394 .loc 1 180 0
1395 0106 059B ldr r3, [sp, #20]
1396 0108 002B cmp r3, #0
1397 010a 10DD ble .L153
1398 010c 089B ldr r3, [sp, #32]
1399 010e 103B subs r3, r3, #16
1400 0110 0993 str r3, [sp, #36]
1401 .L157:
1402 0112 0C9C ldr r4, [sp, #48]
1403 0114 049D ldr r5, [sp, #16]
1404 0116 2344 add r3, r3, r4
1405 0118 1E46 mov r6, r3
1406 .LVL216:
1407 .L154:
1408 .loc 1 180 0 is_stmt 0 discriminator 3
1409 011a D4E90001 ldrd r0, [r4]
1410 011e F5E80223 ldrd r2, [r5], #8
1411 0122 FFF7FEFF bl __aeabi_dmul
1412 .LVL217:
1413 0126 E4E80201 strd r0, [r4], #8
1414 012a A642 cmp r6, r4
1415 012c F5D1 bne .L154
1416 .L153:
181:Core/Src/FIRFilterCode.c ****
182:Core/Src/FIRFilterCode.c **** // delete[] WinCoeff;
183:Core/Src/FIRFilterCode.c **** free(WinCoeff);
1417 .loc 1 183 0 is_stmt 1
1418 012e 0498 ldr r0, [sp, #16]
184:Core/Src/FIRFilterCode.c ****
185:Core/Src/FIRFilterCode.c **** }
1419 .loc 1 185 0
1420 0130 0FB0 add sp, sp, #60
1421 .LCFI14:
1422 .cfi_remember_state
ARM GAS /tmp/ccKC6A84.s page 31
1423 .cfi_def_cfa_offset 52
1424 @ sp needed
1425 0132 BDEC048B vldm sp!, {d8-d9}
1426 .LCFI15:
1427 .cfi_restore 82
1428 .cfi_restore 83
1429 .cfi_restore 80
1430 .cfi_restore 81
1431 .cfi_def_cfa_offset 36
1432 0136 BDE8F04F pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
1433 .LCFI16:
1434 .cfi_restore 14
1435 .cfi_restore 11
1436 .cfi_restore 10
1437 .cfi_restore 9
1438 .cfi_restore 8
1439 .cfi_restore 7
1440 .cfi_restore 6
1441 .cfi_restore 5
1442 .cfi_restore 4
1443 .cfi_def_cfa_offset 0
1444 .LVL218:
183:Core/Src/FIRFilterCode.c ****
1445 .loc 1 183 0
1446 013a FFF7FEBF b free
1447 .LVL219:
1448 .L185:
1449 .LCFI17:
1450 .cfi_restore_state
1451 013e 9FED8C8B vldr.64 d8, .L206+8
1452 0142 88E7 b .L116
1453 .LVL220:
1454 .L184:
1455 0144 0026 movs r6, #0
1456 .LVL221:
1457 0146 924F ldr r7, .L206+40
1458 0148 7BE7 b .L115
1459 .LVL222:
1460 .L111:
1461 .loc 1 185 0
1462 014a 0FB0 add sp, sp, #60
1463 .LCFI18:
1464 .cfi_remember_state
1465 .cfi_def_cfa_offset 52
1466 @ sp needed
1467 014c BDEC048B vldm sp!, {d8-d9}
1468 .LCFI19:
1469 .cfi_restore 82
1470 .cfi_restore 83
1471 .cfi_restore 80
1472 .cfi_restore 81
1473 .cfi_def_cfa_offset 36
1474 0150 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
1475 .LVL223:
1476 .L186:
1477 .LCFI20:
1478 .cfi_restore_state
ARM GAS /tmp/ccKC6A84.s page 32
1479 0154 059B ldr r3, [sp, #20]
1480 0156 03EBD37B add fp, r3, r3, lsr #31
1481 .LBB60:
149:Core/Src/FIRFilterCode.c **** {
1482 .loc 1 149 0
1483 015a 002B cmp r3, #0
1484 015c 4FEA6B0B asr fp, fp, #1
1485 0160 40F3C581 ble .L118
1486 0164 0246 mov r2, r0
1487 0166 0B46 mov r3, r1
1488 0168 0020 movs r0, #0
1489 .LVL224:
1490 016a 8A49 ldr r1, .L206+44
151:Core/Src/FIRFilterCode.c **** WinCoeff[j] = Bessel(Arg) / Bessel(Beta);
1491 .loc 1 151 0
1492 016c DFF82492 ldr r9, .L206+44
1493 0170 FFF7FEFF bl __aeabi_ddiv
1494 .LVL225:
1495 .LBB61:
1496 .LBB62:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1497 .loc 1 115 0
1498 0174 0022 movs r2, #0
1499 0176 CDE90A01 strd r0, [sp, #40]
1500 017a 874B ldr r3, .L206+48
1501 017c 51EC180B vmov r0, r1, d8
1502 0180 FFF7FEFF bl __aeabi_dmul
1503 .LVL226:
1504 0184 089B ldr r3, [sp, #32]
1505 0186 049A ldr r2, [sp, #16]
1506 0188 CDF834B0 str fp, [sp, #52]
1507 018c 103B subs r3, r3, #16
1508 018e 0993 str r3, [sp, #36]
1509 0190 D318 adds r3, r2, r3
1510 .LBE62:
1511 .LBE61:
151:Core/Src/FIRFilterCode.c **** WinCoeff[j] = Bessel(Arg) / Bessel(Beta);
1512 .loc 1 151 0
1513 0192 4FF00008 mov r8, #0
1514 .LBB67:
1515 .LBB63:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1516 .loc 1 115 0
1517 0196 41EC180B vmov d8, r0, r1
1518 019a 0393 str r3, [sp, #12]
1519 019c 9246 mov r10, r2
1520 019e 2F46 mov r7, r5
1521 01a0 79E0 b .L139
1522 .LVL227:
1523 .L203:
1524 .LBE63:
1525 .LBE67:
1526 .LBB68:
1527 .LBB69:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1528 .loc 1 117 0
1529 01a2 022E cmp r6, #2
ARM GAS /tmp/ccKC6A84.s page 33
1530 01a4 00F0FF80 beq .L188
1531 .LVL228:
1532 01a8 032E cmp r6, #3
1533 01aa 00F00781 beq .L189
1534 .LVL229:
1535 01ae 042E cmp r6, #4
1536 01b0 00F01081 beq .L190
1537 .LVL230:
1538 01b4 052E cmp r6, #5
1539 01b6 00F01981 beq .L191
1540 .LVL231:
1541 01ba 062E cmp r6, #6
1542 01bc 00F01C81 beq .L192
1543 .LVL232:
1544 01c0 072E cmp r6, #7
1545 01c2 00F02581 beq .L193
1546 .LVL233:
1547 01c6 092E cmp r6, #9
1548 01c8 40F0BB80 bne .L194
118:Core/Src/FIRFilterCode.c **** }
1549 .loc 1 118 0
1550 01cc 6AA3 adr r3, .L206+16
1551 01ce D3E90023 ldrd r2, [r3]
1552 01d2 FFF7FEFF bl __aeabi_dmul
1553 .LVL234:
1554 01d6 0246 mov r2, r0
1555 01d8 0B46 mov r3, r1
1556 01da FFF7FEFF bl __aeabi_dmul
1557 .LVL235:
1558 01de 0246 mov r2, r0
1559 01e0 0B46 mov r3, r1
1560 01e2 2046 mov r0, r4
1561 01e4 2946 mov r1, r5
1562 01e6 FFF7FEFF bl __aeabi_dadd
1563 .LVL236:
120:Core/Src/FIRFilterCode.c **** }
1564 .loc 1 120 0
1565 01ea 4246 mov r2, r8
1566 01ec 4B46 mov r3, r9
1567 01ee FFF7FEFF bl __aeabi_dadd
1568 .LVL237:
1569 01f2 CDE90001 strd r0, [sp]
1570 .LVL238:
1571 01f6 4FF0010B mov fp, #1
1572 .LBE69:
1573 .LBE68:
1574 .LBB72:
1575 .LBB64:
111:Core/Src/FIRFilterCode.c **** int i, j, Factorial;
1576 .loc 1 111 0
1577 01fa 0024 movs r4, #0
1578 01fc 0025 movs r5, #0
1579 .LVL239:
1580 .L129:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1581 .loc 1 115 0
1582 01fe 5846 mov r0, fp
ARM GAS /tmp/ccKC6A84.s page 34
1583 0200 FFF7FEFF bl __aeabi_i2d
1584 .LVL240:
1585 0204 B0EE480A vmov.f32 s0, s16
1586 0208 F0EE680A vmov.f32 s1, s17
1587 020c 41EC110B vmov d1, r0, r1
1588 0210 FFF7FEFF bl pow
1589 .LVL241:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1590 .loc 1 117 0
1591 0214 BBF1010F cmp fp, #1
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1592 .loc 1 115 0
1593 0218 51EC100B vmov r0, r1, d0
1594 .LVL242:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1595 .loc 1 117 0
1596 021c 00F08280 beq .L130
1597 .LVL243:
1598 0220 BBF1020F cmp fp, #2
1599 0224 00F0BA80 beq .L195
1600 .LVL244:
1601 0228 BBF1030F cmp fp, #3
1602 022c 00F0C080 beq .L196
1603 .LVL245:
1604 0230 BBF1040F cmp fp, #4
1605 0234 00F0C880 beq .L197
1606 .LVL246:
1607 0238 BBF1050F cmp fp, #5
1608 023c 00F0D080 beq .L198
1609 .LVL247:
1610 0240 BBF1060F cmp fp, #6
1611 0244 69D0 beq .L199
1612 .LVL248:
1613 0246 BBF1070F cmp fp, #7
1614 024a 00F0DB80 beq .L200
1615 .LVL249:
1616 024e BBF1090F cmp fp, #9
1617 0252 7ED1 bne .L201
118:Core/Src/FIRFilterCode.c **** }
1618 .loc 1 118 0
1619 0254 48A3 adr r3, .L206+16
1620 0256 D3E90023 ldrd r2, [r3]
1621 025a FFF7FEFF bl __aeabi_dmul
1622 .LVL250:
1623 025e 0246 mov r2, r0
1624 0260 0B46 mov r3, r1
1625 0262 FFF7FEFF bl __aeabi_dmul
1626 .LVL251:
1627 0266 0246 mov r2, r0
1628 0268 0B46 mov r3, r1
1629 026a 2046 mov r0, r4
1630 026c 2946 mov r1, r5
1631 026e FFF7FEFF bl __aeabi_dadd
1632 .LVL252:
120:Core/Src/FIRFilterCode.c **** }
1633 .loc 1 120 0
1634 0272 4246 mov r2, r8
ARM GAS /tmp/ccKC6A84.s page 35
1635 0274 4B46 mov r3, r9
1636 0276 FFF7FEFF bl __aeabi_dadd
1637 .LVL253:
1638 .LBE64:
1639 .LBE72:
152:Core/Src/FIRFilterCode.c **** }
1640 .loc 1 152 0
1641 027a 0B46 mov r3, r1
1642 027c 0246 mov r2, r0
1643 027e DDE90001 ldrd r0, [sp]
1644 0282 FFF7FEFF bl __aeabi_ddiv
1645 .LVL254:
1646 0286 EAE80201 strd r0, [r10], #8
149:Core/Src/FIRFilterCode.c **** {
1647 .loc 1 149 0
1648 028a 039B ldr r3, [sp, #12]
1649 028c 5345 cmp r3, r10
1650 028e 07F10207 add r7, r7, #2
1651 0292 00F0C380 beq .L202
1652 .L139:
151:Core/Src/FIRFilterCode.c **** WinCoeff[j] = Bessel(Arg) / Bessel(Beta);
1653 .loc 1 151 0 discriminator 3
1654 0296 3846 mov r0, r7
1655 0298 FFF7FEFF bl __aeabi_i2d
1656 .LVL255:
1657 029c DDE90623 ldrd r2, [sp, #24]
1658 02a0 FFF7FEFF bl __aeabi_dsub
1659 .LVL256:
1660 02a4 DDE90A23 ldrd r2, [sp, #40]
1661 02a8 FFF7FEFF bl __aeabi_dmul
1662 .LVL257:
1663 02ac 0246 mov r2, r0
1664 02ae 0B46 mov r3, r1
1665 02b0 FFF7FEFF bl __aeabi_dmul
1666 .LVL258:
1667 02b4 0246 mov r2, r0
1668 02b6 0B46 mov r3, r1
1669 02b8 4046 mov r0, r8
1670 02ba 4946 mov r1, r9
1671 02bc FFF7FEFF bl __aeabi_dsub
1672 .LVL259:
1673 02c0 41EC100B vmov d0, r0, r1
1674 02c4 FFF7FEFF bl sqrt
1675 .LVL260:
1676 .LBB73:
1677 .LBB70:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1678 .loc 1 115 0 discriminator 3
1679 02c8 53EC182B vmov r2, r3, d8
1680 02cc 51EC100B vmov r0, r1, d0
1681 02d0 FFF7FEFF bl __aeabi_dmul
1682 .LVL261:
1683 02d4 41EC190B vmov d9, r0, r1
1684 02d8 0126 movs r6, #1
111:Core/Src/FIRFilterCode.c **** int i, j, Factorial;
1685 .loc 1 111 0 discriminator 3
1686 02da 0024 movs r4, #0
ARM GAS /tmp/ccKC6A84.s page 36
1687 02dc 0025 movs r5, #0
1688 .LVL262:
1689 .L119:
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1690 .loc 1 115 0
1691 02de 3046 mov r0, r6
1692 02e0 FFF7FEFF bl __aeabi_i2d
1693 .LVL263:
1694 02e4 B0EE490A vmov.f32 s0, s18
1695 02e8 F0EE690A vmov.f32 s1, s19
1696 02ec 41EC110B vmov d1, r0, r1
1697 02f0 FFF7FEFF bl pow
1698 .LVL264:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1699 .loc 1 117 0
1700 02f4 012E cmp r6, #1
115:Core/Src/FIRFilterCode.c **** Factorial = 1;
1701 .loc 1 115 0
1702 02f6 51EC100B vmov r0, r1, d0
1703 .LVL265:
117:Core/Src/FIRFilterCode.c **** Sum += pow(XtoIpower / (double)Factorial, 2.0);
1704 .loc 1 117 0
1705 02fa 7FF452AF bne .L203
1706 .LVL266:
1707 .L120:
118:Core/Src/FIRFilterCode.c **** }
1708 .loc 1 118 0
1709 02fe 0246 mov r2, r0
1710 0300 0B46 mov r3, r1
1711 .L181:
1712 0302 FFF7FEFF bl __aeabi_dmul
1713 .LVL267:
1714 0306 0246 mov r2, r0
1715 0308 0B46 mov r3, r1
1716 030a 2046 mov r0, r4
1717 030c 2946 mov r1, r5
1718 030e FFF7FEFF bl __aeabi_dadd
1719 .LVL268:
1720 0312 0136 adds r6, r6, #1
1721 .LVL269:
1722 0314 0446 mov r4, r0
1723 .LVL270:
1724 0316 0D46 mov r5, r1
1725 .LVL271:
1726 0318 E1E7 b .L119
1727 .LVL272:
1728 .L199:
1729 031a 19A3 adr r3, .L206+24
1730 031c D3E90023 ldrd r2, [r3]
1731 0320 FFF7FEFF bl __aeabi_dmul
1732 .LVL273:
1733 .L130:
1734 .LBE70:
1735 .LBE73:
1736 .LBB74:
1737 .LBB65:
1738 0324 0246 mov r2, r0
ARM GAS /tmp/ccKC6A84.s page 37
1739 0326 0B46 mov r3, r1
1740 .L182:
1741 0328 FFF7FEFF bl __aeabi_dmul
1742 .LVL274:
1743 032c 0246 mov r2, r0
1744 032e 0B46 mov r3, r1
1745 0330 2046 mov r0, r4
1746 0332 2946 mov r1, r5
1747 0334 FFF7FEFF bl __aeabi_dadd
1748 .LVL275:
1749 0338 0BF1010B add fp, fp, #1
1750 .LVL276:
1751 033c 0446 mov r4, r0
1752 .LVL277:
1753 033e 0D46 mov r5, r1
1754 .LVL278:
1755 0340 5DE7 b .L129
1756 .LVL279:
1757 .L194:
1758 .LBE65:
1759 .LBE74:
1760 .LBB75:
1761 .LBB71:
1762 0342 11A3 adr r3, .L206+32
1763 0344 D3E90023 ldrd r2, [r3]
1764 0348 FFF7FEFF bl __aeabi_dmul
1765 .LVL280:
1766 034c 0246 mov r2, r0
1767 034e 0B46 mov r3, r1
1768 0350 D7E7 b .L181
1769 .LVL281:
1770 .L201:
1771 .LBE71:
1772 .LBE75:
1773 .LBB76:
1774 .LBB66:
1775 0352 0DA3 adr r3, .L206+32
1776 0354 D3E90023 ldrd r2, [r3]
1777 0358 FFF7FEFF bl __aeabi_dmul
1778 .LVL282:
1779 035c 0246 mov r2, r0
1780 035e 0B46 mov r3, r1
1781 0360 E2E7 b .L182
1782 .L207:
1783 0362 00BFAFF3 .align 3
1783 0080
1784 .L206:
1785 0368 182D4454 .word 1413754136
1786 036c FB210940 .word 1074340347
1787 0370 00000000 .word 0
1788 0374 00000000 .word 0
1789 0378 34C756A5 .word 2773927732
1790 037c E31DC73E .word 1053236707
1791 0380 176CC116 .word 381774871
1792 0384 6CC1563F .word 1062650220
1793 0388 1AA0011A .word 436314138
1794 038c A001FA3E .word 1056571808
ARM GAS /tmp/ccKC6A84.s page 38
1795 0390 00002440 .word 1076101120
1796 0394 0000F03F .word 1072693248
1797 0398 0000E03F .word 1071644672
1798 .LVL283:
1799 .L195:
1800 039c 0022 movs r2, #0
1801 039e 664B ldr r3, .L208+64
1802 03a0 FFF7FEFF bl __aeabi_dmul
1803 .LVL284:
1804 03a4 BEE7 b .L130
1805 .LVL285:
1806 .L188:
1807 03a6 0022 movs r2, #0
1808 03a8 634B ldr r3, .L208+64
1809 03aa FFF7FEFF bl __aeabi_dmul
1810 .LVL286:
1811 03ae A6E7 b .L120
1812 .LVL287:
1813 .L196:
1814 03b0 51A3 adr r3, .L208
1815 03b2 D3E90023 ldrd r2, [r3]
1816 03b6 FFF7FEFF bl __aeabi_dmul
1817 .LVL288:
1818 03ba B3E7 b .L130
1819 .LVL289:
1820 .L189:
1821 03bc 4EA3 adr r3, .L208
1822 03be D3E90023 ldrd r2, [r3]
1823 03c2 FFF7FEFF bl __aeabi_dmul
1824 .LVL290:
1825 03c6 9AE7 b .L120
1826 .LVL291:
1827 .L197:
1828 03c8 4DA3 adr r3, .L208+8
1829 03ca D3E90023 ldrd r2, [r3]
1830 03ce FFF7FEFF bl __aeabi_dmul
1831 .LVL292:
1832 03d2 A7E7 b .L130
1833 .LVL293:
1834 .L190:
1835 03d4 4AA3 adr r3, .L208+8
1836 03d6 D3E90023 ldrd r2, [r3]
1837 03da FFF7FEFF bl __aeabi_dmul
1838 .LVL294:
1839 03de 8EE7 b .L120
1840 .LVL295:
1841 .L198:
1842 03e0 49A3 adr r3, .L208+16
1843 03e2 D3E90023 ldrd r2, [r3]
1844 03e6 FFF7FEFF bl __aeabi_dmul
1845 .LVL296:
1846 03ea 9BE7 b .L130
1847 .LVL297:
1848 .L191:
1849 03ec 46A3 adr r3, .L208+16
1850 03ee D3E90023 ldrd r2, [r3]
1851 03f2 FFF7FEFF bl __aeabi_dmul
ARM GAS /tmp/ccKC6A84.s page 39
1852 .LVL298:
1853 03f6 82E7 b .L120
1854 .LVL299:
1855 .L192:
1856 03f8 45A3 adr r3, .L208+24
1857 03fa D3E90023 ldrd r2, [r3]
1858 03fe FFF7FEFF bl __aeabi_dmul
1859 .LVL300:
1860 0402 7CE7 b .L120
1861 .LVL301:
1862 .L200:
1863 0404 44A3 adr r3, .L208+32
1864 0406 D3E90023 ldrd r2, [r3]
1865 040a FFF7FEFF bl __aeabi_dmul
1866 .LVL302:
1867 040e 89E7 b .L130
1868 .LVL303:
1869 .L193:
1870 0410 41A3 adr r3, .L208+32
1871 0412 D3E90023 ldrd r2, [r3]
1872 0416 FFF7FEFF bl __aeabi_dmul
1873 .LVL304:
1874 041a 70E7 b .L120
1875 .LVL305:
1876 .L202:
1877 041c DDF834B0 ldr fp, [sp, #52]
1878 .L140:
1879 .LVL306:
1880 .LBE66:
1881 .LBE76:
1882 .LBE60:
177:Core/Src/FIRFilterCode.c ****
1883 .loc 1 177 0
1884 0420 BBF1000F cmp fp, #0
1885 0424 3FF763AE bgt .L151
1886 0428 099B ldr r3, [sp, #36]
1887 042a 72E6 b .L157
1888 .LVL307:
1889 .L178:
1890 .LCFI21:
1891 .cfi_def_cfa_offset 0
1892 .cfi_restore 4
1893 .cfi_restore 5
1894 .cfi_restore 6
1895 .cfi_restore 7
1896 .cfi_restore 8
1897 .cfi_restore 9
1898 .cfi_restore 10
1899 .cfi_restore 11
1900 .cfi_restore 14
1901 .cfi_restore 80
1902 .cfi_restore 81
1903 .cfi_restore 82
1904 .cfi_restore 83
1905 042c 7047 bx lr
1906 .LVL308:
1907 .L187:
ARM GAS /tmp/ccKC6A84.s page 40
1908 .LCFI22:
1909 .cfi_def_cfa_offset 112
1910 .cfi_offset 4, -36
1911 .cfi_offset 5, -32
1912 .cfi_offset 6, -28
1913 .cfi_offset 7, -24
1914 .cfi_offset 8, -20
1915 .cfi_offset 9, -16
1916 .cfi_offset 10, -12
1917 .cfi_offset 11, -8
1918 .cfi_offset 14, -4
1919 .cfi_offset 80, -52
1920 .cfi_offset 81, -48
1921 .cfi_offset 82, -44
1922 .cfi_offset 83, -40
1923 042e 059B ldr r3, [sp, #20]
1924 0430 03EBD37B add fp, r3, r3, lsr #31
158:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
1925 .loc 1 158 0
1926 0434 002B cmp r3, #0
1927 0436 4FEA6B0B asr fp, fp, #1
1928 043a 58DD ble .L118
1929 043c 089A ldr r2, [sp, #32]
1930 043e 0499 ldr r1, [sp, #16]
1931 0440 CDF800B0 str fp, [sp]
1932 0444 103A subs r2, r2, #16
1933 0446 0992 str r2, [sp, #36]
1934 0448 01EB0209 add r9, r1, r2
1935 044c C3F10108 rsb r8, r3, #1
1936 0450 0D46 mov r5, r1
1937 0452 0C46 mov r4, r1
1938 0454 DDE906AB ldrd r10, [sp, #24]
1939 0458 0CE0 b .L145
1940 .LVL309:
1941 .L205:
1942 .LBB77:
1943 .LBB78:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
1944 .loc 1 104 0
1945 045a 3046 mov r0, r6
1946 045c 3946 mov r1, r7
1947 045e FFF7FEFF bl __aeabi_dcmplt
1948 .LVL310:
1949 0462 28B3 cbz r0, .L142
1950 0464 3549 ldr r1, .L208+68
1951 .LVL311:
1952 0466 0020 movs r0, #0
1953 .LBE78:
1954 .LBE77:
158:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
1955 .loc 1 158 0
1956 0468 E4E80201 strd r0, [r4], #8
1957 046c A145 cmp r9, r4
1958 046e 08F10208 add r8, r8, #2
1959 0472 2DD0 beq .L204
1960 .L145:
1961 0474 5246 mov r2, r10
ARM GAS /tmp/ccKC6A84.s page 41
1962 0476 5B46 mov r3, fp
1963 0478 29A1 adr r1, .L208+40
1964 047a D1E90001 ldrd r0, [r1]
1965 047e FFF7FEFF bl __aeabi_ddiv
1966 .LVL312:
1967 0482 0646 mov r6, r0
1968 0484 4046 mov r0, r8
1969 0486 0F46 mov r7, r1
1970 0488 FFF7FEFF bl __aeabi_i2d
1971 .LVL313:
1972 048c 0246 mov r2, r0
1973 048e 0B46 mov r3, r1
1974 0490 3046 mov r0, r6
1975 0492 3946 mov r1, r7
1976 0494 FFF7FEFF bl __aeabi_dmul
1977 .LVL314:
1978 .LBB81:
1979 .LBB79:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
1980 .loc 1 104 0
1981 0498 23A3 adr r3, .L208+48
1982 049a D3E90023 ldrd r2, [r3]
1983 .LBE79:
1984 .LBE81:
158:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
1985 .loc 1 158 0
1986 049e 0646 mov r6, r0
1987 04a0 0F46 mov r7, r1
1988 .LVL315:
1989 .LBB82:
1990 .LBB80:
104:Core/Src/FIRFilterCode.c **** return(sin(x)/x);
1991 .loc 1 104 0
1992 04a2 FFF7FEFF bl __aeabi_dcmpgt
1993 .LVL316:
1994 04a6 22A3 adr r3, .L208+56
1995 04a8 D3E90023 ldrd r2, [r3]
1996 04ac 0028 cmp r0, #0
1997 04ae D4D1 bne .L205
1998 .L142:
105:Core/Src/FIRFilterCode.c **** }
1999 .loc 1 105 0
2000 04b0 47EC106B vmov d0, r6, r7
2001 04b4 FFF7FEFF bl sin
2002 .LVL317:
2003 04b8 3246 mov r2, r6
2004 04ba 3B46 mov r3, r7
2005 04bc 51EC100B vmov r0, r1, d0
2006 04c0 FFF7FEFF bl __aeabi_ddiv
2007 .LVL318:
2008 .LBE80:
2009 .LBE82:
158:Core/Src/FIRFilterCode.c **** for(j=0; j<N; j++)WinCoeff[j] = pow(WinCoeff[j], Beta);
2010 .loc 1 158 0
2011 04c4 E4E80201 strd r0, [r4], #8
2012 04c8 A145 cmp r9, r4
2013 04ca 08F10208 add r8, r8, #2
ARM GAS /tmp/ccKC6A84.s page 42
2014 04ce D1D1 bne .L145
2015 .L204:
2016 04d0 DDF800B0 ldr fp, [sp]
2017 .L146:
159:Core/Src/FIRFilterCode.c **** }
2018 .loc 1 159 0 discriminator 3
2019 04d4 B0EE481A vmov.f32 s2, s16
2020 04d8 F0EE681A vmov.f32 s3, s17
2021 04dc 95ED000B vldr.64 d0, [r5]
2022 04e0 FFF7FEFF bl pow
2023 .LVL319:
2024 04e4 A5EC020B vstmia.64 r5!, {d0}
2025 04e8 AC42 cmp r4, r5
2026 04ea F3D1 bne .L146
2027 04ec 98E7 b .L140
2028 .LVL320:
2029 .L118:
177:Core/Src/FIRFilterCode.c ****
2030 .loc 1 177 0
2031 04ee BBF1000F cmp fp, #0
2032 04f2 7FF71CAE ble .L153
2033 04f6 F7E5 b .L183
2034 .L209:
2035 .align 3
2036 .L208:
2037 04f8 55555555 .word 1431655765
2038 04fc 5555C53F .word 1069897045
2039 0500 55555555 .word 1431655765
2040 0504 5555A53F .word 1067799893
2041 0508 11111111 .word 286331153
2042 050c 1111813F .word 1065423121
2043 0510 176CC116 .word 381774871
2044 0514 6CC1563F .word 1062650220
2045 0518 1AA0011A .word 436314138
2046 051c A0012A3F .word 1059717536
2047 0520 182D4454 .word 1413754136
2048 0524 FB210940 .word 1074340347
2049 0528 F168E388 .word 2296604913
2050 052c B5F8E4BE .word -1092290379
2051 0530 F168E388 .word 2296604913
2052 0534 B5F8E43E .word 1055193269
2053 0538 0000E03F .word 1071644672
2054 053c 0000F03F .word 1072693248
2055 .cfi_endproc
2056 .LFE3:
2058 .global __aeabi_d2iz
2059 .section .text.FIRFreqError,"ax",%progbits
2060 .align 1
2061 .p2align 2,,3
2062 .global FIRFreqError
2063 .syntax unified
2064 .thumb
2065 .thumb_func
2066 .fpu fpv4-sp-d16
2068 FIRFreqError:
2069 .LFB4:
186:Core/Src/FIRFilterCode.c ****
ARM GAS /tmp/ccKC6A84.s page 43
187:Core/Src/FIRFilterCode.c **** /*
188:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
189:Core/Src/FIRFilterCode.c ****
190:Core/Src/FIRFilterCode.c **** // This implements an FIR filter. The register shifts are done by rotating the indexes.
191:Core/Src/FIRFilterCode.c **** void FilterWithFIR(double *FirCoeff, int NumTaps, double *Signal, double *FilteredSignal, int NumSi
192:Core/Src/FIRFilterCode.c **** {
193:Core/Src/FIRFilterCode.c **** int j, k, n, Top = 0;
194:Core/Src/FIRFilterCode.c **** double y, Reg[MAX_NUMTAPS];
195:Core/Src/FIRFilterCode.c ****
196:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)Reg[j] = 0.0;
197:Core/Src/FIRFilterCode.c ****
198:Core/Src/FIRFilterCode.c **** for(j=0; j<NumSigPts; j++)
199:Core/Src/FIRFilterCode.c **** {
200:Core/Src/FIRFilterCode.c **** Reg[Top] = Signal[j];
201:Core/Src/FIRFilterCode.c **** y = 0.0;
202:Core/Src/FIRFilterCode.c **** n = 0;
203:Core/Src/FIRFilterCode.c ****
204:Core/Src/FIRFilterCode.c **** // The FirCoeff index increases while the Reg index decreases.
205:Core/Src/FIRFilterCode.c **** for(k=Top; k>=0; k--)
206:Core/Src/FIRFilterCode.c **** {
207:Core/Src/FIRFilterCode.c **** y += FirCoeff[n++] * Reg[k];
208:Core/Src/FIRFilterCode.c **** }
209:Core/Src/FIRFilterCode.c **** for(k=NumTaps-1; k>Top; k--)
210:Core/Src/FIRFilterCode.c **** {
211:Core/Src/FIRFilterCode.c **** y += FirCoeff[n++] * Reg[k];
212:Core/Src/FIRFilterCode.c **** }
213:Core/Src/FIRFilterCode.c **** FilteredSignal[j] = y;
214:Core/Src/FIRFilterCode.c ****
215:Core/Src/FIRFilterCode.c **** Top++;
216:Core/Src/FIRFilterCode.c **** if(Top >= NumTaps)Top = 0;
217:Core/Src/FIRFilterCode.c **** }
218:Core/Src/FIRFilterCode.c ****
219:Core/Src/FIRFilterCode.c **** }
220:Core/Src/FIRFilterCode.c ****
221:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
222:Core/Src/FIRFilterCode.c ****
223:Core/Src/FIRFilterCode.c **** // This code is equivalent to the code above. It uses register shifts, which makes it
224:Core/Src/FIRFilterCode.c **** // less efficient, but it is easier to follow (i.e. compare to a FIR flow chart).
225:Core/Src/FIRFilterCode.c **** void FilterWithFIR2(double *FirCoeff, int NumTaps, double *Signal, double *FilteredSignal, int NumS
226:Core/Src/FIRFilterCode.c **** {
227:Core/Src/FIRFilterCode.c **** int j, k;
228:Core/Src/FIRFilterCode.c **** double y, Reg[MAX_NUMTAPS];
229:Core/Src/FIRFilterCode.c ****
230:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)Reg[j] = 0.0; // Init the delay registers.
231:Core/Src/FIRFilterCode.c ****
232:Core/Src/FIRFilterCode.c **** for(j=0; j<NumSigPts; j++)
233:Core/Src/FIRFilterCode.c **** {
234:Core/Src/FIRFilterCode.c **** // Shift the register values down and set Reg[0].
235:Core/Src/FIRFilterCode.c **** for(k=NumTaps; k>1; k--)Reg[k-1] = Reg[k-2];
236:Core/Src/FIRFilterCode.c **** Reg[0] = Signal[j];
237:Core/Src/FIRFilterCode.c ****
238:Core/Src/FIRFilterCode.c **** y = 0.0;
239:Core/Src/FIRFilterCode.c **** for(k=0; k<NumTaps; k++)y += FirCoeff[k] * Reg[k];
240:Core/Src/FIRFilterCode.c **** FilteredSignal[j] = y;
241:Core/Src/FIRFilterCode.c **** }
242:Core/Src/FIRFilterCode.c ****
243:Core/Src/FIRFilterCode.c **** }
ARM GAS /tmp/ccKC6A84.s page 44
244:Core/Src/FIRFilterCode.c ****
245:Core/Src/FIRFilterCode.c **** */
246:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
247:Core/Src/FIRFilterCode.c ****
248:Core/Src/FIRFilterCode.c **** // This function is used to correct the corner frequency values on FIR filters.
249:Core/Src/FIRFilterCode.c **** // We normally specify the 3 dB frequencies when specifing a filter. The Parks McClellan routine
250:Core/Src/FIRFilterCode.c **** // uses OmegaC and BW to set the 0 dB band edges, so its final OmegaC and BW values are not close
251:Core/Src/FIRFilterCode.c **** // to -3 dB. The Rectangular Windowed filters are better for high tap counts, but for low tap count
252:Core/Src/FIRFilterCode.c **** // their 3 dB frequencies are also well off the mark.
253:Core/Src/FIRFilterCode.c ****
254:Core/Src/FIRFilterCode.c **** // To use this function, first calculate a set of FIR coefficients, then pass them here, along with
255:Core/Src/FIRFilterCode.c **** // OmegaC and BW. This calculates a corrected OmegaC for low and high pass filters. It calcultes a
256:Core/Src/FIRFilterCode.c **** // corrected BW for band pass and notch filters. Use these corrected values to recalculate the FIR
257:Core/Src/FIRFilterCode.c ****
258:Core/Src/FIRFilterCode.c **** // The Goertzel algorithm is used to calculate the filter's magnitude response at the single
259:Core/Src/FIRFilterCode.c **** // frequency defined in the loop. We start in the pass band and work out to the -20dB freq.
260:Core/Src/FIRFilterCode.c ****
261:Core/Src/FIRFilterCode.c **** void FIRFreqError(double *Coeff, int NumTaps, int PassType, double *OmegaC, double *BW)
262:Core/Src/FIRFilterCode.c **** {
2070 .loc 1 262 0
2071 .cfi_startproc
2072 @ args = 4, pretend = 0, frame = 48
2073 @ frame_needed = 0, uses_anonymous_args = 0
2074 .LVL321:
2075 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
2076 .LCFI23:
2077 .cfi_def_cfa_offset 36
2078 .cfi_offset 4, -36
2079 .cfi_offset 5, -32
2080 .cfi_offset 6, -28
2081 .cfi_offset 7, -24
2082 .cfi_offset 8, -20
2083 .cfi_offset 9, -16
2084 .cfi_offset 10, -12
2085 .cfi_offset 11, -8
2086 .cfi_offset 14, -4
2087 0004 93ED007B vldr.64 d7, [r3]
2088 0008 8DB0 sub sp, sp, #52
2089 .LCFI24:
2090 .cfi_def_cfa_offset 88
2091 .loc 1 262 0
2092 000a CDE90510 strd r1, r0, [sp, #20]
2093 000e 0B93 str r3, [sp, #44]
2094 0010 8DED087B vstr.64 d7, [sp, #32]
263:Core/Src/FIRFilterCode.c **** int j, J3dB, CenterJ;
264:Core/Src/FIRFilterCode.c **** double Omega, CorrectedOmega, CorrectedBW, Omega1, Omega2, Mag;
265:Core/Src/FIRFilterCode.c ****
266:Core/Src/FIRFilterCode.c **** // In these loops, we break at -20 dB to ensure that large ripple is ignored.
267:Core/Src/FIRFilterCode.c **** if(PassType == firLPF)
2095 .loc 1 267 0
2096 0014 0792 str r2, [sp, #28]
2097 0016 002A cmp r2, #0
2098 0018 40F0B280 bne .L211
2099 001c 00EBC105 add r5, r0, r1, lsl #3
2100 0020 834B ldr r3, .L301+48
2101 .LVL322:
268:Core/Src/FIRFilterCode.c **** {
ARM GAS /tmp/ccKC6A84.s page 45
269:Core/Src/FIRFilterCode.c **** J3dB = 10;
2102 .loc 1 269 0
2103 0022 0A21 movs r1, #10
2104 .LVL323:
267:Core/Src/FIRFilterCode.c **** {
2105 .loc 1 267 0
2106 0024 0022 movs r2, #0
2107 .LVL324:
2108 .loc 1 269 0
2109 0026 0A91 str r1, [sp, #40]
2110 0028 AB46 mov fp, r5
2111 .LVL325:
2112 .L216:
2113 .LBB95:
2114 .LBB96:
270:Core/Src/FIRFilterCode.c **** for(j=0; j<NUM_FREQ_ERR_PTS; j++)
271:Core/Src/FIRFilterCode.c **** {
272:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
273:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
274:Core/Src/FIRFilterCode.c **** if(Mag > 0.707)J3dB = j; // J3dB will be the last j where the response was > -3 dB
275:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break; // Stop when the response is down to -20 dB.
276:Core/Src/FIRFilterCode.c **** }
277:Core/Src/FIRFilterCode.c **** Omega = (double)J3dB / dNUM_FREQ_ERR_PTS;
278:Core/Src/FIRFilterCode.c **** }
279:Core/Src/FIRFilterCode.c ****
280:Core/Src/FIRFilterCode.c **** else if(PassType == firHPF)
281:Core/Src/FIRFilterCode.c **** {
282:Core/Src/FIRFilterCode.c **** J3dB = NUM_FREQ_ERR_PTS - 10;
283:Core/Src/FIRFilterCode.c **** for(j=NUM_FREQ_ERR_PTS-1; j>=0; j--)
284:Core/Src/FIRFilterCode.c **** {
285:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
286:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
287:Core/Src/FIRFilterCode.c **** if(Mag > 0.707)J3dB = j; // J3dB will be the last j where the response was > -3 dB
288:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break; // Stop when the response is down to -20 dB.
289:Core/Src/FIRFilterCode.c **** }
290:Core/Src/FIRFilterCode.c **** Omega = (double)J3dB / dNUM_FREQ_ERR_PTS;
291:Core/Src/FIRFilterCode.c **** }
292:Core/Src/FIRFilterCode.c ****
293:Core/Src/FIRFilterCode.c **** else if(PassType == firBPF)
294:Core/Src/FIRFilterCode.c **** {
295:Core/Src/FIRFilterCode.c **** CenterJ = (int)(dNUM_FREQ_ERR_PTS * *OmegaC);
296:Core/Src/FIRFilterCode.c **** J3dB = CenterJ;
297:Core/Src/FIRFilterCode.c **** for(j=CenterJ; j>=0; j--)
298:Core/Src/FIRFilterCode.c **** {
299:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
300:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
301:Core/Src/FIRFilterCode.c **** if(Mag > 0.707)J3dB = j;
302:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break;
303:Core/Src/FIRFilterCode.c **** }
304:Core/Src/FIRFilterCode.c **** Omega1 = (double)J3dB / dNUM_FREQ_ERR_PTS;
305:Core/Src/FIRFilterCode.c ****
306:Core/Src/FIRFilterCode.c **** J3dB = CenterJ;
307:Core/Src/FIRFilterCode.c **** for(j=CenterJ; j<NUM_FREQ_ERR_PTS; j++)
308:Core/Src/FIRFilterCode.c **** {
309:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
310:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
311:Core/Src/FIRFilterCode.c **** if(Mag > 0.707)J3dB = j;
ARM GAS /tmp/ccKC6A84.s page 46
312:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break;
313:Core/Src/FIRFilterCode.c **** }
314:Core/Src/FIRFilterCode.c **** Omega2 = (double)J3dB / dNUM_FREQ_ERR_PTS;
315:Core/Src/FIRFilterCode.c **** }
316:Core/Src/FIRFilterCode.c ****
317:Core/Src/FIRFilterCode.c **** // The code above starts in the pass band. This starts in the stop band.
318:Core/Src/FIRFilterCode.c **** else // PassType == firNOTCH
319:Core/Src/FIRFilterCode.c **** {
320:Core/Src/FIRFilterCode.c **** CenterJ = (int)(dNUM_FREQ_ERR_PTS * *OmegaC);
321:Core/Src/FIRFilterCode.c **** J3dB = CenterJ;
322:Core/Src/FIRFilterCode.c **** for(j=CenterJ; j>=0; j--)
323:Core/Src/FIRFilterCode.c **** {
324:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
325:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
326:Core/Src/FIRFilterCode.c **** if(Mag <= 0.707)J3dB = j;
327:Core/Src/FIRFilterCode.c **** if(Mag > 0.99)break;
328:Core/Src/FIRFilterCode.c **** }
329:Core/Src/FIRFilterCode.c **** Omega1 = (double)J3dB/dNUM_FREQ_ERR_PTS;
330:Core/Src/FIRFilterCode.c ****
331:Core/Src/FIRFilterCode.c **** J3dB = CenterJ;
332:Core/Src/FIRFilterCode.c **** for(j=CenterJ; j<NUM_FREQ_ERR_PTS; j++)
333:Core/Src/FIRFilterCode.c **** {
334:Core/Src/FIRFilterCode.c **** Omega = (double)j / dNUM_FREQ_ERR_PTS;
335:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
336:Core/Src/FIRFilterCode.c **** if(Mag <= 0.707)J3dB = j;
337:Core/Src/FIRFilterCode.c **** if(Mag > 0.99)break;
338:Core/Src/FIRFilterCode.c **** }
339:Core/Src/FIRFilterCode.c **** Omega2 = (double)J3dB / dNUM_FREQ_ERR_PTS;
340:Core/Src/FIRFilterCode.c **** }
341:Core/Src/FIRFilterCode.c ****
342:Core/Src/FIRFilterCode.c ****
343:Core/Src/FIRFilterCode.c **** // This calculates the corrected OmegaC and BW and error checks the values.
344:Core/Src/FIRFilterCode.c **** if(PassType == firLPF || PassType == firHPF )
345:Core/Src/FIRFilterCode.c **** {
346:Core/Src/FIRFilterCode.c **** CorrectedOmega = *OmegaC * 2.0 - Omega; // This is usually OK.
347:Core/Src/FIRFilterCode.c **** if(CorrectedOmega < 0.001)CorrectedOmega = 0.001;
348:Core/Src/FIRFilterCode.c **** if(CorrectedOmega > 0.99)CorrectedOmega = 0.99;
349:Core/Src/FIRFilterCode.c **** *OmegaC = CorrectedOmega;
350:Core/Src/FIRFilterCode.c **** }
351:Core/Src/FIRFilterCode.c ****
352:Core/Src/FIRFilterCode.c **** else // PassType == firBPF || PassType == firNOTCH
353:Core/Src/FIRFilterCode.c **** {
354:Core/Src/FIRFilterCode.c **** CorrectedBW = *BW * 2.0 - (Omega2 - Omega1); // This routinely goes neg with Notch.
355:Core/Src/FIRFilterCode.c **** if(CorrectedBW < 0.01)CorrectedBW = 0.01;
356:Core/Src/FIRFilterCode.c **** if(CorrectedBW > *BW * 2.0)CorrectedBW = *BW * 2.0;
357:Core/Src/FIRFilterCode.c **** if(CorrectedBW > 0.98)CorrectedBW = 0.98;
358:Core/Src/FIRFilterCode.c **** *BW = CorrectedBW;
359:Core/Src/FIRFilterCode.c **** }
360:Core/Src/FIRFilterCode.c ****
361:Core/Src/FIRFilterCode.c **** }
362:Core/Src/FIRFilterCode.c ****
363:Core/Src/FIRFilterCode.c **** /*
364:Core/Src/FIRFilterCode.c **** //-----------------------------------------------------------------------------
365:Core/Src/FIRFilterCode.c ****
366:Core/Src/FIRFilterCode.c **** // This shows how to adjust the delay of an FIR by a fractional amount.
367:Core/Src/FIRFilterCode.c **** // We take the FFT of the FIR coefficients to get to the frequency domain,
368:Core/Src/FIRFilterCode.c **** // then apply the Laplace delay operator, and then do an inverse FFT.
ARM GAS /tmp/ccKC6A84.s page 47
369:Core/Src/FIRFilterCode.c ****
370:Core/Src/FIRFilterCode.c **** // Use this function last. i.e. After the window was applied to the coefficients.
371:Core/Src/FIRFilterCode.c **** // The Delay value is in terms of a fraction of a sample (not in terms of sampling freq).
372:Core/Src/FIRFilterCode.c **** // Delay may be pos or neg. Typically a filter's delay can be adjusted by +/- NumTaps/20
373:Core/Src/FIRFilterCode.c **** // without affecting its performance significantly. A typical Delay value would be 0.75
374:Core/Src/FIRFilterCode.c **** void AdjustDelay(double *FirCoeff, int NumTaps, double Delay)
375:Core/Src/FIRFilterCode.c **** {
376:Core/Src/FIRFilterCode.c **** int j, FFTSize;
377:Core/Src/FIRFilterCode.c **** double *FFTInputR, *FFTInputI, Arg, Temp;
378:Core/Src/FIRFilterCode.c **** FFTSize = RequiredFFTSize(NumTaps+(int)fabs(Delay)+1); // Zero pad by at least Delay + 1 to preven
379:Core/Src/FIRFilterCode.c ****
380:Core/Src/FIRFilterCode.c **** FFTInputR = new(std::nothrow) double[FFTSize]; // Real part
381:Core/Src/FIRFilterCode.c **** FFTInputI = new(std::nothrow) double[FFTSize]; // Imag part
382:Core/Src/FIRFilterCode.c **** if(FFTInputR == NULL || FFTInputI == NULL)
383:Core/Src/FIRFilterCode.c **** {
384:Core/Src/FIRFilterCode.c **** //ShowMessage("Unable to allocate memory in AdjustDelay");
385:Core/Src/FIRFilterCode.c **** return;
386:Core/Src/FIRFilterCode.c **** }
387:Core/Src/FIRFilterCode.c **** for(j=0; j<FFTSize; j++)FFTInputR[j] = FFTInputI[j] = 0.0; // A mandatory init.
388:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)FFTInputR[j] = FirCoeff[j]; // Fill the real part with the FIR coef
389:Core/Src/FIRFilterCode.c ****
390:Core/Src/FIRFilterCode.c **** FFT(FFTInputR, FFTInputI, FFTSize, FORWARD); // Do an FFT
391:Core/Src/FIRFilterCode.c **** for(j=0; j<=FFTSize/2; j++) // Apply the Laplace Delay operator e^(-
392:Core/Src/FIRFilterCode.c **** {
393:Core/Src/FIRFilterCode.c **** Arg = -Delay * (double)j / (double)FFTSize * M_2PI; // This is -Delay * (the FFT bin frequen
394:Core/Src/FIRFilterCode.c **** Temp = cos(Arg)*FFTInputR[j] - sin(Arg)*FFTInputI[j];
395:Core/Src/FIRFilterCode.c **** FFTInputI[j] = cos(Arg)*FFTInputI[j] + sin(Arg)*FFTInputR[j];
396:Core/Src/FIRFilterCode.c **** FFTInputR[j] = Temp;
397:Core/Src/FIRFilterCode.c **** }
398:Core/Src/FIRFilterCode.c **** for(j=1; j<FFTSize/2; j++) // Fill the neg freq bins with the conjugate values.
399:Core/Src/FIRFilterCode.c **** {
400:Core/Src/FIRFilterCode.c **** FFTInputR[FFTSize-j] = FFTInputR[j];
401:Core/Src/FIRFilterCode.c **** FFTInputI[FFTSize-j] = -FFTInputI[j];
402:Core/Src/FIRFilterCode.c **** }
403:Core/Src/FIRFilterCode.c ****
404:Core/Src/FIRFilterCode.c **** FFT(FFTInputR, FFTInputI, FFTSize, INVERSE); // Inverse FFT
405:Core/Src/FIRFilterCode.c **** for(j=0; j<NumTaps; j++)
406:Core/Src/FIRFilterCode.c **** {
407:Core/Src/FIRFilterCode.c **** FirCoeff[j] = FFTInputR[j];
408:Core/Src/FIRFilterCode.c **** }
409:Core/Src/FIRFilterCode.c ****
410:Core/Src/FIRFilterCode.c **** delete[] FFTInputR;
411:Core/Src/FIRFilterCode.c **** delete[] FFTInputI;
412:Core/Src/FIRFilterCode.c **** }
413:Core/Src/FIRFilterCode.c **** //-----------------------------------------------------------------------------
414:Core/Src/FIRFilterCode.c ****
415:Core/Src/FIRFilterCode.c **** */
416:Core/Src/FIRFilterCode.c ****
417:Core/Src/FIRFilterCode.c ****
418:Core/Src/FIRFilterCode.c **** //---------------------------------------------------------------------------
419:Core/Src/FIRFilterCode.c ****
420:Core/Src/FIRFilterCode.c **** // Goertzel is essentially a single frequency DFT, but without phase information.
421:Core/Src/FIRFilterCode.c **** // Its simplicity allows it to run about 3 times faster than a single frequency DFT.
422:Core/Src/FIRFilterCode.c **** // It is typically used to find a tone embedded in a signal. A DTMF tone for example.
423:Core/Src/FIRFilterCode.c **** // 256 pts in 6 us
424:Core/Src/FIRFilterCode.c **** double Goertzel(double *Samples, int N, double Omega)
425:Core/Src/FIRFilterCode.c **** {
ARM GAS /tmp/ccKC6A84.s page 48
426:Core/Src/FIRFilterCode.c **** int j;
427:Core/Src/FIRFilterCode.c **** double Reg0, Reg1, Reg2; // 3 shift registers
428:Core/Src/FIRFilterCode.c **** double CosVal, Mag;
429:Core/Src/FIRFilterCode.c **** Reg1 = Reg2 = 0.0;
430:Core/Src/FIRFilterCode.c ****
431:Core/Src/FIRFilterCode.c **** CosVal = 2.0 * cos(M_PI * Omega );
2115 .loc 1 431 0
2116 002a 1946 mov r1, r3
2117 002c 1046 mov r0, r2
2118 002e FFF7FEFF bl __aeabi_dadd
2119 .LVL326:
432:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2120 .loc 1 432 0
2121 0032 059B ldr r3, [sp, #20]
2122 0034 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2123 .loc 1 431 0
2124 0036 CDE90001 strd r0, [sp]
2125 .LVL327:
2126 .loc 1 432 0
2127 003a 73DD ble .L219
429:Core/Src/FIRFilterCode.c ****
2128 .loc 1 429 0
2129 003c 0026 movs r6, #0
2130 003e 0027 movs r7, #0
2131 .loc 1 432 0
2132 0040 DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
2133 .loc 1 429 0
2134 0044 3446 mov r4, r6
2135 0046 3D46 mov r5, r7
2136 0048 03E0 b .L213
2137 .LVL328:
2138 .L260:
2139 004a DDE90001 ldrd r0, [sp]
433:Core/Src/FIRFilterCode.c **** {
434:Core/Src/FIRFilterCode.c **** Reg0 = Samples[j] + CosVal * Reg1 - Reg2;
2140 .loc 1 434 0
2141 004e 4446 mov r4, r8
2142 .LVL329:
2143 0050 4D46 mov r5, r9
2144 .LVL330:
2145 .L213:
2146 0052 2246 mov r2, r4
2147 0054 2B46 mov r3, r5
2148 0056 FAE80289 ldrd r8, [r10], #8
2149 005a FFF7FEFF bl __aeabi_dmul
2150 .LVL331:
2151 005e 3246 mov r2, r6
2152 0060 3B46 mov r3, r7
2153 0062 CDE90201 strd r0, [sp, #8]
2154 0066 FFF7FEFF bl __aeabi_dsub
2155 .LVL332:
2156 006a 4246 mov r2, r8
2157 006c 4B46 mov r3, r9
2158 006e FFF7FEFF bl __aeabi_dadd
2159 .LVL333:
ARM GAS /tmp/ccKC6A84.s page 49
432:Core/Src/FIRFilterCode.c **** {
2160 .loc 1 432 0
2161 0072 D345 cmp fp, r10
2162 .loc 1 434 0
2163 0074 8046 mov r8, r0
2164 0076 8946 mov r9, r1
2165 .LVL334:
2166 0078 2646 mov r6, r4
2167 007a 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
2168 .loc 1 432 0
2169 007c E5D1 bne .L260
435:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
436:Core/Src/FIRFilterCode.c **** Reg1 = Reg0;
437:Core/Src/FIRFilterCode.c **** }
438:Core/Src/FIRFilterCode.c **** Mag = Reg2 * Reg2 + Reg1 * Reg1 - CosVal * Reg1 * Reg2;
2170 .loc 1 438 0
2171 007e 2246 mov r2, r4
2172 0080 2B46 mov r3, r5
2173 0082 2046 mov r0, r4
2174 0084 2946 mov r1, r5
2175 0086 FFF7FEFF bl __aeabi_dmul
2176 .LVL335:
2177 008a 4246 mov r2, r8
2178 008c 0446 mov r4, r0
2179 .LVL336:
2180 008e 0D46 mov r5, r1
2181 0090 4B46 mov r3, r9
2182 0092 4046 mov r0, r8
2183 0094 4946 mov r1, r9
2184 0096 FFF7FEFF bl __aeabi_dmul
2185 .LVL337:
2186 009a 0246 mov r2, r0
2187 009c 0B46 mov r3, r1
2188 009e 2046 mov r0, r4
2189 00a0 2946 mov r1, r5
2190 00a2 FFF7FEFF bl __aeabi_dadd
2191 .LVL338:
2192 00a6 4246 mov r2, r8
2193 00a8 0446 mov r4, r0
2194 00aa 0D46 mov r5, r1
2195 00ac 4B46 mov r3, r9
2196 00ae DDE90201 ldrd r0, [sp, #8]
2197 00b2 FFF7FEFF bl __aeabi_dmul
2198 .LVL339:
2199 00b6 0246 mov r2, r0
2200 00b8 0B46 mov r3, r1
2201 00ba 2046 mov r0, r4
2202 00bc 2946 mov r1, r5
2203 00be FFF7FEFF bl __aeabi_dsub
2204 .LVL340:
439:Core/Src/FIRFilterCode.c ****
440:Core/Src/FIRFilterCode.c **** if(Mag > 0.0)Mag = sqrt(Mag);
2205 .loc 1 440 0
2206 00c2 0022 movs r2, #0
2207 00c4 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
ARM GAS /tmp/ccKC6A84.s page 50
2208 .loc 1 438 0
2209 00c6 0446 mov r4, r0
2210 00c8 0D46 mov r5, r1
2211 .LVL341:
2212 .loc 1 440 0
2213 00ca FFF7FEFF bl __aeabi_dcmpgt
2214 .LVL342:
2215 00ce 48B3 cbz r0, .L219
2216 .LVL343:
2217 .LBE96:
2218 .LBE95:
274:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break; // Stop when the response is down to -20 dB.
2219 .loc 1 274 0
2220 00d0 4BA3 adr r3, .L301
2221 00d2 D3E90023 ldrd r2, [r3]
2222 00d6 2946 mov r1, r5
2223 00d8 2046 mov r0, r4
2224 00da FFF7FEFF bl __aeabi_dcmpgt
2225 .LVL344:
2226 00de 0A99 ldr r1, [sp, #40]
2227 00e0 079E ldr r6, [sp, #28]
2228 00e2 0F46 mov r7, r1
2229 00e4 0028 cmp r0, #0
2230 00e6 18BF it ne
2231 00e8 3746 movne r7, r6
275:Core/Src/FIRFilterCode.c **** }
2232 .loc 1 275 0
2233 00ea 47A3 adr r3, .L301+8
2234 00ec D3E90023 ldrd r2, [r3]
2235 00f0 2046 mov r0, r4
2236 00f2 2946 mov r1, r5
2237 00f4 0A97 str r7, [sp, #40]
2238 .LVL345:
2239 00f6 FFF7FEFF bl __aeabi_dcmplt
2240 .LVL346:
2241 00fa 98B9 cbnz r0, .L219
270:Core/Src/FIRFilterCode.c **** {
2242 .loc 1 270 0 discriminator 2
2243 00fc 0136 adds r6, r6, #1
2244 00fe B6F57A7F cmp r6, #1000
2245 0102 3046 mov r0, r6
2246 0104 0796 str r6, [sp, #28]
2247 .LVL347:
2248 0106 0DD0 beq .L219
2249 0108 FFF7FEFF bl __aeabi_i2d
2250 .LVL348:
2251 010c 40A3 adr r3, .L301+16
2252 010e D3E90023 ldrd r2, [r3]
2253 0112 FFF7FEFF bl __aeabi_dmul
2254 .LVL349:
2255 0116 41EC100B vmov d0, r0, r1
2256 011a FFF7FEFF bl cos
2257 .LVL350:
2258 011e 53EC102B vmov r2, r3, d0
2259 0122 82E7 b .L216
2260 .LVL351:
2261 .L219:
ARM GAS /tmp/ccKC6A84.s page 51
290:Core/Src/FIRFilterCode.c **** }
2262 .loc 1 290 0
2263 0124 0A98 ldr r0, [sp, #40]
2264 0126 FFF7FEFF bl __aeabi_i2d
2265 .LVL352:
2266 012a 3BA3 adr r3, .L301+24
2267 012c D3E90023 ldrd r2, [r3]
2268 0130 FFF7FEFF bl __aeabi_dmul
2269 .LVL353:
346:Core/Src/FIRFilterCode.c **** if(CorrectedOmega < 0.001)CorrectedOmega = 0.001;
2270 .loc 1 346 0
2271 0134 DDE90823 ldrd r2, [sp, #32]
290:Core/Src/FIRFilterCode.c **** }
2272 .loc 1 290 0
2273 0138 0446 mov r4, r0
2274 013a 0D46 mov r5, r1
2275 .LVL354:
346:Core/Src/FIRFilterCode.c **** if(CorrectedOmega < 0.001)CorrectedOmega = 0.001;
2276 .loc 1 346 0
2277 013c 1046 mov r0, r2
2278 013e 1946 mov r1, r3
2279 0140 FFF7FEFF bl __aeabi_dadd
2280 .LVL355:
2281 0144 2246 mov r2, r4
2282 0146 2B46 mov r3, r5
2283 0148 FFF7FEFF bl __aeabi_dsub
2284 .LVL356:
2285 014c 34A3 adr r3, .L301+32
2286 014e D3E90023 ldrd r2, [r3]
2287 0152 0446 mov r4, r0
2288 .LVL357:
2289 0154 0D46 mov r5, r1
2290 0156 FFF7FEFF bl __aeabi_dcmple
2291 .LVL358:
2292 015a 0028 cmp r0, #0
2293 015c 00F0B581 beq .L295
2294 .L255:
2295 .LVL359:
349:Core/Src/FIRFilterCode.c **** }
2296 .loc 1 349 0
2297 0160 2DA3 adr r3, .L301+24
2298 0162 D3E90023 ldrd r2, [r3]
2299 0166 2046 mov r0, r4
2300 0168 2946 mov r1, r5
2301 016a FFF7FEFF bl __aeabi_dcmpge
2302 .LVL360:
2303 016e 0028 cmp r0, #0
2304 0170 00F0A781 beq .L296
2305 .LVL361:
2306 .L256:
2307 0174 0B9B ldr r3, [sp, #44]
2308 0176 C3E90045 strd r4, [r3]
361:Core/Src/FIRFilterCode.c ****
2309 .loc 1 361 0
2310 017a 0DB0 add sp, sp, #52
2311 .LCFI25:
2312 .cfi_remember_state
ARM GAS /tmp/ccKC6A84.s page 52
2313 .cfi_def_cfa_offset 36
2314 @ sp needed
2315 017c BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
2316 .LVL362:
2317 .L211:
2318 .LCFI26:
2319 .cfi_restore_state
280:Core/Src/FIRFilterCode.c **** {
2320 .loc 1 280 0
2321 0180 012A cmp r2, #1
2322 0182 00F0B781 beq .L297
2323 0186 2B4B ldr r3, .L301+52
2324 .LVL363:
2325 0188 51EC170B vmov r0, r1, d7
2326 .LVL364:
2327 018c 0022 movs r2, #0
2328 .LVL365:
2329 018e FFF7FEFF bl __aeabi_dmul
2330 .LVL366:
2331 0192 FFF7FEFF bl __aeabi_d2iz
2332 .LVL367:
293:Core/Src/FIRFilterCode.c **** {
2333 .loc 1 293 0
2334 0196 079B ldr r3, [sp, #28]
2335 0198 0A90 str r0, [sp, #40]
2336 019a 022B cmp r3, #2
2337 019c 00F03D82 beq .L298
2338 .LVL368:
322:Core/Src/FIRFilterCode.c **** {
2339 .loc 1 322 0
2340 01a0 0028 cmp r0, #0
2341 01a2 C0F25B83 blt .L237
2342 01a6 059A ldr r2, [sp, #20]
2343 01a8 0699 ldr r1, [sp, #24]
2344 01aa D200 lsls r2, r2, #3
2345 01ac CDE90700 strd r0, r0, [sp, #28]
2346 .LVL369:
2347 01b0 8F18 adds r7, r1, r2
2348 01b2 0B92 str r2, [sp, #44]
2349 .LVL370:
2350 01b4 BB46 mov fp, r7
2351 .LVL371:
2352 .L243:
324:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
2353 .loc 1 324 0
2354 01b6 0798 ldr r0, [sp, #28]
2355 01b8 FFF7FEFF bl __aeabi_i2d
2356 .LVL372:
2357 01bc 16A3 adr r3, .L301+24
2358 01be D3E90023 ldrd r2, [r3]
2359 01c2 FFF7FEFF bl __aeabi_dmul
2360 .LVL373:
2361 .LBB97:
2362 .LBB98:
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2363 .loc 1 431 0
2364 01c6 18A3 adr r3, .L301+40
ARM GAS /tmp/ccKC6A84.s page 53
2365 01c8 D3E90023 ldrd r2, [r3]
2366 01cc FFF7FEFF bl __aeabi_dmul
2367 .LVL374:
2368 01d0 41EC100B vmov d0, r0, r1
2369 01d4 FFF7FEFF bl cos
2370 .LVL375:
2371 01d8 53EC102B vmov r2, r3, d0
2372 01dc 10EE100A vmov r0, s0 @ int
2373 01e0 1946 mov r1, r3
2374 01e2 FFF7FEFF bl __aeabi_dadd
2375 .LVL376:
432:Core/Src/FIRFilterCode.c **** {
2376 .loc 1 432 0
2377 01e6 059B ldr r3, [sp, #20]
2378 01e8 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2379 .loc 1 431 0
2380 01ea CDE90001 strd r0, [sp]
2381 .LVL377:
432:Core/Src/FIRFilterCode.c **** {
2382 .loc 1 432 0
2383 01ee 40F37E81 ble .L292
429:Core/Src/FIRFilterCode.c ****
2384 .loc 1 429 0
2385 01f2 0026 movs r6, #0
2386 01f4 0027 movs r7, #0
432:Core/Src/FIRFilterCode.c **** {
2387 .loc 1 432 0
2388 01f6 DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
2389 .loc 1 429 0
2390 01fa 3446 mov r4, r6
2391 01fc 3D46 mov r5, r7
2392 01fe 1FE0 b .L239
2393 .L302:
2394 .align 3
2395 .L301:
2396 0200 2B0DFCA8 .word 2835090731
2397 0204 86FDDF3F .word 1071644038
2398 0208 7C14AE47 .word 1202590844
2399 020c E17A843F .word 1065646817
2400 0210 C3718BB6 .word 3062591939
2401 0214 65BC693F .word 1063894117
2402 0218 FCA9F1D2 .word 3539053052
2403 021c 4D62503F .word 1062232653
2404 0220 AE47E17A .word 2061584302
2405 0224 14AEEF3F .word 1072672276
2406 0228 182D4454 .word 1413754136
2407 022c FB210940 .word 1074340347
2408 0230 0000F03F .word 1072693248
2409 0234 00408F40 .word 1083129856
2410 .LVL378:
2411 .L269:
2412 0238 DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2413 .loc 1 434 0
2414 023c 4446 mov r4, r8
ARM GAS /tmp/ccKC6A84.s page 54
2415 .LVL379:
2416 023e 4D46 mov r5, r9
2417 .LVL380:
2418 .L239:
2419 0240 2246 mov r2, r4
2420 0242 2B46 mov r3, r5
2421 0244 FAE80289 ldrd r8, [r10], #8
2422 0248 FFF7FEFF bl __aeabi_dmul
2423 .LVL381:
2424 024c 3246 mov r2, r6
2425 024e 3B46 mov r3, r7
2426 0250 CDE90201 strd r0, [sp, #8]
2427 0254 FFF7FEFF bl __aeabi_dsub
2428 .LVL382:
2429 0258 4246 mov r2, r8
2430 025a 4B46 mov r3, r9
2431 025c FFF7FEFF bl __aeabi_dadd
2432 .LVL383:
432:Core/Src/FIRFilterCode.c **** {
2433 .loc 1 432 0
2434 0260 D345 cmp fp, r10
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2435 .loc 1 434 0
2436 0262 8046 mov r8, r0
2437 0264 8946 mov r9, r1
2438 .LVL384:
2439 0266 2646 mov r6, r4
2440 0268 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
2441 .loc 1 432 0
2442 026a E5D1 bne .L269
438:Core/Src/FIRFilterCode.c ****
2443 .loc 1 438 0
2444 026c 2246 mov r2, r4
2445 026e 2B46 mov r3, r5
2446 0270 2046 mov r0, r4
2447 0272 2946 mov r1, r5
2448 0274 FFF7FEFF bl __aeabi_dmul
2449 .LVL385:
2450 0278 4246 mov r2, r8
2451 027a 0446 mov r4, r0
2452 .LVL386:
2453 027c 0D46 mov r5, r1
2454 027e 4B46 mov r3, r9
2455 0280 4046 mov r0, r8
2456 0282 4946 mov r1, r9
2457 0284 FFF7FEFF bl __aeabi_dmul
2458 .LVL387:
2459 0288 0246 mov r2, r0
2460 028a 0B46 mov r3, r1
2461 028c 2046 mov r0, r4
2462 028e 2946 mov r1, r5
2463 0290 FFF7FEFF bl __aeabi_dadd
2464 .LVL388:
2465 0294 4246 mov r2, r8
2466 0296 0446 mov r4, r0
2467 0298 0D46 mov r5, r1
ARM GAS /tmp/ccKC6A84.s page 55
2468 029a 4B46 mov r3, r9
2469 029c DDE90201 ldrd r0, [sp, #8]
2470 02a0 FFF7FEFF bl __aeabi_dmul
2471 .LVL389:
2472 02a4 0246 mov r2, r0
2473 02a6 0B46 mov r3, r1
2474 02a8 2046 mov r0, r4
2475 02aa 2946 mov r1, r5
2476 02ac FFF7FEFF bl __aeabi_dsub
2477 .LVL390:
2478 .loc 1 440 0
2479 02b0 0022 movs r2, #0
2480 02b2 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
2481 .loc 1 438 0
2482 02b4 0446 mov r4, r0
2483 02b6 0D46 mov r5, r1
2484 .LVL391:
2485 .loc 1 440 0
2486 02b8 FFF7FEFF bl __aeabi_dcmpgt
2487 .LVL392:
2488 02bc 0028 cmp r0, #0
2489 02be 00F01681 beq .L292
2490 .LVL393:
2491 .LBE98:
2492 .LBE97:
326:Core/Src/FIRFilterCode.c **** if(Mag > 0.99)break;
2493 .loc 1 326 0
2494 02c2 0FF2CC53 adr r3, .L303
2495 02c6 D3E90023 ldrd r2, [r3]
2496 02ca 2946 mov r1, r5
2497 02cc 2046 mov r0, r4
2498 02ce FFF7FEFF bl __aeabi_dcmple
2499 .LVL394:
2500 02d2 DDE90761 ldrd r6, r1, [sp, #28]
2501 02d6 0028 cmp r0, #0
2502 02d8 18BF it ne
2503 02da 3146 movne r1, r6
2504 02dc 0891 str r1, [sp, #32]
2505 .LVL395:
327:Core/Src/FIRFilterCode.c **** }
2506 .loc 1 327 0
2507 02de 0FF2B853 adr r3, .L303+8
2508 02e2 D3E90023 ldrd r2, [r3]
2509 02e6 2046 mov r0, r4
2510 02e8 2946 mov r1, r5
2511 .LVL396:
2512 02ea FFF7FEFF bl __aeabi_dcmpgt
2513 .LVL397:
2514 02ee 28B9 cbnz r0, .L242
2515 .LVL398:
2516 .L238:
322:Core/Src/FIRFilterCode.c **** {
2517 .loc 1 322 0 discriminator 2
2518 02f0 079B ldr r3, [sp, #28]
2519 02f2 013B subs r3, r3, #1
2520 02f4 0793 str r3, [sp, #28]
ARM GAS /tmp/ccKC6A84.s page 56
2521 .LVL399:
2522 02f6 0133 adds r3, r3, #1
2523 .LVL400:
2524 02f8 7FF45DAF bne .L243
2525 .L242:
329:Core/Src/FIRFilterCode.c ****
2526 .loc 1 329 0
2527 02fc 0898 ldr r0, [sp, #32]
2528 02fe FFF7FEFF bl __aeabi_i2d
2529 .LVL401:
2530 0302 0FF29C53 adr r3, .L303+16
2531 0306 D3E90023 ldrd r2, [r3]
2532 030a FFF7FEFF bl __aeabi_dmul
2533 .LVL402:
332:Core/Src/FIRFilterCode.c **** {
2534 .loc 1 332 0
2535 030e 0A9B ldr r3, [sp, #40]
2536 0310 B3F57A7F cmp r3, #1000
329:Core/Src/FIRFilterCode.c ****
2537 .loc 1 329 0
2538 0314 CDE90801 strd r0, [sp, #32]
2539 .LVL403:
332:Core/Src/FIRFilterCode.c **** {
2540 .loc 1 332 0
2541 0318 80F29080 bge .L244
2542 .L259:
2543 .LVL404:
2544 031c 0B9B ldr r3, [sp, #44]
2545 031e 069A ldr r2, [sp, #24]
2546 0320 1344 add r3, r3, r2
2547 0322 1F46 mov r7, r3
2548 .LBB101:
2549 .LBB99:
432:Core/Src/FIRFilterCode.c **** {
2550 .loc 1 432 0
2551 0324 0A9B ldr r3, [sp, #40]
2552 0326 0793 str r3, [sp, #28]
2553 0328 BB46 mov fp, r7
2554 .L249:
2555 .LVL405:
2556 .LBE99:
2557 .LBE101:
334:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
2558 .loc 1 334 0
2559 032a 0798 ldr r0, [sp, #28]
2560 032c FFF7FEFF bl __aeabi_i2d
2561 .LVL406:
2562 0330 0FF26C53 adr r3, .L303+16
2563 0334 D3E90023 ldrd r2, [r3]
2564 0338 FFF7FEFF bl __aeabi_dmul
2565 .LVL407:
2566 .LBB102:
2567 .LBB103:
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2568 .loc 1 431 0
2569 033c 0FF26853 adr r3, .L303+24
2570 0340 D3E90023 ldrd r2, [r3]
ARM GAS /tmp/ccKC6A84.s page 57
2571 0344 FFF7FEFF bl __aeabi_dmul
2572 .LVL408:
2573 0348 41EC100B vmov d0, r0, r1
2574 034c FFF7FEFF bl cos
2575 .LVL409:
2576 0350 53EC102B vmov r2, r3, d0
2577 0354 10EE100A vmov r0, s0 @ int
2578 0358 1946 mov r1, r3
2579 035a FFF7FEFF bl __aeabi_dadd
2580 .LVL410:
432:Core/Src/FIRFilterCode.c **** {
2581 .loc 1 432 0
2582 035e 059B ldr r3, [sp, #20]
2583 0360 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2584 .loc 1 431 0
2585 0362 CDE90001 strd r0, [sp]
2586 .LVL411:
432:Core/Src/FIRFilterCode.c **** {
2587 .loc 1 432 0
2588 0366 40F3BF80 ble .L293
429:Core/Src/FIRFilterCode.c ****
2589 .loc 1 429 0
2590 036a 0026 movs r6, #0
2591 036c 0027 movs r7, #0
432:Core/Src/FIRFilterCode.c **** {
2592 .loc 1 432 0
2593 036e DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
2594 .loc 1 429 0
2595 0372 3446 mov r4, r6
2596 0374 3D46 mov r5, r7
2597 0376 03E0 b .L246
2598 .LVL412:
2599 .L273:
2600 0378 DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2601 .loc 1 434 0
2602 037c 4446 mov r4, r8
2603 .LVL413:
2604 037e 4D46 mov r5, r9
2605 .LVL414:
2606 .L246:
2607 0380 2246 mov r2, r4
2608 0382 2B46 mov r3, r5
2609 0384 FAE80289 ldrd r8, [r10], #8
2610 0388 FFF7FEFF bl __aeabi_dmul
2611 .LVL415:
2612 038c 3246 mov r2, r6
2613 038e 3B46 mov r3, r7
2614 0390 CDE90201 strd r0, [sp, #8]
2615 0394 FFF7FEFF bl __aeabi_dsub
2616 .LVL416:
2617 0398 4246 mov r2, r8
2618 039a 4B46 mov r3, r9
2619 039c FFF7FEFF bl __aeabi_dadd
2620 .LVL417:
ARM GAS /tmp/ccKC6A84.s page 58
432:Core/Src/FIRFilterCode.c **** {
2621 .loc 1 432 0
2622 03a0 D345 cmp fp, r10
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2623 .loc 1 434 0
2624 03a2 8046 mov r8, r0
2625 03a4 8946 mov r9, r1
2626 .LVL418:
2627 03a6 2646 mov r6, r4
2628 03a8 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
2629 .loc 1 432 0
2630 03aa E5D1 bne .L273
438:Core/Src/FIRFilterCode.c ****
2631 .loc 1 438 0
2632 03ac 2246 mov r2, r4
2633 03ae 2B46 mov r3, r5
2634 03b0 2046 mov r0, r4
2635 03b2 2946 mov r1, r5
2636 03b4 FFF7FEFF bl __aeabi_dmul
2637 .LVL419:
2638 03b8 4246 mov r2, r8
2639 03ba 0446 mov r4, r0
2640 .LVL420:
2641 03bc 0D46 mov r5, r1
2642 03be 4B46 mov r3, r9
2643 03c0 4046 mov r0, r8
2644 03c2 4946 mov r1, r9
2645 03c4 FFF7FEFF bl __aeabi_dmul
2646 .LVL421:
2647 03c8 0246 mov r2, r0
2648 03ca 0B46 mov r3, r1
2649 03cc 2046 mov r0, r4
2650 03ce 2946 mov r1, r5
2651 03d0 FFF7FEFF bl __aeabi_dadd
2652 .LVL422:
2653 03d4 4246 mov r2, r8
2654 03d6 0446 mov r4, r0
2655 03d8 0D46 mov r5, r1
2656 03da 4B46 mov r3, r9
2657 03dc DDE90201 ldrd r0, [sp, #8]
2658 03e0 FFF7FEFF bl __aeabi_dmul
2659 .LVL423:
2660 03e4 0246 mov r2, r0
2661 03e6 0B46 mov r3, r1
2662 03e8 2046 mov r0, r4
2663 03ea 2946 mov r1, r5
2664 03ec FFF7FEFF bl __aeabi_dsub
2665 .LVL424:
2666 .loc 1 440 0
2667 03f0 0022 movs r2, #0
2668 03f2 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
2669 .loc 1 438 0
2670 03f4 0446 mov r4, r0
2671 03f6 0D46 mov r5, r1
2672 .LVL425:
ARM GAS /tmp/ccKC6A84.s page 59
2673 .loc 1 440 0
2674 03f8 FFF7FEFF bl __aeabi_dcmpgt
2675 .LVL426:
2676 03fc 0028 cmp r0, #0
2677 03fe 73D0 beq .L293
2678 .LVL427:
2679 .LBE103:
2680 .LBE102:
336:Core/Src/FIRFilterCode.c **** if(Mag > 0.99)break;
2681 .loc 1 336 0
2682 0400 0FF28C43 adr r3, .L303
2683 0404 D3E90023 ldrd r2, [r3]
2684 0408 2946 mov r1, r5
2685 040a 2046 mov r0, r4
2686 040c FFF7FEFF bl __aeabi_dcmple
2687 .LVL428:
2688 0410 0A99 ldr r1, [sp, #40]
2689 0412 079E ldr r6, [sp, #28]
2690 0414 0028 cmp r0, #0
2691 0416 18BF it ne
2692 0418 3146 movne r1, r6
2693 041a 0A91 str r1, [sp, #40]
2694 .LVL429:
337:Core/Src/FIRFilterCode.c **** }
2695 .loc 1 337 0
2696 041c 0FF27843 adr r3, .L303+8
2697 0420 D3E90023 ldrd r2, [r3]
2698 0424 2046 mov r0, r4
2699 0426 2946 mov r1, r5
2700 .LVL430:
2701 0428 FFF7FEFF bl __aeabi_dcmpgt
2702 .LVL431:
2703 042c 30B9 cbnz r0, .L244
2704 .LVL432:
2705 .L245:
332:Core/Src/FIRFilterCode.c **** {
2706 .loc 1 332 0 discriminator 2
2707 042e 079B ldr r3, [sp, #28]
2708 0430 0133 adds r3, r3, #1
2709 0432 B3F57A7F cmp r3, #1000
2710 0436 0793 str r3, [sp, #28]
2711 .LVL433:
2712 0438 7FF477AF bne .L249
2713 .LVL434:
2714 .L244:
339:Core/Src/FIRFilterCode.c **** }
2715 .loc 1 339 0
2716 043c 0A98 ldr r0, [sp, #40]
2717 043e FFF7FEFF bl __aeabi_i2d
2718 .LVL435:
2719 0442 0FF25C43 adr r3, .L303+16
2720 0446 D3E90023 ldrd r2, [r3]
2721 044a FFF7FEFF bl __aeabi_dmul
2722 .LVL436:
354:Core/Src/FIRFilterCode.c **** if(CorrectedBW < 0.01)CorrectedBW = 0.01;
2723 .loc 1 354 0
2724 044e 169B ldr r3, [sp, #88]
ARM GAS /tmp/ccKC6A84.s page 60
2725 0450 D3E90023 ldrd r2, [r3]
339:Core/Src/FIRFilterCode.c **** }
2726 .loc 1 339 0
2727 0454 0646 mov r6, r0
2728 0456 0F46 mov r7, r1
2729 .LVL437:
354:Core/Src/FIRFilterCode.c **** if(CorrectedBW < 0.01)CorrectedBW = 0.01;
2730 .loc 1 354 0
2731 0458 1046 mov r0, r2
2732 045a 1946 mov r1, r3
2733 045c FFF7FEFF bl __aeabi_dadd
2734 .LVL438:
2735 0460 DDE90823 ldrd r2, [sp, #32]
2736 0464 0446 mov r4, r0
2737 0466 0D46 mov r5, r1
2738 0468 FFF7FEFF bl __aeabi_dadd
2739 .LVL439:
2740 046c 3246 mov r2, r6
2741 046e 3B46 mov r3, r7
2742 0470 FFF7FEFF bl __aeabi_dsub
2743 .LVL440:
355:Core/Src/FIRFilterCode.c **** if(CorrectedBW > *BW * 2.0)CorrectedBW = *BW * 2.0;
2744 .loc 1 355 0
2745 0474 0FF23843 adr r3, .L303+32
2746 0478 D3E90023 ldrd r2, [r3]
354:Core/Src/FIRFilterCode.c **** if(CorrectedBW < 0.01)CorrectedBW = 0.01;
2747 .loc 1 354 0
2748 047c 0646 mov r6, r0
2749 .LVL441:
2750 047e 0F46 mov r7, r1
2751 .LVL442:
355:Core/Src/FIRFilterCode.c **** if(CorrectedBW > *BW * 2.0)CorrectedBW = *BW * 2.0;
2752 .loc 1 355 0
2753 0480 FFF7FEFF bl __aeabi_dcmplt
2754 .LVL443:
2755 0484 28B3 cbz r0, .L299
2756 .LVL444:
356:Core/Src/FIRFilterCode.c **** if(CorrectedBW > 0.98)CorrectedBW = 0.98;
2757 .loc 1 356 0
2758 0486 0FF22843 adr r3, .L303+32
2759 048a D3E90023 ldrd r2, [r3]
2760 048e 2046 mov r0, r4
2761 0490 2946 mov r1, r5
2762 0492 FFF7FEFF bl __aeabi_dcmplt
2763 .LVL445:
2764 0496 0028 cmp r0, #0
2765 0498 00F0BB80 beq .L300
2766 .LVL446:
2767 .L253:
2768 049c 0FF21843 adr r3, .L303+40
2769 04a0 D3E90023 ldrd r2, [r3]
2770 04a4 2046 mov r0, r4
2771 04a6 2946 mov r1, r5
2772 04a8 FFF7FEFF bl __aeabi_dcmple
2773 .LVL447:
2774 04ac 18B9 cbnz r0, .L254
2775 04ae 0FF20845 adr r5, .L303+40
ARM GAS /tmp/ccKC6A84.s page 61
2776 04b2 D5E90045 ldrd r4, [r5]
2777 .LVL448:
2778 .L254:
358:Core/Src/FIRFilterCode.c **** }
2779 .loc 1 358 0
2780 04b6 169B ldr r3, [sp, #88]
2781 04b8 C3E90045 strd r4, [r3]
361:Core/Src/FIRFilterCode.c ****
2782 .loc 1 361 0
2783 04bc 0DB0 add sp, sp, #52
2784 .LCFI27:
2785 .cfi_remember_state
2786 .cfi_def_cfa_offset 36
2787 @ sp needed
2788 04be BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
2789 .LVL449:
2790 .L296:
2791 .LCFI28:
2792 .cfi_restore_state
349:Core/Src/FIRFilterCode.c **** }
2793 .loc 1 349 0
2794 04c2 F7A5 adr r5, .L303+16
2795 04c4 D5E90045 ldrd r4, [r5]
2796 .LVL450:
2797 04c8 54E6 b .L256
2798 .L295:
2799 04ca FDA5 adr r5, .L303+48
2800 04cc D5E90045 ldrd r4, [r5]
2801 04d0 46E6 b .L255
2802 .LVL451:
2803 .L299:
2804 04d2 3246 mov r2, r6
2805 04d4 3B46 mov r3, r7
2806 04d6 2046 mov r0, r4
2807 04d8 2946 mov r1, r5
2808 04da FFF7FEFF bl __aeabi_dcmple
2809 .LVL452:
2810 04de 0028 cmp r0, #0
2811 04e0 DCD1 bne .L253
2812 04e2 3446 mov r4, r6
2813 04e4 3D46 mov r5, r7
2814 04e6 D9E7 b .L253
2815 .LVL453:
2816 .L293:
2817 .LBB105:
2818 .LBB104:
2819 .loc 1 440 0
2820 04e8 079B ldr r3, [sp, #28]
2821 04ea 0A93 str r3, [sp, #40]
2822 .LVL454:
2823 04ec 9FE7 b .L245
2824 .LVL455:
2825 .L292:
2826 .LBE104:
2827 .LBE105:
2828 .LBB106:
2829 .LBB100:
ARM GAS /tmp/ccKC6A84.s page 62
2830 04ee 079B ldr r3, [sp, #28]
2831 04f0 0893 str r3, [sp, #32]
2832 .LVL456:
2833 04f2 FDE6 b .L238
2834 .LVL457:
2835 .L297:
2836 04f4 0146 mov r1, r0
2837 .LVL458:
2838 04f6 0598 ldr r0, [sp, #20]
2839 .LVL459:
2840 .LBE100:
2841 .LBE106:
280:Core/Src/FIRFilterCode.c **** {
2842 .loc 1 280 0
2843 04f8 F3A3 adr r3, .L303+56
2844 04fa D3E90023 ldrd r2, [r3]
2845 .LVL460:
2846 04fe 01EBC005 add r5, r1, r0, lsl #3
282:Core/Src/FIRFilterCode.c **** for(j=NUM_FREQ_ERR_PTS-1; j>=0; j--)
2847 .loc 1 282 0
2848 0502 40F2DE31 movw r1, #990
2849 0506 0A91 str r1, [sp, #40]
283:Core/Src/FIRFilterCode.c **** {
2850 .loc 1 283 0
2851 0508 40F2E731 movw r1, #999
2852 050c 0791 str r1, [sp, #28]
2853 .LVL461:
2854 050e AB46 mov fp, r5
2855 .LVL462:
2856 .L223:
2857 .LBB107:
2858 .LBB108:
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2859 .loc 1 431 0
2860 0510 1946 mov r1, r3
2861 0512 1046 mov r0, r2
2862 0514 FFF7FEFF bl __aeabi_dadd
2863 .LVL463:
432:Core/Src/FIRFilterCode.c **** {
2864 .loc 1 432 0
2865 0518 059B ldr r3, [sp, #20]
2866 051a 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
2867 .loc 1 431 0
2868 051c CDE90001 strd r0, [sp]
2869 .LVL464:
432:Core/Src/FIRFilterCode.c **** {
2870 .loc 1 432 0
2871 0520 7FF700AE ble .L219
429:Core/Src/FIRFilterCode.c ****
2872 .loc 1 429 0
2873 0524 0026 movs r6, #0
2874 0526 0027 movs r7, #0
432:Core/Src/FIRFilterCode.c **** {
2875 .loc 1 432 0
2876 0528 DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
ARM GAS /tmp/ccKC6A84.s page 63
2877 .loc 1 429 0
2878 052c 3446 mov r4, r6
2879 052e 3D46 mov r5, r7
2880 0530 03E0 b .L220
2881 .LVL465:
2882 .L262:
2883 0532 DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2884 .loc 1 434 0
2885 0536 4446 mov r4, r8
2886 .LVL466:
2887 0538 4D46 mov r5, r9
2888 .LVL467:
2889 .L220:
2890 053a 2246 mov r2, r4
2891 053c 2B46 mov r3, r5
2892 053e FAE80289 ldrd r8, [r10], #8
2893 0542 FFF7FEFF bl __aeabi_dmul
2894 .LVL468:
2895 0546 3246 mov r2, r6
2896 0548 3B46 mov r3, r7
2897 054a CDE90201 strd r0, [sp, #8]
2898 054e FFF7FEFF bl __aeabi_dsub
2899 .LVL469:
2900 0552 4246 mov r2, r8
2901 0554 4B46 mov r3, r9
2902 0556 FFF7FEFF bl __aeabi_dadd
2903 .LVL470:
432:Core/Src/FIRFilterCode.c **** {
2904 .loc 1 432 0
2905 055a D345 cmp fp, r10
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
2906 .loc 1 434 0
2907 055c 8046 mov r8, r0
2908 055e 8946 mov r9, r1
2909 .LVL471:
2910 0560 2646 mov r6, r4
2911 0562 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
2912 .loc 1 432 0
2913 0564 E5D1 bne .L262
438:Core/Src/FIRFilterCode.c ****
2914 .loc 1 438 0
2915 0566 2246 mov r2, r4
2916 0568 2B46 mov r3, r5
2917 056a 2046 mov r0, r4
2918 056c 2946 mov r1, r5
2919 056e FFF7FEFF bl __aeabi_dmul
2920 .LVL472:
2921 0572 4246 mov r2, r8
2922 0574 0446 mov r4, r0
2923 .LVL473:
2924 0576 0D46 mov r5, r1
2925 0578 4B46 mov r3, r9
2926 057a 4046 mov r0, r8
2927 057c 4946 mov r1, r9
2928 057e FFF7FEFF bl __aeabi_dmul
ARM GAS /tmp/ccKC6A84.s page 64
2929 .LVL474:
2930 0582 0246 mov r2, r0
2931 0584 0B46 mov r3, r1
2932 0586 2046 mov r0, r4
2933 0588 2946 mov r1, r5
2934 058a FFF7FEFF bl __aeabi_dadd
2935 .LVL475:
2936 058e 4246 mov r2, r8
2937 0590 0446 mov r4, r0
2938 0592 0D46 mov r5, r1
2939 0594 4B46 mov r3, r9
2940 0596 DDE90201 ldrd r0, [sp, #8]
2941 059a FFF7FEFF bl __aeabi_dmul
2942 .LVL476:
2943 059e 0246 mov r2, r0
2944 05a0 0B46 mov r3, r1
2945 05a2 2046 mov r0, r4
2946 05a4 2946 mov r1, r5
2947 05a6 FFF7FEFF bl __aeabi_dsub
2948 .LVL477:
2949 .loc 1 440 0
2950 05aa 0022 movs r2, #0
2951 05ac 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
2952 .loc 1 438 0
2953 05ae 0446 mov r4, r0
2954 05b0 0D46 mov r5, r1
2955 .LVL478:
2956 .loc 1 440 0
2957 05b2 FFF7FEFF bl __aeabi_dcmpgt
2958 .LVL479:
2959 05b6 0028 cmp r0, #0
2960 05b8 3FF4B4AD beq .L219
2961 .LVL480:
2962 .LBE108:
2963 .LBE107:
287:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break; // Stop when the response is down to -20 dB.
2964 .loc 1 287 0
2965 05bc B4A3 adr r3, .L303
2966 05be D3E90023 ldrd r2, [r3]
2967 05c2 2946 mov r1, r5
2968 05c4 2046 mov r0, r4
2969 05c6 FFF7FEFF bl __aeabi_dcmpgt
2970 .LVL481:
2971 05ca 0A99 ldr r1, [sp, #40]
2972 05cc 079E ldr r6, [sp, #28]
2973 05ce 0F46 mov r7, r1
2974 05d0 0028 cmp r0, #0
2975 05d2 18BF it ne
2976 05d4 3746 movne r7, r6
288:Core/Src/FIRFilterCode.c **** }
2977 .loc 1 288 0
2978 05d6 BEA3 adr r3, .L303+64
2979 05d8 D3E90023 ldrd r2, [r3]
2980 05dc 2046 mov r0, r4
2981 05de 2946 mov r1, r5
2982 05e0 0A97 str r7, [sp, #40]
ARM GAS /tmp/ccKC6A84.s page 65
2983 .LVL482:
2984 05e2 FFF7FEFF bl __aeabi_dcmplt
2985 .LVL483:
2986 05e6 0028 cmp r0, #0
2987 05e8 7FF49CAD bne .L219
283:Core/Src/FIRFilterCode.c **** {
2988 .loc 1 283 0 discriminator 2
2989 05ec 701E subs r0, r6, #1
2990 05ee 431C adds r3, r0, #1
2991 05f0 0790 str r0, [sp, #28]
2992 .LVL484:
2993 05f2 3FF497AD beq .L219
2994 05f6 FFF7FEFF bl __aeabi_i2d
2995 .LVL485:
2996 05fa B7A3 adr r3, .L303+72
2997 05fc D3E90023 ldrd r2, [r3]
2998 0600 FFF7FEFF bl __aeabi_dmul
2999 .LVL486:
3000 0604 41EC100B vmov d0, r0, r1
3001 0608 FFF7FEFF bl cos
3002 .LVL487:
3003 060c 53EC102B vmov r2, r3, d0
3004 0610 7EE7 b .L223
3005 .LVL488:
3006 .L300:
355:Core/Src/FIRFilterCode.c **** if(CorrectedBW > *BW * 2.0)CorrectedBW = *BW * 2.0;
3007 .loc 1 355 0
3008 0612 A7A5 adr r5, .L303+32
3009 0614 D5E90045 ldrd r4, [r5]
3010 0618 4DE7 b .L254
3011 .LVL489:
3012 .L298:
297:Core/Src/FIRFilterCode.c **** {
3013 .loc 1 297 0
3014 061a 0028 cmp r0, #0
3015 061c C0F22B81 blt .L225
3016 0620 059A ldr r2, [sp, #20]
3017 0622 0699 ldr r1, [sp, #24]
3018 0624 D200 lsls r2, r2, #3
3019 0626 CDE90700 strd r0, r0, [sp, #28]
3020 .LVL490:
3021 062a 8D18 adds r5, r1, r2
3022 062c 0B92 str r2, [sp, #44]
3023 .LVL491:
3024 062e AB46 mov fp, r5
3025 .LVL492:
3026 .L230:
299:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
3027 .loc 1 299 0
3028 0630 0798 ldr r0, [sp, #28]
3029 0632 FFF7FEFF bl __aeabi_i2d
3030 .LVL493:
3031 .LBB109:
3032 .LBB110:
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3033 .loc 1 431 0
3034 0636 A8A3 adr r3, .L303+72
ARM GAS /tmp/ccKC6A84.s page 66
3035 0638 D3E90023 ldrd r2, [r3]
3036 063c FFF7FEFF bl __aeabi_dmul
3037 .LVL494:
3038 0640 41EC100B vmov d0, r0, r1
3039 0644 FFF7FEFF bl cos
3040 .LVL495:
3041 0648 53EC102B vmov r2, r3, d0
3042 064c 10EE100A vmov r0, s0 @ int
3043 0650 1946 mov r1, r3
3044 0652 FFF7FEFF bl __aeabi_dadd
3045 .LVL496:
432:Core/Src/FIRFilterCode.c **** {
3046 .loc 1 432 0
3047 0656 059B ldr r3, [sp, #20]
3048 0658 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3049 .loc 1 431 0
3050 065a CDE90001 strd r0, [sp]
3051 .LVL497:
432:Core/Src/FIRFilterCode.c **** {
3052 .loc 1 432 0
3053 065e 63DD ble .L226
429:Core/Src/FIRFilterCode.c ****
3054 .loc 1 429 0
3055 0660 0026 movs r6, #0
3056 0662 0027 movs r7, #0
432:Core/Src/FIRFilterCode.c **** {
3057 .loc 1 432 0
3058 0664 DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
3059 .loc 1 429 0
3060 0668 3446 mov r4, r6
3061 066a 3D46 mov r5, r7
3062 066c 03E0 b .L227
3063 .LVL498:
3064 .L264:
3065 066e DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3066 .loc 1 434 0
3067 0672 4446 mov r4, r8
3068 .LVL499:
3069 0674 4D46 mov r5, r9
3070 .LVL500:
3071 .L227:
3072 0676 2246 mov r2, r4
3073 0678 2B46 mov r3, r5
3074 067a FAE80289 ldrd r8, [r10], #8
3075 067e FFF7FEFF bl __aeabi_dmul
3076 .LVL501:
3077 0682 3246 mov r2, r6
3078 0684 3B46 mov r3, r7
3079 0686 CDE90201 strd r0, [sp, #8]
3080 068a FFF7FEFF bl __aeabi_dsub
3081 .LVL502:
3082 068e 4246 mov r2, r8
3083 0690 4B46 mov r3, r9
3084 0692 FFF7FEFF bl __aeabi_dadd
ARM GAS /tmp/ccKC6A84.s page 67
3085 .LVL503:
432:Core/Src/FIRFilterCode.c **** {
3086 .loc 1 432 0
3087 0696 D345 cmp fp, r10
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3088 .loc 1 434 0
3089 0698 8046 mov r8, r0
3090 069a 8946 mov r9, r1
3091 .LVL504:
3092 069c 2646 mov r6, r4
3093 069e 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
3094 .loc 1 432 0
3095 06a0 E5D1 bne .L264
438:Core/Src/FIRFilterCode.c ****
3096 .loc 1 438 0
3097 06a2 2246 mov r2, r4
3098 06a4 2B46 mov r3, r5
3099 06a6 2046 mov r0, r4
3100 06a8 2946 mov r1, r5
3101 06aa FFF7FEFF bl __aeabi_dmul
3102 .LVL505:
3103 06ae 4246 mov r2, r8
3104 06b0 0446 mov r4, r0
3105 .LVL506:
3106 06b2 0D46 mov r5, r1
3107 06b4 4B46 mov r3, r9
3108 06b6 4046 mov r0, r8
3109 06b8 4946 mov r1, r9
3110 06ba FFF7FEFF bl __aeabi_dmul
3111 .LVL507:
3112 06be 0246 mov r2, r0
3113 06c0 0B46 mov r3, r1
3114 06c2 2046 mov r0, r4
3115 06c4 2946 mov r1, r5
3116 06c6 FFF7FEFF bl __aeabi_dadd
3117 .LVL508:
3118 06ca 4246 mov r2, r8
3119 06cc 0446 mov r4, r0
3120 06ce 0D46 mov r5, r1
3121 06d0 4B46 mov r3, r9
3122 06d2 DDE90201 ldrd r0, [sp, #8]
3123 06d6 FFF7FEFF bl __aeabi_dmul
3124 .LVL509:
3125 06da 0246 mov r2, r0
3126 06dc 0B46 mov r3, r1
3127 06de 2046 mov r0, r4
3128 06e0 2946 mov r1, r5
3129 06e2 FFF7FEFF bl __aeabi_dsub
3130 .LVL510:
3131 .loc 1 440 0
3132 06e6 0022 movs r2, #0
3133 06e8 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
3134 .loc 1 438 0
3135 06ea 0446 mov r4, r0
3136 06ec 0D46 mov r5, r1
ARM GAS /tmp/ccKC6A84.s page 68
3137 .LVL511:
3138 .loc 1 440 0
3139 06ee FFF7FEFF bl __aeabi_dcmpgt
3140 .LVL512:
3141 06f2 C8B1 cbz r0, .L226
3142 .LVL513:
3143 .LBE110:
3144 .LBE109:
301:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break;
3145 .loc 1 301 0
3146 06f4 66A3 adr r3, .L303
3147 06f6 D3E90023 ldrd r2, [r3]
3148 06fa 2946 mov r1, r5
3149 06fc 2046 mov r0, r4
3150 06fe FFF7FEFF bl __aeabi_dcmpgt
3151 .LVL514:
3152 0702 0899 ldr r1, [sp, #32]
3153 0704 079E ldr r6, [sp, #28]
3154 0706 0F46 mov r7, r1
3155 0708 0028 cmp r0, #0
3156 070a 18BF it ne
3157 070c 3746 movne r7, r6
302:Core/Src/FIRFilterCode.c **** }
3158 .loc 1 302 0
3159 070e 70A3 adr r3, .L303+64
3160 0710 D3E90023 ldrd r2, [r3]
3161 0714 2046 mov r0, r4
3162 0716 2946 mov r1, r5
3163 0718 0897 str r7, [sp, #32]
3164 .LVL515:
3165 071a FFF7FEFF bl __aeabi_dcmplt
3166 .LVL516:
3167 071e 18B9 cbnz r0, .L226
297:Core/Src/FIRFilterCode.c **** {
3168 .loc 1 297 0 discriminator 2
3169 0720 731E subs r3, r6, #1
3170 0722 0793 str r3, [sp, #28]
3171 .LVL517:
3172 0724 0133 adds r3, r3, #1
3173 .LVL518:
3174 0726 83D1 bne .L230
3175 .LVL519:
3176 .L226:
304:Core/Src/FIRFilterCode.c ****
3177 .loc 1 304 0
3178 0728 0898 ldr r0, [sp, #32]
3179 072a FFF7FEFF bl __aeabi_i2d
3180 .LVL520:
3181 072e 5CA3 adr r3, .L303+16
3182 0730 D3E90023 ldrd r2, [r3]
3183 0734 FFF7FEFF bl __aeabi_dmul
3184 .LVL521:
307:Core/Src/FIRFilterCode.c **** {
3185 .loc 1 307 0
3186 0738 0A9B ldr r3, [sp, #40]
3187 073a B3F57A7F cmp r3, #1000
304:Core/Src/FIRFilterCode.c ****
ARM GAS /tmp/ccKC6A84.s page 69
3188 .loc 1 304 0
3189 073e CDE90801 strd r0, [sp, #32]
3190 .LVL522:
307:Core/Src/FIRFilterCode.c **** {
3191 .loc 1 307 0
3192 0742 BFF67BAE bge .L244
3193 .L258:
3194 .LVL523:
3195 0746 0B9B ldr r3, [sp, #44]
3196 0748 069A ldr r2, [sp, #24]
3197 074a 1344 add r3, r3, r2
3198 074c 1D46 mov r5, r3
3199 074e 0A9B ldr r3, [sp, #40]
3200 0750 0793 str r3, [sp, #28]
3201 0752 AB46 mov fp, r5
3202 .L235:
3203 .LVL524:
309:Core/Src/FIRFilterCode.c **** Mag = Goertzel(Coeff, NumTaps, Omega);
3204 .loc 1 309 0
3205 0754 0798 ldr r0, [sp, #28]
3206 0756 FFF7FEFF bl __aeabi_i2d
3207 .LVL525:
3208 .LBB111:
3209 .LBB112:
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3210 .loc 1 431 0
3211 075a 5FA3 adr r3, .L303+72
3212 075c D3E90023 ldrd r2, [r3]
3213 0760 FFF7FEFF bl __aeabi_dmul
3214 .LVL526:
3215 0764 41EC100B vmov d0, r0, r1
3216 0768 FFF7FEFF bl cos
3217 .LVL527:
3218 076c 53EC102B vmov r2, r3, d0
3219 0770 10EE100A vmov r0, s0 @ int
3220 0774 1946 mov r1, r3
3221 0776 FFF7FEFF bl __aeabi_dadd
3222 .LVL528:
432:Core/Src/FIRFilterCode.c **** {
3223 .loc 1 432 0
3224 077a 059B ldr r3, [sp, #20]
3225 077c 002B cmp r3, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3226 .loc 1 431 0
3227 077e CDE90001 strd r0, [sp]
3228 .LVL529:
432:Core/Src/FIRFilterCode.c **** {
3229 .loc 1 432 0
3230 0782 7FF75BAE ble .L244
429:Core/Src/FIRFilterCode.c ****
3231 .loc 1 429 0
3232 0786 0026 movs r6, #0
3233 0788 0027 movs r7, #0
432:Core/Src/FIRFilterCode.c **** {
3234 .loc 1 432 0
3235 078a DDF818A0 ldr r10, [sp, #24]
429:Core/Src/FIRFilterCode.c ****
ARM GAS /tmp/ccKC6A84.s page 70
3236 .loc 1 429 0
3237 078e 3446 mov r4, r6
3238 0790 3D46 mov r5, r7
3239 0792 03E0 b .L232
3240 .LVL530:
3241 .L266:
3242 0794 DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3243 .loc 1 434 0
3244 0798 4446 mov r4, r8
3245 .LVL531:
3246 079a 4D46 mov r5, r9
3247 .LVL532:
3248 .L232:
3249 079c 2246 mov r2, r4
3250 079e 2B46 mov r3, r5
3251 07a0 FAE80289 ldrd r8, [r10], #8
3252 07a4 FFF7FEFF bl __aeabi_dmul
3253 .LVL533:
3254 07a8 3246 mov r2, r6
3255 07aa 3B46 mov r3, r7
3256 07ac CDE90201 strd r0, [sp, #8]
3257 07b0 FFF7FEFF bl __aeabi_dsub
3258 .LVL534:
3259 07b4 4246 mov r2, r8
3260 07b6 4B46 mov r3, r9
3261 07b8 FFF7FEFF bl __aeabi_dadd
3262 .LVL535:
432:Core/Src/FIRFilterCode.c **** {
3263 .loc 1 432 0
3264 07bc D345 cmp fp, r10
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3265 .loc 1 434 0
3266 07be 8046 mov r8, r0
3267 07c0 8946 mov r9, r1
3268 .LVL536:
3269 07c2 2646 mov r6, r4
3270 07c4 2F46 mov r7, r5
432:Core/Src/FIRFilterCode.c **** {
3271 .loc 1 432 0
3272 07c6 E5D1 bne .L266
438:Core/Src/FIRFilterCode.c ****
3273 .loc 1 438 0
3274 07c8 2246 mov r2, r4
3275 07ca 2B46 mov r3, r5
3276 07cc 2046 mov r0, r4
3277 07ce 2946 mov r1, r5
3278 07d0 FFF7FEFF bl __aeabi_dmul
3279 .LVL537:
3280 07d4 4246 mov r2, r8
3281 07d6 0446 mov r4, r0
3282 .LVL538:
3283 07d8 0D46 mov r5, r1
3284 07da 4B46 mov r3, r9
3285 07dc 4046 mov r0, r8
3286 07de 4946 mov r1, r9
3287 07e0 FFF7FEFF bl __aeabi_dmul
ARM GAS /tmp/ccKC6A84.s page 71
3288 .LVL539:
3289 07e4 0246 mov r2, r0
3290 07e6 0B46 mov r3, r1
3291 07e8 2046 mov r0, r4
3292 07ea 2946 mov r1, r5
3293 07ec FFF7FEFF bl __aeabi_dadd
3294 .LVL540:
3295 07f0 4246 mov r2, r8
3296 07f2 0446 mov r4, r0
3297 07f4 0D46 mov r5, r1
3298 07f6 4B46 mov r3, r9
3299 07f8 DDE90201 ldrd r0, [sp, #8]
3300 07fc FFF7FEFF bl __aeabi_dmul
3301 .LVL541:
3302 0800 0246 mov r2, r0
3303 0802 0B46 mov r3, r1
3304 0804 2046 mov r0, r4
3305 0806 2946 mov r1, r5
3306 0808 FFF7FEFF bl __aeabi_dsub
3307 .LVL542:
3308 .loc 1 440 0
3309 080c 0022 movs r2, #0
3310 080e 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
3311 .loc 1 438 0
3312 0810 0446 mov r4, r0
3313 0812 0D46 mov r5, r1
3314 .LVL543:
3315 .loc 1 440 0
3316 0814 FFF7FEFF bl __aeabi_dcmpgt
3317 .LVL544:
3318 0818 0028 cmp r0, #0
3319 081a 3FF40FAE beq .L244
3320 .LVL545:
3321 .LBE112:
3322 .LBE111:
311:Core/Src/FIRFilterCode.c **** if(Mag < 0.1)break;
3323 .loc 1 311 0
3324 081e 1CA3 adr r3, .L303
3325 0820 D3E90023 ldrd r2, [r3]
3326 0824 2946 mov r1, r5
3327 0826 2046 mov r0, r4
3328 0828 FFF7FEFF bl __aeabi_dcmpgt
3329 .LVL546:
3330 082c 0A99 ldr r1, [sp, #40]
3331 082e 079E ldr r6, [sp, #28]
3332 0830 0F46 mov r7, r1
3333 0832 0028 cmp r0, #0
3334 0834 18BF it ne
3335 0836 3746 movne r7, r6
312:Core/Src/FIRFilterCode.c **** }
3336 .loc 1 312 0
3337 0838 25A3 adr r3, .L303+64
3338 083a D3E90023 ldrd r2, [r3]
3339 083e 2046 mov r0, r4
3340 0840 2946 mov r1, r5
3341 0842 0A97 str r7, [sp, #40]
ARM GAS /tmp/ccKC6A84.s page 72
3342 .LVL547:
3343 0844 FFF7FEFF bl __aeabi_dcmplt
3344 .LVL548:
3345 0848 0028 cmp r0, #0
3346 084a 7FF4F7AD bne .L244
307:Core/Src/FIRFilterCode.c **** {
3347 .loc 1 307 0 discriminator 2
3348 084e 0136 adds r6, r6, #1
3349 0850 B6F57A7F cmp r6, #1000
3350 0854 0796 str r6, [sp, #28]
3351 .LVL549:
3352 0856 7FF47DAF bne .L235
3353 085a EFE5 b .L244
3354 .LVL550:
3355 .L237:
329:Core/Src/FIRFilterCode.c ****
3356 .loc 1 329 0
3357 085c FFF7FEFF bl __aeabi_i2d
3358 .LVL551:
3359 0860 0FA3 adr r3, .L303+16
3360 0862 D3E90023 ldrd r2, [r3]
3361 0866 FFF7FEFF bl __aeabi_dmul
3362 .LVL552:
3363 086a 059B ldr r3, [sp, #20]
3364 086c DB00 lsls r3, r3, #3
3365 086e CDE90801 strd r0, [sp, #32]
3366 .LVL553:
3367 0872 0B93 str r3, [sp, #44]
3368 .LVL554:
3369 0874 52E5 b .L259
3370 .LVL555:
3371 .L225:
304:Core/Src/FIRFilterCode.c ****
3372 .loc 1 304 0
3373 0876 FFF7FEFF bl __aeabi_i2d
3374 .LVL556:
3375 087a 09A3 adr r3, .L303+16
3376 087c D3E90023 ldrd r2, [r3]
3377 0880 FFF7FEFF bl __aeabi_dmul
3378 .LVL557:
3379 0884 059B ldr r3, [sp, #20]
3380 0886 DB00 lsls r3, r3, #3
3381 0888 CDE90801 strd r0, [sp, #32]
3382 .LVL558:
3383 088c 0B93 str r3, [sp, #44]
3384 .LVL559:
3385 088e 5AE7 b .L258
3386 .L304:
3387 .align 3
3388 .L303:
3389 0890 2B0DFCA8 .word 2835090731
3390 0894 86FDDF3F .word 1071644038
3391 0898 3EE8D9AC .word 2899961918
3392 089c FA5CEF3F .word 1072651514
3393 08a0 FCA9F1D2 .word 3539053052
3394 08a4 4D62503F .word 1062232653
3395 08a8 182D4454 .word 1413754136
ARM GAS /tmp/ccKC6A84.s page 73
3396 08ac FB210940 .word 1074340347
3397 08b0 7B14AE47 .word 1202590843
3398 08b4 E17A843F .word 1065646817
3399 08b8 5C8FC2F5 .word 4123168604
3400 08bc 285CEF3F .word 1072651304
3401 08c0 AE47E17A .word 2061584302
3402 08c4 14AEEF3F .word 1072672276
3403 08c8 FF81A6A6 .word 2795930111
3404 08cc F5FFEFBF .word -1074790411
3405 08d0 7C14AE47 .word 1202590844
3406 08d4 E17A843F .word 1065646817
3407 08d8 C3718BB6 .word 3062591939
3408 08dc 65BC693F .word 1063894117
3409 .cfi_endproc
3410 .LFE4:
3412 .section .text.Goertzel,"ax",%progbits
3413 .align 1
3414 .p2align 2,,3
3415 .global Goertzel
3416 .syntax unified
3417 .thumb
3418 .thumb_func
3419 .fpu fpv4-sp-d16
3421 Goertzel:
3422 .LFB5:
425:Core/Src/FIRFilterCode.c **** int j;
3423 .loc 1 425 0
3424 .cfi_startproc
3425 @ args = 0, pretend = 0, frame = 16
3426 @ frame_needed = 0, uses_anonymous_args = 0
3427 .LVL560:
3428 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
3429 .LCFI29:
3430 .cfi_def_cfa_offset 36
3431 .cfi_offset 4, -36
3432 .cfi_offset 5, -32
3433 .cfi_offset 6, -28
3434 .cfi_offset 7, -24
3435 .cfi_offset 8, -20
3436 .cfi_offset 9, -16
3437 .cfi_offset 10, -12
3438 .cfi_offset 11, -8
3439 .cfi_offset 14, -4
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3440 .loc 1 431 0
3441 0004 3AA3 adr r3, .L315+8
3442 0006 D3E90023 ldrd r2, [r3]
425:Core/Src/FIRFilterCode.c **** int j;
3443 .loc 1 425 0
3444 000a 85B0 sub sp, sp, #20
3445 .LCFI30:
3446 .cfi_def_cfa_offset 56
425:Core/Src/FIRFilterCode.c **** int j;
3447 .loc 1 425 0
3448 000c 0D46 mov r5, r1
3449 000e 0446 mov r4, r0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
ARM GAS /tmp/ccKC6A84.s page 74
3450 .loc 1 431 0
3451 0010 51EC100B vmov r0, r1, d0
3452 .LVL561:
3453 0014 FFF7FEFF bl __aeabi_dmul
3454 .LVL562:
3455 0018 41EC100B vmov d0, r0, r1
3456 001c FFF7FEFF bl cos
3457 .LVL563:
3458 0020 53EC102B vmov r2, r3, d0
3459 0024 10EE100A vmov r0, s0 @ int
3460 0028 1946 mov r1, r3
3461 002a FFF7FEFF bl __aeabi_dadd
3462 .LVL564:
432:Core/Src/FIRFilterCode.c **** {
3463 .loc 1 432 0
3464 002e 002D cmp r5, #0
431:Core/Src/FIRFilterCode.c **** for (j=0; j<N; j++)
3465 .loc 1 431 0
3466 0030 CDE90001 strd r0, [sp]
3467 .LVL565:
432:Core/Src/FIRFilterCode.c **** {
3468 .loc 1 432 0
3469 0034 50DD ble .L313
429:Core/Src/FIRFilterCode.c ****
3470 .loc 1 429 0
3471 0036 0026 movs r6, #0
3472 0038 0027 movs r7, #0
3473 003a 04EBC505 add r5, r4, r5, lsl #3
3474 .LVL566:
3475 003e B246 mov r10, r6
3476 0040 BB46 mov fp, r7
3477 0042 03E0 b .L307
3478 .LVL567:
3479 .L310:
3480 0044 DDE90001 ldrd r0, [sp]
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3481 .loc 1 434 0
3482 0048 C246 mov r10, r8
3483 .LVL568:
3484 004a CB46 mov fp, r9
3485 .LVL569:
3486 .L307:
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3487 .loc 1 434 0 is_stmt 0 discriminator 3
3488 004c 5246 mov r2, r10
3489 004e 5B46 mov r3, fp
3490 0050 F4E80289 ldrd r8, [r4], #8
3491 0054 FFF7FEFF bl __aeabi_dmul
3492 .LVL570:
3493 0058 3246 mov r2, r6
3494 005a 3B46 mov r3, r7
3495 005c CDE90201 strd r0, [sp, #8]
3496 0060 FFF7FEFF bl __aeabi_dsub
3497 .LVL571:
3498 0064 4246 mov r2, r8
3499 0066 4B46 mov r3, r9
3500 0068 FFF7FEFF bl __aeabi_dadd
ARM GAS /tmp/ccKC6A84.s page 75
3501 .LVL572:
432:Core/Src/FIRFilterCode.c **** {
3502 .loc 1 432 0 is_stmt 1 discriminator 3
3503 006c A542 cmp r5, r4
434:Core/Src/FIRFilterCode.c **** Reg2 = Reg1; // Shift the values.
3504 .loc 1 434 0 discriminator 3
3505 006e 8046 mov r8, r0
3506 0070 8946 mov r9, r1
3507 .LVL573:
3508 0072 5646 mov r6, r10
3509 0074 5F46 mov r7, fp
432:Core/Src/FIRFilterCode.c **** {
3510 .loc 1 432 0 discriminator 3
3511 0076 E5D1 bne .L310
438:Core/Src/FIRFilterCode.c ****
3512 .loc 1 438 0
3513 0078 5246 mov r2, r10
3514 007a 5B46 mov r3, fp
3515 007c 3046 mov r0, r6
3516 007e 3946 mov r1, r7
3517 0080 FFF7FEFF bl __aeabi_dmul
3518 .LVL574:
3519 0084 4246 mov r2, r8
3520 0086 0446 mov r4, r0
3521 0088 0D46 mov r5, r1
3522 008a 4B46 mov r3, r9
3523 008c 4046 mov r0, r8
3524 008e 4946 mov r1, r9
3525 0090 FFF7FEFF bl __aeabi_dmul
3526 .LVL575:
3527 0094 0246 mov r2, r0
3528 0096 0B46 mov r3, r1
3529 0098 2046 mov r0, r4
3530 009a 2946 mov r1, r5
3531 009c FFF7FEFF bl __aeabi_dadd
3532 .LVL576:
3533 00a0 4246 mov r2, r8
3534 00a2 0446 mov r4, r0
3535 00a4 0D46 mov r5, r1
3536 00a6 4B46 mov r3, r9
3537 00a8 DDE90201 ldrd r0, [sp, #8]
3538 00ac FFF7FEFF bl __aeabi_dmul
3539 .LVL577:
3540 00b0 0246 mov r2, r0
3541 00b2 0B46 mov r3, r1
3542 00b4 2046 mov r0, r4
3543 00b6 2946 mov r1, r5
3544 00b8 FFF7FEFF bl __aeabi_dsub
3545 .LVL578:
3546 .loc 1 440 0
3547 00bc 0022 movs r2, #0
3548 00be 0023 movs r3, #0
438:Core/Src/FIRFilterCode.c ****
3549 .loc 1 438 0
3550 00c0 0446 mov r4, r0
3551 00c2 0D46 mov r5, r1
3552 .LVL579:
ARM GAS /tmp/ccKC6A84.s page 76
3553 .loc 1 440 0
3554 00c4 FFF7FEFF bl __aeabi_dcmpgt
3555 .LVL580:
3556 00c8 30B1 cbz r0, .L313
3557 .loc 1 440 0 is_stmt 0 discriminator 1
3558 00ca 45EC104B vmov d0, r4, r5
441:Core/Src/FIRFilterCode.c **** else Mag = 1.0E-12;
442:Core/Src/FIRFilterCode.c ****
443:Core/Src/FIRFilterCode.c **** return(Mag);
444:Core/Src/FIRFilterCode.c **** }
3559 .loc 1 444 0 is_stmt 1 discriminator 1
3560 00ce 05B0 add sp, sp, #20
3561 .LCFI31:
3562 .cfi_remember_state
3563 .cfi_def_cfa_offset 36
3564 .LVL581:
3565 @ sp needed
3566 00d0 BDE8F04F pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
3567 .LCFI32:
3568 .cfi_restore 14
3569 .cfi_restore 11
3570 .cfi_restore 10
3571 .cfi_restore 9
3572 .cfi_restore 8
3573 .cfi_restore 7
3574 .cfi_restore 6
3575 .cfi_restore 5
3576 .cfi_restore 4
3577 .cfi_def_cfa_offset 0
3578 .LVL582:
440:Core/Src/FIRFilterCode.c **** else Mag = 1.0E-12;
3579 .loc 1 440 0 discriminator 1
3580 00d4 FFF7FEBF b sqrt
3581 .LVL583:
3582 .L313:
3583 .LCFI33:
3584 .cfi_restore_state
441:Core/Src/FIRFilterCode.c **** else Mag = 1.0E-12;
3585 .loc 1 441 0
3586 00d8 9FED030B vldr.64 d0, .L315
3587 .LVL584:
3588 .loc 1 444 0
3589 00dc 05B0 add sp, sp, #20
3590 .LCFI34:
3591 .cfi_def_cfa_offset 36
3592 .LVL585:
3593 @ sp needed
3594 00de BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
3595 .LVL586:
3596 .L316:
3597 00e2 00BFAFF3 .align 3
3597 0080
3598 .L315:
3599 00e8 11EA2D81 .word 2167269905
3600 00ec 9997713D .word 1030854553
3601 00f0 182D4454 .word 1413754136
3602 00f4 FB210940 .word 1074340347
ARM GAS /tmp/ccKC6A84.s page 77
3603 .cfi_endproc
3604 .LFE5:
3606 .text
3607 .Letext0:
3608 .file 2 "Core/Inc/FIRFilterCode.h"
3609 .file 3 "/usr/include/newlib/sys/lock.h"
3610 .file 4 "/usr/include/newlib/sys/_types.h"
3611 .file 5 "/usr/lib/gcc/arm-none-eabi/7.3.1/include/stddef.h"
3612 .file 6 "/usr/include/newlib/sys/reent.h"
3613 .file 7 "/usr/include/newlib/math.h"
3614 .file 8 "/usr/include/newlib/stdlib.h"
3615 .file 9 "<built-in>"
ARM GAS /tmp/ccKC6A84.s page 78
DEFINED SYMBOLS
*ABS*:0000000000000000 FIRFilterCode.c
/tmp/ccKC6A84.s:24 .text.RectWinFIR:0000000000000000 $t
/tmp/ccKC6A84.s:32 .text.RectWinFIR:0000000000000000 RectWinFIR
/tmp/ccKC6A84.s:71 .text.RectWinFIR:000000000000001a $d
/tmp/ccKC6A84.s:76 .text.RectWinFIR:0000000000000024 $t
/tmp/ccKC6A84.s:529 .text.RectWinFIR:0000000000000340 $d
/tmp/ccKC6A84.s:546 .text.RectWinFIR:0000000000000370 $t
/tmp/ccKC6A84.s:914 .text.RectWinFIR:00000000000005a8 $d
/tmp/ccKC6A84.s:928 .text.Sinc:0000000000000000 $t
/tmp/ccKC6A84.s:936 .text.Sinc:0000000000000000 Sinc
/tmp/ccKC6A84.s:991 .text.Sinc:0000000000000048 $d
/tmp/ccKC6A84.s:1001 .text.Bessel:0000000000000000 $t
/tmp/ccKC6A84.s:1009 .text.Bessel:0000000000000000 Bessel
/tmp/ccKC6A84.s:1195 .text.Bessel:0000000000000120 $d
/tmp/ccKC6A84.s:1217 .text.FIRFilterWindow:0000000000000000 $t
/tmp/ccKC6A84.s:1225 .text.FIRFilterWindow:0000000000000000 FIRFilterWindow
/tmp/ccKC6A84.s:1785 .text.FIRFilterWindow:0000000000000368 $d
/tmp/ccKC6A84.s:1800 .text.FIRFilterWindow:000000000000039c $t
/tmp/ccKC6A84.s:2037 .text.FIRFilterWindow:00000000000004f8 $d
/tmp/ccKC6A84.s:2060 .text.FIRFreqError:0000000000000000 $t
/tmp/ccKC6A84.s:2068 .text.FIRFreqError:0000000000000000 FIRFreqError
/tmp/ccKC6A84.s:2396 .text.FIRFreqError:0000000000000200 $d
/tmp/ccKC6A84.s:2412 .text.FIRFreqError:0000000000000238 $t
/tmp/ccKC6A84.s:3389 .text.FIRFreqError:0000000000000890 $d
/tmp/ccKC6A84.s:3413 .text.Goertzel:0000000000000000 $t
/tmp/ccKC6A84.s:3421 .text.Goertzel:0000000000000000 Goertzel
/tmp/ccKC6A84.s:3599 .text.Goertzel:00000000000000e8 $d
UNDEFINED SYMBOLS
__aeabi_i2d
__aeabi_dmul
__aeabi_dsub
__aeabi_dcmpgt
__aeabi_dcmplt
__aeabi_ddiv
__aeabi_dcmpeq
__aeabi_dadd
memset
sin
cos
pow
__aeabi_dcmple
__aeabi_dcmpge
malloc
free
sqrt
__aeabi_d2iz