📄 usb_main.lst
字号:
796 {
797 1 short i = ControlData.wLength - ControlData.wCount;
798 1
799 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 14
800 1
801 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
802 1 return;
803 1 //-------------------------
804 1 if( i >= EP0_PACKET_SIZE) {
805 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
806 2 ControlData.wCount += EP0_PACKET_SIZE;
807 2
808 2 bEPPflags.bits.control_state = USB_TRANSMIT;
809 2 }
810 1 else if( i != 0) {
811 2 D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
812 2 ControlData.wCount += i;
813 2
814 2 bEPPflags.bits.control_state = USB_IDLE;
815 2 }
816 1 else if (i == 0){
817 2 D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
818 2
819 2 bEPPflags.bits.control_state = USB_IDLE;
820 2 }
821 1
822 1 }
823 //----------------------------------
824 void ep1_txdone(void)
825 {
826 1 D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
827 1 }
828
829 void ep1_rxdone(void)
830 {
831 1 unsigned char len;
832 1
833 1 D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
834 1
835 1 len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
836 1
837 1 if(len != 0)
838 1 bEPPflags.bits.ep1_rxdone = 1;
839 1 }
840 //---------------------------------
841 void main_txdone(void)
842 {
843 1 unsigned char len;
844 1
845 1 D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
846 1
847 1 len = ioSize - ioCount;
848 1 if(len == 0) {
849 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
850 2 bEPPflags.bits.setup_dma ++;
851 2 else
852 2 bEPPflags.bits.dma_state = DMA_IDLE;
853 2 }
854 1 else {
855 2 if(len > 64)
856 2 len = 64;
857 2 if(bNoRAM)
858 2 len = D12_WriteEndpoint(5, len, EpBuf + ioCount);
859 2 else
860 2 len = D12_WriteEndpoint(5, len, MainEpBuf + ioCount);
861 2 ioCount += len;
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 15
862 2 }
863 1 }
864
865 void main_rxdone(void)
866 {
867 1 unsigned char len;
868 1
869 1 D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
870 1
871 1 if(bNoRAM)
872 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
873 1 else
874 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
875 1 ioCount += len;
876 1 if(bNoRAM)
877 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
878 1 else
879 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
880 1 ioCount += len;
881 1 if(ioCount >= ioSize) {
882 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
883 2 bEPPflags.bits.setup_dma ++;
884 2 else
885 2 bEPPflags.bits.dma_state = DMA_IDLE;
886 2 }
887 1
888 1 }
889 //P61中断服务程序-ISR.C ----结束
890 //===============================================================
891 //===============================================================
892
893 //P70标准设备请求函数-CHAP_9.C
894 //===============================================================
895 //===============================================================
896
897 void reserved(void)
898 {
899 1 stall_ep0();
900 1 }
901
902 /*
903 //*************************************************************************
904 // USB standard device requests
905 //*************************************************************************
906 */
907
908 void get_status(void)
909 {
910 1 unsigned char endp, txdat[2];
911 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
912 1 unsigned char c;
913 1
914 1 if (bRecipient == USB_RECIPIENT_DEVICE) {
915 2 if(bEPPflags.bits.remote_wakeup == 1)
916 2 txdat[0] = 3;
917 2 else
918 2 txdat[0] = 1;
919 2 txdat[1]=0;
920 2 single_transmit(txdat, 2);
921 2 } else if (bRecipient == USB_RECIPIENT_INTERFACE) {
922 2 txdat[0]=0;
923 2 txdat[1]=0;
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 16
924 2 single_transmit(txdat, 2);
925 2 } else if (bRecipient == USB_RECIPIENT_ENDPOINT) {
926 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
927 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
928 2 c = D12_SelectEndpoint(endp*2 + 1); /* Control-in */
929 2
930 2
931 2 else
932 2 c = D12_SelectEndpoint(endp*2); /* Control-out */
933 2 if(c & D12_STALL)
934 2 txdat[0] = 1;
935 2 else
936 2 txdat[0] = 0;
937 2 txdat[1] = 0;
938 2 single_transmit(txdat, 2);
939 2 } else
940 1 stall_ep0();
941 1 }
942
943 void clear_feature(void)
944 {
945 1 unsigned char endp;
946 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
947 1
948 1 if (bRecipient == USB_RECIPIENT_DEVICE
949 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
950 2 DISABLE;
951 2 bEPPflags.bits.remote_wakeup = 0;
952 2 ENABLE;
953 2 single_transmit(0, 0);
954 2 }
955 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
956 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
957 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
958 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
959 2 // clear TX stall for IN on EPn.
960 2 D12_SetEndpointStatus(endp*2 + 1, 0);
961 2 else
962 2 // clear RX stall for OUT on EPn.
963 2 D12_SetEndpointStatus(endp*2, 0);
964 2 single_transmit(0, 0);
965 2 } else
966 1 stall_ep0();
967 1 }
968
969 void set_feature(void)
970 {
971 1 unsigned char endp;
972 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
973 1
974 1 if (bRecipient == USB_RECIPIENT_DEVICE
975 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
976 2 DISABLE;
977 2 bEPPflags.bits.remote_wakeup = 1;
978 2 ENABLE;
979 2 single_transmit(0, 0);
980 2 }
981 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
982 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
983 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
984 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
985 2 // clear TX stall for IN on EPn.
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 17
986 2 D12_SetEndpointStatus(endp*2 + 1, 1);
987 2 else
988 2 // clear RX stall for OUT on EPn.
989 2 D12_SetEndpointStatus(endp*2, 1);
990 2 single_transmit(0, 0);
991 2 } else
992 1 stall_ep0();
993 1 }
994
995 void set_address(void)
996 {
997 1 D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
998 1 DEVICE_ADDRESS_MASK), 1);
999 1 single_transmit(0, 0);
1000 1 }
1001
1002 void get_descriptor(void)
1003 {
1004 1 unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
1005 1
1006 1 if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
1007 2 code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
1008 2 }
1009 1 else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
1010 2 code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
1011 2 }
1012 1 else
1013 1 stall_ep0();
1014 1 }
1015
1016 void get_configuration(void)
1017 {
1018 1 unsigned char c = bEPPflags.bits.configuration;
1019 1
1020 1 single_transmit(&c, 1);
1021 1 }
1022
1023 void set_configuration(void)
1024 {
1025 1 if (ControlData.DeviceRequest.wValue == 0) {
1026 2 //* put device in unconfigured state
1027 2 single_transmit(0, 0);
1028 2 DISABLE;
1029 2 bEPPflags.bits.configuration = 0;
1030 2 ENABLE;
1031 2 init_unconfig();
1032 2 } else if (ControlData.DeviceRequest.wValue == 1) {
1033 2 // Configure device
1034 2 single_transmit(0, 0);
1035 2
1036 2 init_unconfig();
1037 2 init_config();
1038 2
1039 2 DISABLE;
1040 2 bEPPflags.bits.configuration = 1;
1041 2 ENABLE;
1042 2 } else
1043 1 stall_ep0();
1044 1 }
1045
1046 void get_interface(void)
1047 {
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 18
1048 1 unsigned char txdat = 0; // Only/Current interface = 0
1049 1 single_transmit(&txdat, 1);
1050 1 }
1051
1052 void set_interface(void)
1053 {
1054 1 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
1055 1 single_transmit(0, 0);
1056 1 else
1057 1 stall_ep0();
1058 1 }
1059 //P70标准设备请求函数-CHAP_9.C ----结束
1060 //===============================================================
1061 //===============================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -