📄 mainloop.lst
字号:
272 4 printf("Control state = USB_IDLE.");
273 4 else if(bEPPflags.bits.control_state == USB_RECEIVE)
274 4 printf("Control state = USB_RECEIVE.");
275 4 else if(bEPPflags.bits.control_state == USB_TRANSMIT)
276 4 printf("Control state = USB_TRANSMIT.");
277 4 printf(" ControlData.wCount = %x.\n", ControlData.wCount);
278 4 printf("Endpoint 4 (Bulk Out) Status = %bx, Endpoint 5 (Bulk In) Status = %bx.\n",
279 4 D12_ReadEndpointStatus(4), D12_ReadEndpointStatus(5));
280 4 if(bEPPflags.bits.dma_state == DMA_IDLE)
281 4 printf("DMA_State = DMA_IDLE.\n");
282 4 else if(bEPPflags.bits.dma_state == DMA_RUNNING)
283 4 printf("DMA_State = DMA_RUNNING.\n");
284 4 else if(bEPPflags.bits.dma_state == DMA_PENDING)
285 4 printf("DMA_State = DMA_PENDING.\n");
286 4
287 4 printf("Last Device Request: bmRequestType = 0x%bx, bRequest= 0x%bx, wValue = 0x%x, wLength = 0x%x, w
-Index = 0x%x.\n",
288 4
289 4 ControlData.DeviceRequest.bmRequestType,
290 4 ControlData.DeviceRequest.bRequest,
291 4 ControlData.DeviceRequest.wValue,
292 4 ControlData.DeviceRequest.wLength,
293 4 ControlData.DeviceRequest.wIndex);
294 4
295 4 printf("Data: ");
296 4 for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
297 4 printf("0x%bx, ", *((ControlData.dataBuffer)+i));
298 4 printf("\n");
299 4
300 4 break;
301 4 case '\r':
302 4 reconnect_USB();
C51 COMPILER V7.06 MAINLOOP 08/06/2006 09:11:07 PAGE 6
303 4 break;
304 4
305 4 case 'v':
306 4 if(bEPPflags.bits.verbose == 0) {
307 5 printf("Verbose Mode = ON.\n");
308 5 DISABLE;
309 5 bEPPflags.bits.verbose = 1;
310 5 ENABLE;
311 5 }
312 4 else {
313 5 printf("Verbose Mode = OFF.\n");
314 5 DISABLE;
315 5 bEPPflags.bits.verbose = 0;
316 5 ENABLE;
317 5 }
318 4 break;
319 4 default:
320 4 break;
321 4 }
322 3 }
323 2
324 2
325 2 if (bEPPflags.bits.bus_reset) {
326 3 DISABLE;
327 3 bEPPflags.bits.bus_reset = 0;
328 3 ENABLE;
329 3 // Release D12's SUSPEND pin after bus reset
330 3 // Enable 74HCT123 pulse generation before disconnect
331 3 D12SUSPD = 1;
332 3 } // if bus reset
333 2
334 2 if (bEPPflags.bits.suspend) {
335 3 DISABLE;
336 3 bEPPflags.bits.suspend= 0;
337 3 ENABLE;
338 3
339 3 if(D12SUSPD == 1) {
340 4 D12SUSPD = 0;
341 4 P0 = 0xFF;
342 4 P1 = 0xFF;
343 4 P2 = 0xFF;
344 4 P3 = 0xFF;
345 4 D12_SetDMA(0xC3);
346 4 D12SUSPD = 1;
347 4 PCON |= 0x02;
348 4 while (1);
349 4 }
350 3 } // if suspend change
351 2
352 2 if (bEPPflags.bits.setup_packet){
353 3 DISABLE;
354 3 bEPPflags.bits.setup_packet = 0;
355 3 ENABLE;
356 3 control_handler();
357 3 D12SUSPD = 1;
358 3 } // if setup_packet
359 2
360 2 if(bEPPflags.bits.setup_dma != 0) {
361 3 DISABLE;
362 3 bEPPflags.bits.setup_dma --;
363 3 ENABLE;
364 3 setup_dma();
C51 COMPILER V7.06 MAINLOOP 08/06/2006 09:11:07 PAGE 7
365 3 } // if setup_dma
366 2
367 2 } // Main Loop
368 1
369 1 on_exit();
370 1 }
371
372 void stall_ep0(void)
373 {
374 1 D12_SetEndpointStatus(0, 1);
375 1 D12_SetEndpointStatus(1, 1);
376 1 }
377
378 void disconnect_USB(void)
379 {
380 1 // Initialize D12 configuration
381 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
382 1 }
383
384 void connect_USB(void)
385 {
386 1 // reset event flags
387 1 DISABLE;
388 1 bEPPflags.value = 0;
389 1 ENABLE;
390 1
391 1 // V2.1 enable normal+sof interrupt
392 1 D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
393 1
394 1 // Initialize D12 configuration
395 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
396 1 }
397
398
399 void reconnect_USB(void)
400 {
401 1 unsigned long clk_cnt;
402 1
403 1 MCU_LED0 = 0;
404 1 MCU_LED1 = 0;
405 1
406 1 // Pull-down D12's SUSPEND pin
407 1 // Disable 74HCT123 pulse generation before disconnect
408 1 // Release D12's SUSPEND pin after receiving bus reset from host
409 1 D12SUSPD = 0;
410 1 disconnect_USB();
411 1
412 1 printf("Wait for 1 second ...\n");
413 1
414 1 clk_cnt = ClockTicks;
415 1 while(ClockTicks < clk_cnt + 20)
416 1 ;
417 1
418 1 connect_USB();
419 1
420 1 MCU_LED0 = 1;
421 1 MCU_LED1 = 1;
422 1 }
423
424 void init_unconfig(void)
425 {
426 1 unsigned char i;
C51 COMPILER V7.06 MAINLOOP 08/06/2006 09:11:07 PAGE 8
427 1
428 1 D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
429 1 }
*** WARNING C280 IN LINE 426 OF MAINLOOP.C: 'i': unreferenced local variable
430
431 void init_config(void)
432 {
433 1 D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
434 1 }
435
436 void single_transmit(unsigned char * buf, unsigned char len)
437 {
438 1 if( len <= EP0_PACKET_SIZE) {
439 2 D12_WriteEndpoint(1, len, buf);
440 2 }
441 1 }
442
443 void code_transmit(unsigned char code * pRomData, unsigned short len)
444 {
445 1 ControlData.wCount = 0;
446 1 if(ControlData.wLength > len)
447 1 ControlData.wLength = len;
448 1
449 1 ControlData.pData = pRomData;
450 1 if( ControlData.wLength >= EP0_PACKET_SIZE) {
451 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
452 2 ControlData.wCount += EP0_PACKET_SIZE;
453 2
454 2 DISABLE;
455 2 bEPPflags.bits.control_state = USB_TRANSMIT;
456 2 ENABLE;
457 2 }
458 1 else {
459 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
460 2 ControlData.wCount += ControlData.wLength;
461 2 DISABLE;
462 2 bEPPflags.bits.control_state = USB_IDLE;
463 2 ENABLE;
464 2 }
465 1 }
466
467 void check_key_LED(void)
468 {
469 1 static unsigned char c, last_key = 0xf;
470 1
471 1 c = MCU_SWM0 & MCU_SWM1;
472 1 c &= 0x0f;
473 1 if (c != last_key) {
474 2 D12_WriteEndpoint(3, 1, &c);
475 2 }
476 1
477 1 last_key = c;
478 1
479 1 if(bEPPflags.bits.ep1_rxdone) {
480 2 DISABLE;
481 2 bEPPflags.bits.ep1_rxdone = 0;
482 2 ENABLE;
483 2 MCU_LED0 = !(GenEpBuf[3] & 0x1);
484 2 MCU_LED1 = !(GenEpBuf[3] & 0x2);
485 2 }
486 1 }
487
C51 COMPILER V7.06 MAINLOOP 08/06/2006 09:11:07 PAGE 9
488 void setup_dma()
489 {
490 1 ioSize = ioRequest.uSize;
491 1 ioCount = 0;
492 1
493 1 DISABLE;
494 1 bEPPflags.bits.dma_state = DMA_RUNNING;
495 1 ENABLE;
496 1
497 1 single_transmit(0, 0);
498 1
499 1 if(ioRequest.bCommand & 0x1) {
500 2 if(ioSize > 64 || ioSize == 0) {
501 3 if(bNoRAM)
502 3 D12_WriteEndpoint(5, 64, EpBuf);
503 3 else
504 3 D12_WriteEndpoint(5, 64, MainEpBuf);
505 3 ioCount += 64;
506 3 }
507 2 else {
508 3 if(bNoRAM)
509 3 D12_WriteEndpoint(5, ioSize, EpBuf);
510 3 else
511 3 D12_WriteEndpoint(5, ioSize, MainEpBuf);
512 3 ioCount += ioSize;
513 3 }
514 2 }
515 1 }
516
517
518 void control_handler()
519 {
520 1 unsigned char type, req;
521 1
522 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
523 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
524 1
525 1 help_devreq(type, req); // print out device request
526 1
527 1 if (type == USB_STANDARD_REQUEST)
528 1 (*StandardDeviceRequest[req])();
529 1 else if (type == USB_VENDOR_REQUEST)
530 1 (*VendorDeviceRequest[req])();
531 1 else
532 1 stall_ep0();
533 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1237 ----
CONSTANT SIZE = 969 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -