summaryrefslogtreecommitdiffstats
path: root/Graphic_Equalizer/doc/html/runfft_8hcc-source.html
blob: 554df3533faaf733e6e741d6f1666b8f4c68eabb (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
<!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: 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="files.html">File&nbsp;List</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 "fft.hch"</span>
00027 
00028 <span class="preprocessor">#include "debug.hch"</span>
00029 
00030 <span class="comment">/*</span>
00031 <span class="comment"> * Forward declarations</span>
00032 <span class="comment"> */</span>
00033 <span class="keyword">static</span> macro expr ClockRate = PAL_ACTUAL_CLOCK_RATE;
00034 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
00035 <span class="preprocessor"></span><span class="comment">//input buffer</span>
00036 ram <span class="keywordtype">signed</span> 18 audio_buffer_in[256] with { block = <span class="stringliteral">"BlockRAM"</span>};
00037 <span class="comment">//output buffer</span>
00038 ram <span class="keywordtype">signed</span> 18 audio_buffer_out[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00039 <span class="preprocessor">#else</span>
00040 <span class="preprocessor"></span><span class="comment">//input buffer</span>
00041 ram <span class="keywordtype">signed</span> 16 audio_buffer_in[256] with { block = <span class="stringliteral">"BlockRAM"</span>};
00042 <span class="comment">//output buffer</span>
00043 ram <span class="keywordtype">signed</span> 16 audio_buffer_out[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00044 <span class="preprocessor">#endif</span>
00045 <span class="preprocessor"></span><span class="comment">//EQ settings for the FFT</span>
00046 ram <span class="keywordtype">unsigned</span> 4 EQ_info[128] with { block = <span class="stringliteral">"BlockRAM"</span>}; 
00047 <span class="comment">//EQ settings received from the display</span>
00048 
00049 
00050 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
00051 <span class="preprocessor"></span><span class="keywordtype">signed</span> 18 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
00052 
00053 <span class="keywordtype">signed</span> 18 *audioptr_out1,*audioptr_out2;
00054 
00055 <span class="keywordtype">unsigned</span> 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
00056 <span class="preprocessor">#else</span>
00057 <span class="preprocessor"></span><span class="keywordtype">signed</span> 16 *audioptr_in1,*audioptr_in2,*audioptr_in3,*audioptr_in4;
00058 
00059 <span class="keywordtype">signed</span> 16 *audioptr_out1,*audioptr_out2;
00060 
00061 <span class="keywordtype">unsigned</span> 6 *displayptr1,*displayptr2,*displayptr3,*displayptr4;
00062 <span class="preprocessor">#endif</span>
00063 <span class="preprocessor"></span>
00074 macro proc <a class="code" href="audio_8hcc.html#a1">audio_main</a>(audiodata, AUDIOIN, AUDIOOUT)
00075 {
00076         <span class="keywordtype">signed</span> 18 sample;
00077         <span class="keywordtype">unsigned</span> 6 sample_count;
00078         <span class="keywordtype">unsigned</span> 8 i,cycle;
00079         <span class="keywordtype">unsigned</span> 4 eqinfo;
00080 
00081         <span class="keywordtype">unsigned</span> 1 FFT_Sync, first;
00082         macro expr OW = PalAudioOutGetMaxDataWidthCT ();
00083         macro expr IW = PalAudioInGetMaxDataWidthCT  ();
00084         <span class="keywordtype">signed</span> LeftNew, RightNew;
00085         <span class="keywordtype">signed</span> Output_sample;
00086 
00087         ram <span class="keywordtype">unsigned</span> 6 input[64];
00088 
00089         <span class="comment">//pointers for double and quadruple buffering:</span>
00090         audioptr_in1 = &amp;audio_buffer_in[0];
00091         audioptr_in2 = &amp;audio_buffer_in[64];
00092         audioptr_in3 = &amp;audio_buffer_in[128];
00093         audioptr_in4 = &amp;audio_buffer_in[192];
00094 
00095         audioptr_out1 = &amp;audio_buffer_out[0];
00096         audioptr_out2 = &amp;audio_buffer_out[64];
00097 
00098         displayptr1 = &amp;audiodata.ifft_info.write[0];
00099         displayptr2 = &amp;audiodata.ifft_info.write[64];
00100         displayptr3 = &amp;audiodata.ifft_info.write[128];
00101         displayptr4 = &amp;audiodata.ifft_info.write[192];
00102 
00103         FFT_Sync=0;
00104 par
00105 {
00106         <span class="keywordflow">for</span>(;;)
00107         {
00108                 <span class="keywordflow">if</span> (FFT_Sync)   <span class="comment">//if 64 samples are read from ADC...</span>
00109                 {
00110                         par
00111                         {
00112                                 <span class="comment">// switch pointers </span>
00113                                 audioptr_in1 = audioptr_in2;
00114                                 audioptr_in2 = audioptr_in3;
00115                                 audioptr_in3 = audioptr_in4;
00116                                 audioptr_in4 = audioptr_in1;
00117                                 
00118                                 audioptr_out1 = audioptr_out2;
00119                                 audioptr_out2 = audioptr_out1;
00120 
00121                                 displayptr1=displayptr2;
00122                                 displayptr2=displayptr3;
00123                                 displayptr3=displayptr4;
00124                                 displayptr4=displayptr1;
00125                                 
00126                                 FFT_Sync = 0;
00127                         }
00128                 
00129                         <span class="comment">// FFT calculation</span>
00130                         perform_fft(audioptr_in1);
00131                         
00132 <span class="preprocessor">#if PERFORM_FFT_CALCULATION</span>
00133 <span class="preprocessor"></span>                        <a class="code" href="fft_8hcc.html#a5">equalize_audio</a>(&amp;audiodata);
00134 <span class="preprocessor">#endif</span>
00135 <span class="preprocessor"></span>                        <span class="comment">// inverse FFT calculation</span>
00136                         perform_ifft(audioptr_out1,displayptr1);                
00137                 }
00138                 <span class="keywordflow">else</span>
00139                         delay;
00140         }       
00141 
00142         <span class="keywordflow">for</span>(sample_count=0;;)<span class="comment">//store the samples in the inputbuffer</span>
00143         {
00144                 <span class="keywordflow">if</span> (!FFT_Sync)
00145                 {
00146                         par
00147                         {
00148                                 seq
00149                                 {
00150                                         PalAudioInRead(AUDIOIN, &amp;LeftNew, &amp;RightNew);
00151 <span class="preprocessor">#if HARDWARE_MULTIPLY                                   </span>
00152 <span class="preprocessor"></span>                                        audioptr_in1[sample_count] = LeftNew;<span class="comment">//drop 2 LSB's</span>
00153 <span class="preprocessor">#else</span>
00154 <span class="preprocessor"></span>                                        audioptr_in1[sample_count] = (LeftNew\\2);<span class="comment">//drop 2 LSB's</span>
00155 <span class="preprocessor">#endif</span>
00156 <span class="preprocessor"></span>                                        sample_count++; 
00157                                         <span class="keywordflow">if</span> (!sample_count) 
00158                                         {
00159                                                 FFT_Sync = 1; 
00160                                         }
00161                                 }
00162                                 seq
00163                                 {
00164                                         Output_sample = audioptr_out2[sample_count];
00165                                 }
00166                         }
00167                 }
00168                 <span class="keywordflow">else</span>
00169                 {
00170                         delay;
00171                 }
00172         }
00173         <span class="keywordflow">for</span>(;;)
00174         {
00175                 PalAudioOutWrite(AUDIOOUT,(<span class="keywordtype">signed</span> OW)(Output_sample @ 0),(<span class="keywordtype">signed</span> OW)(Output_sample @ 0));
00176         }
00177 }<span class="comment">//end par</span>
00178 }<span class="comment">// end function</span>
00179 <span class="preprocessor">#endif</span>
00180 <span class="preprocessor"></span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Nov 29 12:04:48 2004 for Graphic Equalizer 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>