📄 usb_drv.lst
字号:
529 * This function manages the GET_CONFIGURATION request.
530 *----------------------------------------------------------------------------
531 * EXAMPLE:
532 *----------------------------------------------------------------------------
533 * NOTE:
534 *----------------------------------------------------------------------------
535 * REQUIREMENTS:
536 *****************************************************************************/
537 void usb_get_configuration (void)
538 {
539 1 Usb_clear_RXSETUP();
540 1 Usb_set_DIR();
541 1 if (USBCON & MSK_CONFG)
542 1 {
543 2 Usb_write_byte(1);
544 2 }
545 1 else
546 1 {
547 2 Usb_write_byte(0);
548 2 }
549 1
550 1 Usb_set_TXRDY();
C51 COMPILER V6.20c USB_DRV 07/10/2002 15:17:37 PAGE 10
551 1 while (!(Usb_tx_complete()));
552 1 Usb_clear_TXCMPL();
553 1 while (!(Usb_rx_complete()));
554 1 Usb_clear_RXOUT();
555 1 Usb_clear_DIR();
556 1 }
557
558
559 /*F**************************************************************************
560 * NAME: usb_get_status
561 *----------------------------------------------------------------------------
562 * PARAMS:
563 *
564 * return:
565 *----------------------------------------------------------------------------
566 * PURPOSE:
567 * This function manages the GET_STATUS request.
568 *----------------------------------------------------------------------------
569 * EXAMPLE:
570 *----------------------------------------------------------------------------
571 * NOTE:
572 *----------------------------------------------------------------------------
573 * REQUIREMENTS:
574 *****************************************************************************/
575 void usb_get_status (void)
576 {
577 1 Byte wIndex;
578 1
579 1 ACC = Usb_read_byte(); /* dummy read */
580 1 ACC = Usb_read_byte(); /* dummy read */
581 1 wIndex = Usb_read_byte();
582 1 Usb_clear_RXSETUP();
583 1 Usb_set_DIR();
584 1 switch(bmRequestType)
585 1 {
586 2 case REQUEST_DEVICE_STATUS:
587 2 {
588 3 Usb_write_byte(SELF_POWERED);
589 3 break;
590 3 }
591 2 case REQUEST_INTERFACE_STATUS:
592 2 {
593 3 Usb_write_byte(0x00);
594 3 break;
595 3 }
596 2 case REQUEST_ENDPOINT_STATUS:
597 2 {
598 3 wIndex = wIndex & MSK_EP_DIR;
599 3 Usb_write_byte(endpoint_status[wIndex]);
600 3 break;
601 3 }
602 2 }
603 1 Usb_write_byte(0x00);
604 1 Usb_set_TXRDY();
605 1 while ((!(Usb_tx_complete())) || (Usb_setup_received()));
606 1 Usb_clear_TXCMPL();
607 1 while ((!(Usb_rx_complete())) || (Usb_setup_received()));
608 1 Usb_clear_RXOUT();
609 1 Usb_clear_DIR();
610 1 }
611
612
C51 COMPILER V6.20c USB_DRV 07/10/2002 15:17:37 PAGE 11
613 /*F**************************************************************************
614 * NAME: usb_set_feature
615 *----------------------------------------------------------------------------
616 * PARAMS:
617 *
618 * return:
619 *----------------------------------------------------------------------------
620 * PURPOSE:
621 * This function manages the SET_FEATURE request.
622 *----------------------------------------------------------------------------
623 * EXAMPLE:
624 *----------------------------------------------------------------------------
625 * NOTE:
626 *----------------------------------------------------------------------------
627 * REQUIREMENTS:
628 *****************************************************************************/
629 void usb_set_feature (void)
630 {
631 1 if (bmRequestType == ZERO_TYPE)
632 1 {
633 2 Usb_clear_RXSETUP();
634 2 Usb_set_STALLRQ();
635 2 while (!(Usb_STALL_sent()));
636 2 Usb_clear_STALLRQ();
637 2 }
638 1 if (bmRequestType == INTERFACE_TYPE)
639 1 {
640 2 Usb_clear_RXSETUP();
641 2 Usb_set_STALLRQ();
642 2 while (!(Usb_STALL_sent()));
643 2 Usb_clear_STALLRQ();
644 2 }
645 1 if (bmRequestType == ENDPOINT_TYPE)
646 1 {
647 2 if (Usb_read_byte() == 0x00)
648 2 {
649 3 ACC = Usb_read_byte(); /* dummy read */
650 3 switch (Usb_read_byte()) /* check wIndex */
651 3 {
652 4 case ENDPOINT_1:
653 4 {
654 5 Usb_select_ep(EP_IN);
655 5 Usb_set_STALLRQ();
656 5 Usb_select_ep(EP_CONTROL);
657 5 endpoint_status[1] = 0x01;
658 5 Usb_clear_RXSETUP();
659 5 Usb_set_TXRDY();
660 5 while (!(Usb_tx_complete()));
661 5 Usb_clear_TXCMPL();
662 5 break;
663 5 }
664 4 case ENDPOINT_2:
665 4 {
666 5 Usb_select_ep(EP_OUT);
667 5 Usb_set_STALLRQ();
668 5 Usb_select_ep(EP_CONTROL);
669 5 endpoint_status[2] = 0x01;
670 5 Usb_clear_RXSETUP();
671 5 Usb_set_TXRDY();
672 5 while (!(Usb_tx_complete()));
673 5 Usb_clear_TXCMPL();
674 5 break;
C51 COMPILER V6.20c USB_DRV 07/10/2002 15:17:37 PAGE 12
675 5 }
676 4 default:
677 4 {
678 5 Usb_clear_RXSETUP();
679 5 Usb_set_STALLRQ();
680 5 while (!(Usb_STALL_sent()));
681 5 Usb_clear_STALLRQ();
682 5 break;
683 5 }
684 4 }
685 3 }
686 2 }
687 1 }
688
689
690 /*F**************************************************************************
691 * NAME: usb_clear_feature
692 *----------------------------------------------------------------------------
693 * PARAMS:
694 *
695 * return:
696 *----------------------------------------------------------------------------
697 * PURPOSE:
698 * This function manages the SET_FEATURE request.
699 *----------------------------------------------------------------------------
700 * EXAMPLE:
701 *----------------------------------------------------------------------------
702 * NOTE:
703 *----------------------------------------------------------------------------
704 * REQUIREMENTS:
705 *****************************************************************************/
706 void usb_clear_feature (void)
707 {
708 1 if (bmRequestType == ZERO_TYPE)
709 1 {
710 2 Usb_clear_RXSETUP();
711 2 Usb_set_STALLRQ();
712 2 while (!(Usb_STALL_sent()));
713 2 Usb_clear_STALLRQ();
714 2 }
715 1 if (bmRequestType == INTERFACE_TYPE)
716 1 {
717 2 Usb_clear_RXSETUP();
718 2 Usb_set_STALLRQ();
719 2 while (!(Usb_STALL_sent()));
720 2 Usb_clear_STALLRQ();
721 2 }
722 1 if (bmRequestType == ENDPOINT_TYPE)
723 1 {
724 2 if (Usb_read_byte() == 0x00)
725 2 {
726 3 ACC = Usb_read_byte(); /* dummy read */
727 3 switch (Usb_read_byte()) /* check wIndex */
728 3 {
729 4 case ENDPOINT_1:
730 4 {
731 5 Usb_select_ep(EP_IN);
732 5 Usb_clear_STALLRQ();
733 5 UEPRST = 0x02;
734 5 UEPRST = 0x00;
735 5 Usb_select_ep(EP_CONTROL);
736 5 endpoint_status[EP_IN] = 0x00;
C51 COMPILER V6.20c USB_DRV 07/10/2002 15:17:37 PAGE 13
737 5 Usb_clear_RXSETUP();
738 5 Usb_set_TXRDY();
739 5 while (!(Usb_tx_complete()));
740 5 Usb_clear_TXCMPL();
741 5 break;
742 5 }
743 4 case ENDPOINT_2:
744 4 {
745 5 Usb_select_ep(EP_OUT);
746 5 Usb_clear_STALLRQ();
747 5 UEPRST = 0x04;
748 5 UEPRST = 0x00;
749 5 Usb_select_ep(EP_CONTROL);
750 5 endpoint_status[EP_OUT] = 0x00;
751 5 Usb_clear_RXSETUP();
752 5 Usb_set_TXRDY();
753 5 while (!(Usb_tx_complete()));
754 5 Usb_clear_TXCMPL();
755 5 break;
756 5 }
757 4 case ENDPOINT_0:
758 4 {
759 5 Usb_clear_RXSETUP();
760 5 Usb_set_TXRDY();
761 5 while (!(Usb_tx_complete()));
762 5 Usb_clear_TXCMPL();
763 5 break;
764 5 }
765 4 default:
766 4 {
767 5 Usb_clear_RXSETUP();
768 5 Usb_set_STALLRQ();
769 5 while (!(Usb_STALL_sent()));
770 5 Usb_clear_STALLRQ();
771 5 break;
772 5 }
773 4 }
774 3 }
775 2 }
776 1 }
777
778
779
780
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1063 ----
CONSTANT SIZE = 120 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = 7 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -