⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_main.lst

📁 PDIUSBD12与51接口的固件KEIL6.23调试通过
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -