📄 usb_drv.lst
字号:
551 *----------------------------------------------------------------------------
552 * EXAMPLE:
553 *----------------------------------------------------------------------------
554 * NOTE:
555 *----------------------------------------------------------------------------
556 * REQUIREMENTS:
557 *****************************************************************************/
558 void usb_get_configuration (void)
559 {
560 1 Usb_clear_RXSETUP();
561 1 Usb_set_DIR();
562 1 if (USBCON & MSK_CONFG)
563 1 {
564 2 Usb_write_byte(1);
565 2 }
566 1 else
567 1 {
568 2 Usb_write_byte(0);
569 2 }
570 1
571 1 Usb_set_TXRDY();
572 1 while (!(Usb_tx_complete()));
573 1 Usb_clear_TXCMPL();
574 1 while (!(Usb_rx_complete()));
575 1 Usb_clear_RXOUT();
576 1 Usb_clear_DIR();
577 1 }
578
579
580 /*F**************************************************************************
581 * NAME: usb_get_status
582 *----------------------------------------------------------------------------
583 * PARAMS:
584 *
585 * return:
586 *----------------------------------------------------------------------------
587 * PURPOSE:
588 * This function manages the GET_STATUS request.
589 *----------------------------------------------------------------------------
590 * EXAMPLE:
591 *----------------------------------------------------------------------------
592 * NOTE:
593 *----------------------------------------------------------------------------
594 * REQUIREMENTS:
595 *****************************************************************************/
596 void usb_get_status (void)
597 {
598 1 Byte wIndex;
599 1
600 1 ACC = Usb_read_byte(); /* dummy read */
601 1 ACC = Usb_read_byte(); /* dummy read */
602 1 wIndex = Usb_read_byte();
603 1 Usb_clear_RXSETUP();
604 1 Usb_set_DIR();
605 1 switch(bmRequestType)
606 1 {
607 2 case REQUEST_DEVICE_STATUS:
608 2 {
609 3 Usb_write_byte(SELF_POWERED);
610 3 break;
611 3 }
612 2 case REQUEST_INTERFACE_STATUS:
C51 COMPILER V7.50 USB_DRV 06/03/2006 10:32:51 PAGE 11
613 2 {
614 3 Usb_write_byte(0x00);
615 3 break;
616 3 }
617 2 case REQUEST_ENDPOINT_STATUS:
618 2 {
619 3 wIndex = wIndex & MSK_EP_DIR;
620 3 Usb_write_byte(endpoint_status[wIndex]);
621 3 break;
622 3 }
623 2 }
624 1 Usb_write_byte(0x00);
625 1 Usb_set_TXRDY();
626 1 while ((!(Usb_tx_complete())) || (Usb_setup_received()));
627 1 Usb_clear_TXCMPL();
628 1 while ((!(Usb_rx_complete())) || (Usb_setup_received()));
629 1 Usb_clear_RXOUT();
630 1 Usb_clear_DIR();
631 1 }
632
633
634 /*F**************************************************************************
635 * NAME: usb_set_feature
636 *----------------------------------------------------------------------------
637 * PARAMS:
638 *
639 * return:
640 *----------------------------------------------------------------------------
641 * PURPOSE:
642 * This function manages the SET_FEATURE request.
643 *----------------------------------------------------------------------------
644 * EXAMPLE:
645 *----------------------------------------------------------------------------
646 * NOTE:
647 *----------------------------------------------------------------------------
648 * REQUIREMENTS:
649 *****************************************************************************/
650 void usb_set_feature (void)
651 {
652 1 if (bmRequestType == ZERO_TYPE)
653 1 {
654 2 Usb_clear_RXSETUP();
655 2 Usb_set_STALLRQ();
656 2 while (!(Usb_STALL_sent()));
657 2 Usb_clear_STALLRQ();
658 2 }
659 1 if (bmRequestType == INTERFACE_TYPE)
660 1 {
661 2 Usb_clear_RXSETUP();
662 2 Usb_set_STALLRQ();
663 2 while (!(Usb_STALL_sent()));
664 2 Usb_clear_STALLRQ();
665 2 }
666 1 if (bmRequestType == ENDPOINT_TYPE)
667 1 {
668 2 if (Usb_read_byte() == 0x00)
669 2 {
670 3 ACC = Usb_read_byte(); /* dummy read */
671 3 switch (Usb_read_byte()) /* check wIndex */
672 3 {
673 4 case ENDPOINT_1:
674 4 {
C51 COMPILER V7.50 USB_DRV 06/03/2006 10:32:51 PAGE 12
675 5 Usb_select_ep(EP_IN);
676 5 Usb_set_STALLRQ();
677 5 Usb_select_ep(EP_CONTROL);
678 5 endpoint_status[1] = 0x01;
679 5 Usb_clear_RXSETUP();
680 5 Usb_set_TXRDY();
681 5 while (!(Usb_tx_complete()));
682 5 Usb_clear_TXCMPL();
683 5 break;
684 5 }
685 4 case ENDPOINT_2:
686 4 {
687 5 Usb_select_ep(EP_OUT);
688 5 Usb_set_STALLRQ();
689 5 Usb_select_ep(EP_CONTROL);
690 5 endpoint_status[2] = 0x01;
691 5 Usb_clear_RXSETUP();
692 5 Usb_set_TXRDY();
693 5 while (!(Usb_tx_complete()));
694 5 Usb_clear_TXCMPL();
695 5 break;
696 5 }
697 4 default:
698 4 {
699 5 Usb_clear_RXSETUP();
700 5 Usb_set_STALLRQ();
701 5 while (!(Usb_STALL_sent()));
702 5 Usb_clear_STALLRQ();
703 5 break;
704 5 }
705 4 }
706 3 }
707 2 }
708 1 }
709
710
711 /*F**************************************************************************
712 * NAME: usb_clear_feature
713 *----------------------------------------------------------------------------
714 * PARAMS:
715 *
716 * return:
717 *----------------------------------------------------------------------------
718 * PURPOSE:
719 * This function manages the SET_FEATURE request.
720 *----------------------------------------------------------------------------
721 * EXAMPLE:
722 *----------------------------------------------------------------------------
723 * NOTE:
724 *----------------------------------------------------------------------------
725 * REQUIREMENTS:
726 *****************************************************************************/
727 void usb_clear_feature (void)
728 {
729 1 if (bmRequestType == ZERO_TYPE)
730 1 {
731 2 Usb_clear_RXSETUP();
732 2 Usb_set_STALLRQ();
733 2 while (!(Usb_STALL_sent()));
734 2 Usb_clear_STALLRQ();
735 2 }
736 1 if (bmRequestType == INTERFACE_TYPE)
C51 COMPILER V7.50 USB_DRV 06/03/2006 10:32:51 PAGE 13
737 1 {
738 2 Usb_clear_RXSETUP();
739 2 Usb_set_STALLRQ();
740 2 while (!(Usb_STALL_sent()));
741 2 Usb_clear_STALLRQ();
742 2 }
743 1 if (bmRequestType == ENDPOINT_TYPE)
744 1 {
745 2 if (Usb_read_byte() == 0x00)
746 2 {
747 3 ACC = Usb_read_byte(); /* dummy read */
748 3 switch (Usb_read_byte()) /* check wIndex */
749 3 {
750 4 case ENDPOINT_1:
751 4 {
752 5 Usb_select_ep(EP_IN);
753 5 if(Usb_STALL_requested())
754 5 {
755 6 Usb_clear_STALLRQ();
756 6 }
757 5 if(Usb_STALL_sent())
758 5 {
759 6 Usb_clear_STALLED();
760 6 }
761 5 UEPRST = 0x02;
762 5 UEPRST = 0x00;
763 5 Usb_select_ep(EP_CONTROL);
764 5 endpoint_status[EP_IN] = 0x00;
765 5 Usb_clear_RXSETUP();
766 5 Usb_set_TXRDY();
767 5 while (!(Usb_tx_complete()));
768 5 Usb_clear_TXCMPL();
769 5 break;
770 5 }
771 4 case ENDPOINT_2:
772 4 {
773 5 Usb_select_ep(EP_OUT);
774 5 if(Usb_STALL_requested())
775 5 {
776 6 Usb_clear_STALLRQ();
777 6 }
778 5 if(Usb_STALL_sent())
779 5 {
780 6 Usb_clear_STALLED();
781 6 }
782 5 UEPRST = 0x04;
783 5 UEPRST = 0x00;
784 5 Usb_select_ep(EP_CONTROL);
785 5 endpoint_status[EP_OUT] = 0x00;
786 5 Usb_clear_RXSETUP();
787 5 Usb_set_TXRDY();
788 5 while (!(Usb_tx_complete()));
789 5 Usb_clear_TXCMPL();
790 5 break;
791 5 }
792 4 case ENDPOINT_0:
793 4 {
794 5 Usb_clear_RXSETUP();
795 5 Usb_set_TXRDY();
796 5 while (!(Usb_tx_complete()));
797 5 Usb_clear_TXCMPL();
798 5 break;
C51 COMPILER V7.50 USB_DRV 06/03/2006 10:32:51 PAGE 14
799 5 }
800 4 default:
801 4 {
802 5 Usb_clear_RXSETUP();
803 5 Usb_set_STALLRQ();
804 5 while (!(Usb_STALL_sent()));
805 5 Usb_clear_STALLRQ();
806 5 break;
807 5 }
808 4 }
809 3 }
810 2 }
811 1 }
812
813
814
815
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1161 ----
CONSTANT SIZE = 120 ----
XDATA SIZE = ---- 3
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -