📄 upsd_usb.ls1
字号:
415 ;
416 ; volatile uchar idata SuspendCounter;
417 ;
418 ; setup_buffer setupPacket;
419 ;
420 ; static uchar* pTransmitBufferEP0;
421 ; static int bytesToTransmitEP0;
422 ; static BOOL shortTransfer;
423 ;
424 ; extern void OnDeviceConfigured();
425 ;
426 ;
427 ;
428 ;
429 ;
430 ;
431 ;
432 ; void OnUSBReset()
433
---- 434 RSEG ?PR?OnUSBReset?UPSD_USB
0000 435 OnUSBReset:
436 ; SOURCE LINE # 141
437 ; /******************************************************************************
438 ; Function : void OnUSBReset()
439 ; Parameters : none
440 ; Description: USB driver module initialization routine, in USR ISR only !!!.
441 ; ******************************************************************************/
442 ; {
443 ; SOURCE LINE # 147
444 ; pTransmitBufferEP0 = NULL;
445 ; SOURCE LINE # 148
0000 900000 F 446 MOV DPTR,#pTransmitBufferEP0
0003 E4 447 CLR A
0004 F0 448 MOVX @DPTR,A
0005 A3 449 INC DPTR
0006 F0 450 MOVX @DPTR,A
0007 A3 451 INC DPTR
0008 F0 452 MOVX @DPTR,A
453 ; bytesToTransmitEP0 = 0;
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 8
454 ; SOURCE LINE # 149
0009 900000 F 455 MOV DPTR,#bytesToTransmitEP0
000C F0 456 MOVX @DPTR,A
000D A3 457 INC DPTR
000E F0 458 MOVX @DPTR,A
459 ;
460 ; UADR = 0; // Disable USB hardware
461 ; SOURCE LINE # 151
000F F5EE 462 MOV UADR,A
463 ; UCON0 = uRX0E; // Enable EP0 for receiving only
464 ; SOURCE LINE # 152
0011 75EA10 465 MOV UCON0,#010H
466 ; UCON1 = 0; // Disable Endpoint 1
467 ; SOURCE LINE # 153
0014 F5EB 468 MOV UCON1,A
469 ; UCON2 = uEP1E; // Enable EP1
470 ; SOURCE LINE # 154
0016 75EC04 471 MOV UCON2,#04H
472 ; UADR = uUSBEN + 0; // Enable USB with default address 0
473 ; SOURCE LINE # 155
0019 75EE80 474 MOV UADR,#080H
475 ; UIEN = ~(uMCUR+uEOPF+uRESUMIE);
476 ; SOURCE LINE # 156
001C 75E9BC 477 MOV UIEN,#0BCH
478 ; // Enable all USB interrupts except uMCUR (MCU reset on USB reset) and EOP, ...
479 ; USTA = 0;
480 ; SOURCE LINE # 158
001F F5ED 481 MOV USTA,A
482 ; UISTA = 0; // Clear USB interrupts
483 ; SOURCE LINE # 159
0021 F5E8 484 MOV UISTA,A
485 ; IEA |= bEUSB;
486 ; SOURCE LINE # 160
0023 43A701 487 ORL IEA,#01H
488 ; }
489 ; SOURCE LINE # 161
0026 22 490 RET
491 ; END OF OnUSBReset
492
493 ;
494 ;
495 ;
496 ;
497 ;
498 ;
499 ; void UsbInitialize()
500
---- 501 RSEG ?PR?UsbInitialize?UPSD_USB
0000 502 UsbInitialize:
503 ; SOURCE LINE # 168
504 ; /******************************************************************************
505 ; Function : void UsbInitialize()
506 ; Parameters : none
507 ; Description: USB driver module initialization routine after MCU startup.
508 ; ******************************************************************************/
509 ; {
510 ; SOURCE LINE # 174
511 ; USCL = cUSCL_value; // Set USB clock prescaler
512 ; SOURCE LINE # 175
0000 900000 F 513 MOV DPTR,#cUSCL_value
0003 E4 514 CLR A
0004 93 515 MOVC A,@A+DPTR
0005 F5E1 516 MOV USCL,A
517 ; UIEN = 0; // Disable all USB interrupts
518 ; SOURCE LINE # 176
0007 E4 519 CLR A
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 9
0008 F5E9 520 MOV UIEN,A
521 ; UADR = 0; // Disable USB hardware
522 ; SOURCE LINE # 177
000A F5EE 523 MOV UADR,A
524 ; OnUSBReset();
525 ; SOURCE LINE # 178
000C 020000 F 526 LJMP OnUSBReset
527 ; END OF UsbInitialize
528
529 ; }
530 ;
531 ;
532 ;
533 ;
534 ;
535 ;
536 ;
537 ;
538 ; extern data char usr_cnt;
539 ;
540 ;
541 ;
542 ; void STALL_EP0()
543
---- 544 RSEG ?PR?STALL_EP0?UPSD_USB
0000 545 STALL_EP0:
546 ; SOURCE LINE # 192
547 ; /******************************************************************************
548 ; Function : void STALL_EP0()
549 ; Parameters : none
550 ; Description: Stalls EP0.
551 ; This endpoint is halted or a control pipe request is not supported.
552 ; Endpoint can be unstalled by the next SETUP packet.
553 ; STALL is returned by a function in response to an IN token
554 ; or after the data phase of an OUT transaction.
555 ; It indicates that a function is unable to transmit or receive data,
556 ; or that a control pipe request is not supported.
557 ; ******************************************************************************/
558 ; {
559 ; SOURCE LINE # 204
560 ; #pragma asm
561 ; anl UCON0,#uTSEQ0+uRX0E+uSTALL0+uTX0E ;mask
0000 53EAF0 562 anl UCON0,#0x80+0x10+0x40+0x20 ;mask
563 ; orl UCON0,#uSTALL0 ;clear TSEQ bit, STALL EP0
0003 43EA40 564 orl UCON0,#0x40 ;clear TSEQ bit, STALL EP0
565 ; #pragma endasm
566 ; }
567 ; SOURCE LINE # 209
0006 22 568 RET
569 ; END OF STALL_EP0
570
571 ;
572 ;
573 ;
574 ;
575 ;
576 ;
577 ; static BOOL TransmitBufferEP0()
578
---- 579 RSEG ?PR?TransmitBufferEP0?UPSD_USB
0000 580 TransmitBufferEP0:
581 USING 0
582 ; SOURCE LINE # 216
583 ; /******************************************************************************
584 ; Function : static BOOL TransmitBufferEP0()
585 ; Parameters : none
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 10
586 ; Description: Transmits next segment of descriptor buffer (pTransmitBufferEP0).
587 ; This routine prepates 0..8 bytes of data from TransmitBufferEP0
588 ; at endpoint0. If no data is available in buffer, the endpoint is disabled.
589 ; According to USB standard, zero length packet is trasmitted at then end.
590 ; ******************************************************************************/
591 ; {
592 ; SOURCE LINE # 225
593 ; data int i;
594 ; data int nBytes;
595 ;
596 ; if (pTransmitBufferEP0) // If there is data going out...
597 ; SOURCE LINE # 229
0000 900000 F 598 MOV DPTR,#pTransmitBufferEP0
0003 E0 599 MOVX A,@DPTR
0004 FB 600 MOV R3,A
0005 A3 601 INC DPTR
0006 E0 602 MOVX A,@DPTR
0007 FA 603 MOV R2,A
0008 A3 604 INC DPTR
0009 E0 605 MOVX A,@DPTR
000A F9 606 MOV R1,A
000B EA 607 MOV A,R2
000C 49 608 ORL A,R1
000D 4B 609 ORL A,R3
000E 7003 610 JNZ $ + 5H
0010 020000 F 611 LJMP ?C0004
612 ; {
613 ; SOURCE LINE # 230
614 ; #pragma asm // send zero length packet
615 ; xrl UCON0,#uTSEQ0 ;toggle TSEQ bit
0013 63EA80 616 xrl UCON0,#0x80 ;toggle TSEQ bit
617 ; anl UCON0,#uTSEQ0+uRX0E ;mask
0016 53EA90 618 anl UCON0,#0x80+0x10 ;mask
619 ; #pragma endasm
620 ; if (!bytesToTransmitEP0) // If data has already been sent...
621 ; SOURCE LINE # 235
0019 900000 F 622 MOV DPTR,#bytesToTransmitEP0
001C E0 623 MOVX A,@DPTR
001D FE 624 MOV R6,A
001E A3 625 INC DPTR
001F E0 626 MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -