📄 usb.lst
字号:
167 3 // devTglSt = (intr & DEV_TGL); // store toggle state
168 3 //
169 3 // }
170 3 if (intr & PKT_VLD)
171 3 {
172 4 ConsecutiveNAKCount = 0;
173 4 SieStat0 = PKT_VLD;
174 4 #ifdef OLD_CHIP
175 4 if(PassToggleCheckSoftware())
176 4 #else
if (devTglSt == bXXGFlags.bToggle)
#endif
179 4 // if (1) // skip toggle check
180 4 {
181 5 bXXGFlags.bToggle = ~bXXGFlags.bToggle;
C51 COMPILER V8.02 USB 09/19/2006 15:01:22 PAGE 13
182 5 if(xferLen<64)
183 5 {
184 6 BufRst = 0x03;
185 6 BufRst = 0x00;
186 6 }
187 5
188 5 // ready to read data from buffer
189 5 usbstack.wLen -= (unsigned int)xferLen;
190 5 if(usbstack.wLen==0) // last packet
191 5 {
192 6 if(!bXXGFlags.bIN_ISR)
193 6 usbBufRead(usbstack.buffer, xferLen);
194 6 else
195 6 BufSel = USB2MP3; //src=USB,dest=MP3
196 6
197 6
198 6 Scratch = 0x0; // kill some time...
199 6 Scratch = 0x0;
200 6 Scratch = 0x0;
201 6 Scratch = 0x0;
202 6
203 6 if(xferLen<64) // set buffer empty flag
204 6 {
205 7 BufRst = 0x03;
206 7 BufRst = 0x00;
207 7 }
208 6 else
209 6 {
210 7 BufRst = 0x01;
211 7 BufRst = 0x00;
212 7 }
213 6 BufSel = USB2MCU; //src=USB,dest=CPU
214 6 result = DEV_ACK;
215 6 break;
216 6 }
217 5 else
218 5 {
219 6 if(!bXXGFlags.bIN_ISR) // actual CPU read
220 6 usbBufRead(usbstack.buffer, xferLen);
221 6 else
222 6 BufSel = USB2MP3; //src=USB,dest=MP3
223 6
224 6 Scratch = 0x0; // kill some time...
225 6 Scratch = 0x0;
226 6 Scratch = 0x0;
227 6 Scratch = 0x0;
228 6
229 6 if(xferLen<64)
230 6 {
231 7 BufRst = 0x03;
232 7 BufRst = 0x00;
233 7 }
234 6 else
235 6 {
236 7 BufRst = 0x01;
237 7 BufRst = 0x00;
238 7 }
239 6 usbstack.buffer += xferLen;
240 6 if (usbstack.wLen >= usbstack.wPayload)
241 6 xferLen = usbstack.wPayload;
242 6 else
243 6 xferLen = usbstack.wLen;
C51 COMPILER V8.02 USB 09/19/2006 15:01:22 PAGE 14
244 6
245 6 cmd = READ;
246 6 BufSel = USB2MCU; //src=USB,dest=CPU
247 6 TxPktlen = xferLen;
248 6 TxCtrl = cmd;
249 6 }
250 5 }
251 4 else
252 4 {
253 5 if(xferLen<64) // set buffer empty flag
254 5 {
255 6 BufRst = 0x03;
256 6 BufRst = 0x00;
257 6 }
258 5
259 5 BufSel = USBFLSH; //src=USB,dest=FLUSH
260 5 Scratch = 0x0; // kill some time...
261 5 Scratch = 0x0;
262 5 Scratch = 0x0;
263 5 Scratch = 0x0;
264 5
265 5 if(xferLen<64) // set buffer empty flag
266 5 {
267 6 BufRst = 0x03;
268 6 BufRst = 0x00;
269 6 }
270 5 else
271 5 {
272 6 BufRst = 0x01;
273 6 BufRst = 0x00;
274 6 }
275 5 BufSel = USB2MCU; //src=USB,dest=CPU
276 5 cmd = READ;
277 5 TxCtrl = cmd;
278 5 }
279 4 }
280 3 // else if(intr & PKT_ERR) // got bad packet
281 3 // {
282 3 // SieStat0 = PKT_ERR;
283 3 // BufRst = 0x01; // reset write pointer
284 3 // BufRst = 0x00;
285 3 // TxCtrl = cmd;
286 3 // }
287 3 else if(intr & DEV_NAK) // device nak'd IN token
288 3 {
289 4 SieStat0 = DEV_NAK;
290 4 if(ConsecutiveNAKCount < MAX_NAK_CNT)
291 4 ConsecutiveNAKCount = ConsecutiveNAKCount + 1;
292 4 else
293 4 return FALSE;
294 4 // P1 = 0xF8;
295 4 // P1 = intr;
296 4 BufRst = 0x01; // reset write pointer
297 4 BufRst = 0x00;
298 4 DelayMs(1);
299 4 TxCtrl = cmd;
300 4 }
301 3 else if(intr & DEV_TO) // turnaround time expired
302 3 {
303 4 // glitch filter, don't need to clear
304 4 if (SieStat0 & DEV_TO) // packet is not coming!
305 4 {
C51 COMPILER V8.02 USB 09/19/2006 15:01:22 PAGE 15
306 5 BufRst = 0x01; // reset write pointer
307 5 BufRst = 0x00;
308 5 TxCtrl = cmd; // Send command again!
309 5 }
310 4 }
311 3 else if (intr & DEV_STALL)
312 3 {
313 4 SieStat0 = DEV_STALL;
314 4 bXXGFlags.SLAVE_STALLED = TRUE;
315 4 break;
316 4 }
317 3 }
318 2 else // pid != PID_IN
319 2 {
320 3 if(intr & DEV_ACK)
321 3 {
322 4 result = DEV_ACK;
323 4 SieStat0 = DEV_ACK;
324 4 break;
325 4 }
326 3 else if(intr & DEV_TO) // turnaround time expired
327 3 {
328 4 // SieStat0 = DEV_TO;
329 4 if (SieStat0 & DEV_TO) // packet is not coming!
330 4 {
331 5 BufRst = 0x02; // reset read pointer
332 5 BufRst = 0x00;
333 5 TxCtrl = cmd; // Send SETUP/OUT again!
334 5 }
335 4 }
336 3 }
337 2
338 2 }//end of while(TRUE)
339 1 if (result == DEV_ACK) // on ACK transmission
340 1 {
341 2 return TRUE;
342 2 } // return OK
343 1
344 1 return FALSE; // fail transmission
345 1
346 1 }
*** WARNING C280 IN LINE 75 OF USB.C: 'endPoint': unreferenced local variable
*** WARNING C280 IN LINE 79 OF USB.C: 'devTglSt': unreferenced local variable
347 //*****************************************************************************************
348 // Control Endpoint 0's USB Data Xfer
349 // ep0Xfer, endpoint 0 data transfer
350 //*****************************************************************************************
351 unsigned char ep0Xfer(void)
352 {
353 1 TxEpnum = 0x0; // always set end point to zero!!
354 1 //----------------------------------------------------
355 1 // SETUP token with 8-byte request on endpoint 0
356 1 //----------------------------------------------------
357 1 usbstack.pid=PID_SETUP;
358 1
359 1 // BufSel = MCU2USB; // src=CPU, dest=USB;
360 1 if (!usbXfer(0))
361 1 return FALSE;
362 1
363 1 usbstack.pid = PID_IN; // default for setup stage
364 1 // BufSel = USB2MCU; //src=USB, dest=CPU;
365 1
C51 COMPILER V8.02 USB 09/19/2006 15:01:22 PAGE 16
366 1 //----------------------------------------------------
367 1 // IN or OUT data stage on endpoint 0
368 1 //----------------------------------------------------
369 1 usbstack.wLen=usbstack.setup.wLength;
370 1 if (usbstack.wLen) // if there are data for transfer
371 1 {
372 2 if (usbstack.setup.bmRequest & 0x80) // IN token
373 2 {
374 3 usbstack.pid = PID_IN;
375 3 bXXGFlags.bToggle=1; // expect data1 from device
376 3 // BufSel = USB2MCU; //src=USB,dest=CPU;
377 3
378 3 if(!usbXfer(0))
379 3 return FALSE;
380 3 //usbstack.wPayload = 0;
381 3 usbstack.pid = PID_OUT;
382 3 // BufSel = MCU2USB; //src=CPU,dest=USB;
383 3 }
384 2 else // OUT token
385 2 {
386 3 usbstack.pid = PID_OUT;
387 3 // BufSel = MCU2USB; //src=CPU,dest=USB;
388 3 if(!usbXfer(0))
389 3 return FALSE;
390 3 usbstack.pid = PID_IN;
391 3 // BufSel = USB2MCU; //src=USB,dest=CPU;
392 3 }
393 2 }
394 1 DelayMs(2); // allow device to complete request
395 1 //----------------------------------------------------
396 1 // Status stage IN or OUT zero-length data packet
397 1 //----------------------------------------------------
398 1 usbstack.wLen=0;
399 1 // uDev.bData1[0] = 0x1; // always data1 from device
400 1 bXXGFlags.bToggle=1; // status stage is always Data1
401 1 if(!usbXfer(0))
402 1 return FALSE;
403 1
404 1 return TRUE;
405 1
406 1 }
407
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -