📄 wavdemo.lst
字号:
C51 COMPILER V8.02 WAVDEMO 02/24/2006 12:50:58 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE WAVDEMO
OBJECT MODULE PLACED IN WAVDEMO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WAVDEMO.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 WWW.MCU123.NET/BBS
3 欢迎大家多共享一些例程。。那怕是最简单的。
4 因为别人也需要你的帮助的。
5
6 程序功能:
7 51单片机通过HPI口装载程序到DSP中
8 */
-
9 #include <Reg52.h>
10 #include <absacc.h>
11 #include <stdio.h>
12 #include <intrins.h>
13 #include <dspcode.h>
14 /*定义宏*/
15 #define uint unsigned int
16 #define uchar unsigned char
17
18 #define VOL1 0x81
19 #define VOL2 0x82
20
21 #define L_LINE_VOLUME 0x00
22 #define R_LINE_VOLUME 0x01
23 #define L_HEADPHONE_VOLUME 0x02
24 #define R_HEADPHONE_VOLUME 0x03
25 #define A_AUDIO_PATH 0x04
26 #define D_AUDIO_PATH 0x05
27 #define POWER_CON 0x06
28 #define D_AUDIO_INTERFACE 0x07
29 #define SAMPLE_RATE 0x08
30 #define D_INTERFACE_ACT 0x09
31 #define RESET 0x0f
32
33
34 /*定义寄存器端口地址*/
35 #define HPICL XBYTE[0xe000]
36 #define HPICH XBYTE[0xe100]
37 #define WR_HPIL0_D XBYTE[0xe200]
38 #define WR_HPIH0_D XBYTE[0xe300]
39 #define WR_HPIL_A XBYTE[0xe400]
40 #define WR_HPIH_A XBYTE[0xe500]
41 #define WR_HPIL1_D XBYTE[0xe600]
42 #define WR_HPIH1_D XBYTE[0xe700]
43
44 #define RD_HPIL0_D XBYTE[0xeA00]
45 #define RD_HPIH0_D XBYTE[0xeB00]
46 #define RD_HPIL1_D XBYTE[0xeE00]
47 #define RD_HPIH1_D XBYTE[0xeF00]
48
49 #define WR_CR XBYTE[0x7100]
50 #define WR_PARA XBYTE[0x7000]
51
52 sbit NRST =P1^2;
53 sbit RST8019 =P1^3;
54 sbit RST013 =P1^6;
C51 COMPILER V8.02 WAVDEMO 02/24/2006 12:50:58 PAGE 2
55
56 sbit CS =P1^1;
57 sbit SDIN =P3^5;
58 sbit SCLK =P3^4;
59
60 sbit SDA =P1^4;
61 sbit SCK =P1^5;
62
63
64 uchar hpic;
65 bit ok,readT,key_down;
66 unsigned char time,stoptime,ms,DSPorder;
67 unsigned char volume;
68
69 void wr_dspcode();
70 void delay(uint wu);
71 void LOADDSP();
72 void init_51();
73 void wr_hpi(uint addr,uint dat);
74 unsigned char rd_hpi(uint addr);
75 void rst8019();
76 void init_AIC23();
77 void write_AIC23(uchar addr,uint dat);
78 void Nrst();
79
80 void delay1(unsigned char k);
81 unsigned char getDSP();
82
83 main()
84 {
85 1 uchar i,j,key;
86 1 uint k;
87 1
88 1 init_AIC23();
89 1
90 1 delay(10000);
91 1 rst8019();
92 1 Nrst();
93 1 LOADDSP();
94 1 init_51();
95 1
96 1 delay(30000);
97 1 volume=108;
98 1 write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);
99 1
100 1 while(1);
101 1
102 1 }
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'j': unreferenced local variable
*** WARNING C280 IN LINE 85 OF WAVDEMO.C: 'key': unreferenced local variable
*** WARNING C280 IN LINE 86 OF WAVDEMO.C: 'k': unreferenced local variable
103
104 void delay(uint wu)
105 {
106 1 for(wu;wu>0;wu--);
107 1 }
108 void delay1(unsigned char k)
109 {
110 1 for(;k>0;k--);
111 1 }
112
C51 COMPILER V8.02 WAVDEMO 02/24/2006 12:50:58 PAGE 3
113 void Nrst()
114 {
115 1 NRST=0;
116 1 delay(100);
117 1 NRST=1;
118 1 delay(100);
119 1 }
120
121 void LOADDSP()
122 {
123 1 wr_dspcode();
124 1 }
125 unsigned char rd_hpi(uint addr)
126 {
127 1 unsigned char i;
128 1 WR_HPIL_A=addr/256;
129 1 WR_HPIH_A=addr%256;
130 1 i=RD_HPIL0_D;
131 1 i=RD_HPIH0_D;
132 1 return(i);
133 1 }
134
135 void wr_hpi(uint addr,uint dat)
136 {
137 1 WR_HPIL_A=addr/256;
138 1 WR_HPIH_A=addr%256;
139 1 WR_HPIL1_D=dat/256;
140 1 WR_HPIH1_D=dat%256;
141 1 }
142
143 void wr_dspcode()
144 {
145 1 uchar code *dspptr,*temp;
146 1 uchar len;
147 1 char i;
148 1 uint addr;
149 1
150 1 HPICL=0x08; //clear HPIint,least is first
151 1 HPICH=0x08;
152 1
153 1 dspptr=dspcode;
154 1 while(1)
155 1 {
156 2 len=*dspptr++;
157 2 if(len==0) break;
158 2 else
159 2 {
160 3 addr=((*dspptr++)*256)+(*dspptr++);
161 3 addr--;
162 3 temp=dspptr;
163 3 again:
164 3 WR_HPIL_A=addr/256;
165 3 WR_HPIH_A=addr%256;
166 3 for(i=0;i<len/2;i++)
167 3 {
168 4 WR_HPIL0_D=*dspptr++;
169 4 WR_HPIH0_D=*dspptr++;
170 4 }
171 3 dspptr=temp;
172 3 addr++;
173 3 WR_HPIL_A=addr/256;
174 3 WR_HPIH_A=addr%256;
C51 COMPILER V8.02 WAVDEMO 02/24/2006 12:50:58 PAGE 4
175 3 for(i=0;i<len/2;i++)
176 3 {
177 4 if(RD_HPIL0_D!=*dspptr++) goto again; //不相等,再写
178 4 if(RD_HPIH0_D!=*dspptr++) goto again;
179 4 }
180 3 }
181 2 }
182 1 WR_HPIL_A=0x00;
183 1 WR_HPIH_A=0x7f;
184 1 WR_HPIL1_D=0x00; //THE START ADDRESS OF RUN
185 1 WR_HPIH1_D=0x80;
186 1
187 1 }
188
189 Timer0() interrupt 1
190 {
191 1 ok=1;
192 1 ms++;
193 1 }
194
195 void init_51()
196 {
197 1 TMOD=0x21;
198 1 SCON=0x40;
199 1 REN=1;
200 1 TH1=0xfd;
201 1 TL1=0xfd;
202 1 ET1=0;
203 1 ES=0;
204 1 IT0=1;
205 1 EX0=0;
206 1 ET0=1;
207 1 EA=1;
208 1 TR1=1;
209 1 TR0=1;
210 1 }
211 /***************************************************************/
212 void rst8019()
213 {
214 1 RST8019=1;
215 1 delay(100);
216 1 RST8019=0;
217 1 }
218 unsigned char getDSP()
219 {
220 1 WR_HPIL_A=0;
221 1 WR_HPIH_A=0x7d;
222 1 return(RD_HPIH0_D);
223 1 }
224 void init_AIC23()
225 {
226 1 write_AIC23(RESET,0);
227 1 write_AIC23(D_INTERFACE_ACT,0x001);
228 1 write_AIC23(POWER_CON,0);
229 1 write_AIC23(SAMPLE_RATE,0x022); //44.1k
230 1 // write_AIC23(SAMPLE_RATE,0x062); //22.05k
231 1 // write_AIC23(SAMPLE_RATE,0x02e); //8.021k
232 1
233 1 write_AIC23(L_LINE_VOLUME,0x0117);
234 1 write_AIC23(L_LINE_VOLUME,0x0117);
235 1
236 1 volume=100;
C51 COMPILER V8.02 WAVDEMO 02/24/2006 12:50:58 PAGE 5
237 1 write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);
238 1 write_AIC23(R_HEADPHONE_VOLUME,0x0180+volume);
239 1
240 1 // write_AIC23(A_AUDIO_PATH,0x009); //bypass DAC OFF
241 1 // write_AIC23(A_AUDIO_PATH,0x014); //MIC ADC DAC ON 0DB
242 1 // write_AIC23(A_AUDIO_PATH,0x1fc); //bypass MIC ADC DAC ON 0DB sidetone
243 1 write_AIC23(A_AUDIO_PATH,0x07d); //bypass MIC ADC DAC ON 20DB sidetone(-6db)
244 1 // write_AIC23(A_AUDIO_PATH,0x011); //LINE ADC DAC ON
245 1
246 1 write_AIC23(D_AUDIO_PATH,0x04);
247 1
248 1 write_AIC23(D_AUDIO_INTERFACE,0x043); //master dsp mode
249 1 }
250 void write_AIC23(uchar addr,uint dat)
251 {
252 1 uchar i;
253 1 dat|=addr<<9;
254 1 CS=0;
255 1 for(i=0;i<16;i++)
256 1 {
257 2 SCLK=0;
258 2 if((dat<<i)&0x8000)
259 2 SDIN=1;
260 2 else
261 2 SDIN=0;
262 2 SCLK=1;
263 2 }
264 1 SCLK=0;
265 1 CS=1;
266 1 }
267
268 unsigned char getkey()
269 {
270 1 uchar key;
271 1 if(RI)
272 1 {
273 2 RI=0;
274 2 key=SBUF;
275 2 return(key);
276 2 }
277 1 return(255);
278 1 }
279
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 673 ----
CONSTANT SIZE = 5071 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 14
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 4 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -