summaryrefslogtreecommitdiffstats
path: root/Graphic_Equalizer_v1.0/doc/html/runfft_8hcc-source.html
blob: 28ce4b04bc602c13b7d336f32b18d8c6459b152b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Graphic Equalizer 2: C:/Project  Marcel &amp; Oliver/Graphic_Equalizer/src/runfft.hcc Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">C:</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">Project  Marcel &amp; Oliver</a>&nbsp;/&nbsp;<a class="el" href="dir_000002.html">Graphic_Equalizer</a>&nbsp;/&nbsp;<a class="el" href="dir_000004.html">src</a></div>
<h1>runfft.hcc</h1><a href="runfft_8hcc.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 
00020 <span class="preprocessor">#include &lt;stdlib.hch&gt;</span>
00021 <span class="preprocessor">#include "pal_master.hch"</span>
00022 
00023 <span class="preprocessor">#include "<a class="code" href="configuration_8hch.html">configuration.hch</a>"</span>
00024 <span class="preprocessor">#if USE_RUNFFT</span>
00025 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="audio_8hch.html">audio.hch</a>"</span>
00026 <span class="preprocessor">#include "<a class="code" href="fft_8hch.html">fft.hch</a>"</span>
00027 
00028 <span class="preprocessor">#if HAVE_DEBUG</span>
00029 <span class="preprocessor"></span><span class="preprocessor">        #include "debug.hch"</span>
00030 <span class="preprocessor">#endif</span>
00031 <span class="preprocessor"></span>
00032 <span class="comment">/*</span>
00033 <span class="comment"> * Forward declarations</span>
00034 <span class="comment"> */</span>
00035 <span class="keyword">static</span> macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
00036 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
00037 <span class="preprocessor"></span><span class="comment">//input buffer</span>
00038 ram <span class="keywordtype">signed</span> 18 audio_buffer_in[256] with { block = <span class="stringliteral">"BlockRAM"</span>};
00039 <span class="comment">//output buffer</span>
00040 ram <span class="keywordtype">signed</span> 18 audio_buffer_out[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00041 <span class="preprocessor">#else</span>
00042 <span class="preprocessor"></span><span class="comment">//input buffer</span>
00043 ram <span class="keywordtype">signed</span> 16 audio_buffer_in[256] with { block = <span class="stringliteral">"BlockRAM"</span>};
00044 <span class="comment">//output buffer</span>
00045 ram <span class="keywordtype">signed</span> 16 audio_buffer_out[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00046 <span class="preprocessor">#endif</span>
00047 <span class="preprocessor"></span><span class="comment">//EQ settings for the FFT</span>
00048 ram <span class="keywordtype">unsigned</span> 4 EQ_info[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00049 <span class="comment">//EQ settings received from the display</span>
00050 
00051 
00052 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
00053 <span class="preprocessor"></span><span class="keywordtype">signed</span> 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
00054 
00055 <span class="keywordtype">signed</span> 18 *audioptr_out1,*audioptr_out2;
00056 
00057 <span class="keywordtype">unsigned</span> 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
00058 <span class="preprocessor">#else</span>
00059 <span class="preprocessor"></span><span class="keywordtype">signed</span> 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
00060 
00061 <span class="keywordtype">signed</span> 16 *audioptr_out1,*audioptr_out2;
00062 
00063 <span class="keywordtype">unsigned</span> 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
00064 <span class="preprocessor">#endif</span>
00065 <span class="preprocessor"></span>
00076 macro proc <a class="code" href="audio_8hcc.html#a1">audio_main</a>(audiodata, AUDIOIN, AUDIOOUT)
00077 {
00078         <span class="keywordtype">signed</span> 18 sample;
00079         <span class="keywordtype">unsigned</span> 6 sample_count;
00080         <span class="keywordtype">unsigned</span> 8 i,cycle;
00081         <span class="keywordtype">unsigned</span> 4 eqinfo;
00082 
00083         <span class="keywordtype">unsigned</span> 1 FFT_Sync, first;
00084         macro expr OW = PalAudioOutGetMaxDataWidthCT ();
00085         macro expr IW = PalAudioInGetMaxDataWidthCT  ();
00086         <span class="keywordtype">signed</span> LeftNew, RightNew;
00087         <span class="keywordtype">signed</span> Output_sample;
00088 
00089         ram <span class="keywordtype">unsigned</span> 6 input[64];
00090 
00091         <span class="comment">//pointers for double and quadruple buffering:</span>
00092         audioptr_in1 = &amp;audio_buffer_in[0];
00093         audioptr_in2 = &amp;audio_buffer_in[64];
00094         audioptr_in3 = &amp;audio_buffer_in[128];
00095         audioptr_in4 = &amp;audio_buffer_in[192];
00096 
00097         audioptr_out1 = &amp;audio_buffer_out[0];
00098         audioptr_out2 = &amp;audio_buffer_out[64];
00099 
00100         displayptr1 = &amp;audiodata.ifft_info.write[0];
00101         displayptr2 = &amp;audiodata.ifft_info.write[64];
00102         displayptr3 = &amp;audiodata.ifft_info.write[128];
00103         displayptr4 = &amp;audiodata.ifft_info.write[192];
00104 
00105         FFT_Sync=0;
00106 par
00107 {
00108         <span class="keywordflow">for</span>(;;)
00109         {
00110                 <span class="keywordflow">if</span> (FFT_Sync)   <span class="comment">//if 64 samples are read from ADC...</span>
00111                 {
00112                         par
00113                         {
00114                                 <span class="comment">// switch pointers </span>
00115                                 audioptr_in1 = audioptr_in2;
00116                                 audioptr_in2 = audioptr_in3;
00117                                 audioptr_in3 = audioptr_in4;
00118                                 audioptr_in4 = audioptr_in1;
00119                                 
00120                                 audioptr_out1 = audioptr_out2;
00121                                 audioptr_out2 = audioptr_out1;
00122 
00123                                 displayptr1=displayptr2;
00124                                 displayptr2=displayptr3;
00125                                 displayptr3=displayptr4;
00126                                 displayptr4=displayptr1;
00127                                 
00128                                 FFT_Sync = 0;
00129                         }
00130                 
00131                         <span class="comment">// FFT calculation</span>
00132                         <a class="code" href="fft_8hcc.html#a4">perform_fft</a>(audioptr_in1);
00133                         
00134 <span class="preprocessor">#if PERFORM_FFT_CALCULATION</span>
00135 <span class="preprocessor"></span>                        <a class="code" href="fft_8hcc.html#a6">equalize_audio</a>(&amp;audiodata);
00136 <span class="preprocessor">#endif</span>
00137 <span class="preprocessor"></span>                        <span class="comment">// inverse FFT calculation</span>
00138                         <a class="code" href="fft_8hcc.html#a5">perform_ifft</a>(audioptr_out1,displayptr1);                
00139                 }
00140                 <span class="keywordflow">else</span>
00141                         delay;
00142         }       
00143 
00144         <span class="keywordflow">for</span>(sample_count=0;;)<span class="comment">//store the samples in the inputbuffer</span>
00145         {
00146                 <span class="keywordflow">if</span> (!FFT_Sync)
00147                 {
00148                         par
00149                         {
00150                                 seq
00151                                 {
00152                                         PalAudioInRead(AUDIOIN, &amp;LeftNew, &amp;RightNew);
00153 <span class="preprocessor">#if HARDWARE_MULTIPLY                                   </span>
00154 <span class="preprocessor"></span>                                        audioptr_in1[sample_count] = LeftNew;<span class="comment">//drop 2 LSB's</span>
00155 <span class="preprocessor">#else</span>
00156 <span class="preprocessor"></span>                                        audioptr_in1[sample_count] = (LeftNew\\2);<span class="comment">//drop 2 LSB's</span>
00157 <span class="preprocessor">#endif</span>
00158 <span class="preprocessor"></span>                                        sample_count++; 
00159                                         <span class="keywordflow">if</span> (!sample_count) 
00160                                         {
00161                                                 FFT_Sync = 1; 
00162                                         }
00163                                 }
00164                                 seq
00165                                 {
00166                                         Output_sample = audioptr_out2[sample_count];
00167                                 }
00168                         }
00169                 }
00170                 <span class="keywordflow">else</span>
00171                 {
00172                         delay;
00173                 }
00174         }
00175         <span class="keywordflow">for</span>(;;)
00176         {
00177                 PalAudioOutWrite(AUDIOOUT,(<span class="keywordtype">signed</span> OW)(Output_sample @ 0),(<span class="keywordtype">signed</span> OW)(Output_sample @ 0));
00178         }
00179 }<span class="comment">//end par</span>
00180 }<span class="comment">// end function</span>
00181 <span class="preprocessor">#endif</span>
00182 <span class="preprocessor"></span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
</body>
</html>