📄 fpusb.lst
字号:
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE FPUSB
OBJECT MODULE PLACED IN FPUSB.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FPUSB.c BROWSE INCDIR(C:\Cypress\USB\Target\Inc\) DEBUG OBJECTEXTEND
line level source
1 #pragma NOIV // Do not generate interrupt vectors
2
3 #include "fx2.h"
4 #include "fx2regs.h"
5 #include "fx2sdly.h" // SYNCDELAY macro
6
7 extern BOOL GotSUD; // Received setup data flag
8 extern BOOL Sleep;
9 extern BOOL Rwuen;
10 extern BOOL Selfpwr;
11
12 BYTE Configuration; // Current configuration
13 BYTE AlternateSetting; // Alternate settings
14
15 //-----------------------------------------------------------------------------
16 // Constants
17 //-----------------------------------------------------------------------------
18 #define VR_UPLOAD 0xc0
19 #define VR_DOWNLOAD 0x40
20
21 #define VR_ANCHOR_DLD 0xa0 // handled by core
22
23 #define VR_Reset 0xb0
24 #define VR_Intr 0xb1
25 #define VR_Chn_Sel 0xb2
26 #define VR_test_WR 0xb3
27
28 //-----------------------------------------------------------------------------
29 // Task Dispatcher hooks
30 // The following hooks are called by the task dispatcher.
31 //-----------------------------------------------------------------------------
32
33 sbit PA0 = IOA ^ 0;
34 sbit PA1 = IOA ^ 1;
35 sbit PA2 = IOA ^ 2;
36 sbit PA3 = IOA ^ 3;
37 sbit PA4 = IOA ^ 4;
38 sbit PA5 = IOA ^ 5;
39 sbit PA6 = IOA ^ 6;
40 sbit PA7 = IOA ^ 7;
41
42 void TD_Init(void) // Called once at startup
43 {
44 1 // set the CPU clock to 48MHz
45 1 CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
46 1
47 1 SYNCDELAY;
48 1 IFCONFIG = 0xcb; // slave fifo, internal clk, ifclk not output, async
49 1
50 1 SYNCDELAY;
51 1 EP2CFG = 0xA2; // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x
52 1
53 1 SYNCDELAY;
54 1 FIFORESET = 0x80; // reset all FIFOs
55 1 SYNCDELAY;
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 2
56 1 FIFORESET = 0x02;
57 1 SYNCDELAY;
58 1 FIFORESET = 0x04;
59 1 SYNCDELAY;
60 1 FIFORESET = 0x06;
61 1 SYNCDELAY;
62 1 FIFORESET = 0x08;
63 1 SYNCDELAY;
64 1 FIFORESET = 0x00;
65 1
66 1 SYNCDELAY;
67 1 EP2FIFOCFG = 0x00;
68 1 SYNCDELAY;
69 1 EP2FIFOCFG = 0x11; // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=1
70 1
71 1 SYNCDELAY;
72 1 OUTPKTEND = 0x82;
73 1 SYNCDELAY;
74 1 OUTPKTEND = 0x82;
75 1
76 1 SYNCDELAY;
77 1 EP6AUTOINLENH = 2; // EP6 auto in length: 512
78 1 SYNCDELAY;
79 1 EP6AUTOINLENL = 0;
80 1
81 1
82 1 SYNCDELAY;
83 1 EP6FIFOCFG = 0x09; // EP6 is AUTOOUT=0, AUTOIN=1, ZEROLEN=0, WORDWIDE=1
84 1
85 1 SYNCDELAY;
86 1 EP4FIFOCFG = 0x00;
87 1
88 1 SYNCDELAY;
89 1 EP8FIFOCFG = 0x00;
90 1
91 1 SYNCDELAY;
92 1 PINFLAGSAB = 0x00; // defines FLAGA as prog-level flag, pointed to by FIFOADR[1:0]
93 1 // FLAGB as full flag, pointed to by FIFOADR[1:0]
94 1
95 1 SYNCDELAY;
96 1 PINFLAGSCD = 0x00; // FLAGC as empty flag
97 1
98 1 SYNCDELAY;
99 1 PORTACFG = 0x00; // used PA7/FLAGD as a port pin
100 1
101 1 SYNCDELAY;
102 1 FIFOPINPOLAR = 0x00; // set all slave FIFO interface pins as active low
103 1
104 1 OEA = 0x80;
105 1 IOA = 0x00;
106 1 }
107
108 void TD_Poll(void) // Called repeatedly while the device is idle
109 {
110 1 // if there is some data in EP2 OUT, re-arm it
111 1 if(!(EP2468STAT & bmEP2EMPTY))
112 1 {
113 2 //OUTPKTEND = 0x02;
114 2 SYNCDELAY;
115 2 }
116 1 }
117
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 3
118 BOOL TD_Suspend(void) // Called before the device goes into suspend mode
119 {
120 1 return(TRUE);
121 1 }
122
123 BOOL TD_Resume(void) // Called after the device resumes
124 {
125 1 return(TRUE);
126 1 }
127
128 //-----------------------------------------------------------------------------
129 // Device Request hooks
130 // The following hooks are called by the end point 0 device request parser.
131 //-----------------------------------------------------------------------------
132
133 BOOL DR_GetDescriptor(void)
134 {
135 1 return(TRUE);
136 1 }
137
138 BOOL DR_SetConfiguration(void) // Called when a Set Configuration command is received
139 {
140 1 Configuration = SETUPDAT[2];
141 1 return(TRUE); // Handled by user code
142 1 }
143
144 BOOL DR_GetConfiguration(void) // Called when a Get Configuration command is received
145 {
146 1 EP0BUF[0] = Configuration;
147 1 EP0BCH = 0;
148 1 EP0BCL = 1;
149 1 return(TRUE); // Handled by user code
150 1 }
151
152 BOOL DR_SetInterface(void) // Called when a Set Interface command is received
153 {
154 1 AlternateSetting = SETUPDAT[2];
155 1 return(TRUE); // Handled by user code
156 1 }
157
158 BOOL DR_GetInterface(void) // Called when a Set Interface command is received
159 {
160 1 EP0BUF[0] = AlternateSetting;
161 1 EP0BCH = 0;
162 1 EP0BCL = 1;
163 1 return(TRUE); // Handled by user code
164 1 }
165
166 BOOL DR_GetStatus(void)
167 {
168 1 return(TRUE);
169 1 }
170
171 BOOL DR_ClearFeature(void)
172 {
173 1 return(TRUE);
174 1 }
175
176 BOOL DR_SetFeature(void)
177 {
178 1 return(TRUE);
179 1 }
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 4
180
181 BOOL DR_VendorCmnd(void)
182 {
183 1 // BYTE i;
184 1 int i;
185 1 switch(SETUPDAT[1])
186 1 {
187 2 case VR_Reset:
188 2 TD_Init();
189 2 break;
190 2
191 2 case VR_Intr:
192 2 PA7 = 1;
193 2 for(i=0;i<10;i++);
194 2 PA7 = 0;
195 2 break;
196 2
197 2 case VR_Chn_Sel:
198 2 *(BYTE xdata *)0x4001 = SETUPDAT[2];
199 2 break;
200 2
201 2 case VR_test_WR:
202 2 *(BYTE xdata *)0x2001 = 0x02;
203 2 break;
204 2 }
205 1
206 1 return(FALSE); // no error; command handled OK
207 1 }
208
209 //-----------------------------------------------------------------------------
210 // USB Interrupt Handlers
211 // The following functions are called by the USB interrupt jump table.
212 //-----------------------------------------------------------------------------
213
214 // Setup Data Available Interrupt Handler
215 void ISR_Sudav(void) interrupt 0
216 {
217 1 GotSUD = TRUE; // Set flag
218 1 EZUSB_IRQ_CLEAR();
219 1 USBIRQ = bmSUDAV; // Clear SUDAV IRQ
220 1 }
221
222 // Setup Token Interrupt Handler
223 void ISR_Sutok(void) interrupt 0
224 {
225 1 EZUSB_IRQ_CLEAR();
226 1 USBIRQ = bmSUTOK; // Clear SUTOK IRQ
227 1 }
228
229 void ISR_Sof(void) interrupt 0
230 {
231 1 EZUSB_IRQ_CLEAR();
232 1 USBIRQ = bmSOF; // Clear SOF IRQ
233 1 }
234
235 void ISR_Ures(void) interrupt 0
236 {
237 1 if (EZUSB_HIGHSPEED())
238 1 {
239 2 pConfigDscr = pHighSpeedConfigDscr;
240 2 pOtherConfigDscr = pFullSpeedConfigDscr;
241 2 }
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 5
242 1 else
243 1 {
244 2 pConfigDscr = pFullSpeedConfigDscr;
245 2 pOtherConfigDscr = pHighSpeedConfigDscr;
246 2 }
247 1
248 1 EZUSB_IRQ_CLEAR();
249 1 USBIRQ = bmURES; // Clear URES IRQ
250 1 }
251
252 void ISR_Susp(void) interrupt 0
253 {
254 1 Sleep = TRUE;
255 1 EZUSB_IRQ_CLEAR();
256 1 USBIRQ = bmSUSP;
257 1 }
258
259 void ISR_Highspeed(void) interrupt 0
260 {
261 1 if (EZUSB_HIGHSPEED())
262 1 {
263 2 pConfigDscr = pHighSpeedConfigDscr;
264 2 pOtherConfigDscr = pFullSpeedConfigDscr;
265 2 }
266 1 else
267 1 {
268 2 pConfigDscr = pFullSpeedConfigDscr;
269 2 pOtherConfigDscr = pHighSpeedConfigDscr;
270 2 }
271 1
272 1 EZUSB_IRQ_CLEAR();
273 1 USBIRQ = bmHSGRANT;
274 1 }
275 void ISR_Ep0ack(void) interrupt 0
276 {
277 1 }
278 void ISR_Stub(void) interrupt 0
279 {
280 1 }
281 void ISR_Ep0in(void) interrupt 0
282 {
283 1 }
284 void ISR_Ep0out(void) interrupt 0
285 {
286 1 }
287 void ISR_Ep1in(void) interrupt 0
288 {
289 1 }
290 void ISR_Ep1out(void) interrupt 0
291 {
292 1 }
293 void ISR_Ep2inout(void) interrupt 0
294 {
295 1 }
296 void ISR_Ep4inout(void) interrupt 0
297 {
298 1 }
299 void ISR_Ep6inout(void) interrupt 0
300 {
301 1 }
302 void ISR_Ep8inout(void) interrupt 0
303 {
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 6
304 1 }
305 void ISR_Ibn(void) interrupt 0
306 {
307 1 }
308 void ISR_Ep0pingnak(void) interrupt 0
309 {
310 1 }
311 void ISR_Ep1pingnak(void) interrupt 0
312 {
313 1 }
314 void ISR_Ep2pingnak(void) interrupt 0
315 {
316 1 }
317 void ISR_Ep4pingnak(void) interrupt 0
318 {
319 1 }
320 void ISR_Ep6pingnak(void) interrupt 0
321 {
322 1 }
323 void ISR_Ep8pingnak(void) interrupt 0
324 {
325 1 }
326 void ISR_Errorlimit(void) interrupt 0
327 {
328 1 }
329 void ISR_Ep2piderror(void) interrupt 0
330 {
331 1 }
332 void ISR_Ep4piderror(void) interrupt 0
333 {
334 1 }
335 void ISR_Ep6piderror(void) interrupt 0
336 {
337 1 }
338 void ISR_Ep8piderror(void) interrupt 0
339 {
340 1 }
341 void ISR_Ep2pflag(void) interrupt 0
342 {
343 1 }
344 void ISR_Ep4pflag(void) interrupt 0
345 {
346 1 }
347 void ISR_Ep6pflag(void) interrupt 0
348 {
349 1 }
350 void ISR_Ep8pflag(void) interrupt 0
351 {
352 1 }
353 void ISR_Ep2eflag(void) interrupt 0
354 {
355 1 }
356 void ISR_Ep4eflag(void) interrupt 0
357 {
358 1 }
359 void ISR_Ep6eflag(void) interrupt 0
360 {
361 1 }
362 void ISR_Ep8eflag(void) interrupt 0
363 {
364 1 }
365 void ISR_Ep2fflag(void) interrupt 0
C51 COMPILER V7.20 FPUSB 01/07/2009 09:48:47 PAGE 7
366 {
367 1 }
368 void ISR_Ep4fflag(void) interrupt 0
369 {
370 1 }
371 void ISR_Ep6fflag(void) interrupt 0
372 {
373 1 }
374 void ISR_Ep8fflag(void) interrupt 0
375 {
376 1 }
377 void ISR_GpifComplete(void) interrupt 0
378 {
379 1 }
380 void ISR_GpifWaveform(void) interrupt 0
381 {
382 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 538 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -