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

📄 chap_9.lst

📁 USB 源码 ISP1581 Device controller
💻 LST
📖 第 1 页 / 共 5 页
字号:
 776   2                      while(!USB_Int_Flag.BITS.EP0SETUP)
 777   2                      {
 778   3                              //读取ISP1581中断寄存器
 779   3                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 780   3                              //回写ISP1581中断寄存器
 781   3                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
 782   3                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 783   3                                      return;
 784   3                      }
 785   2                      USB_Int_Flag.BITS.EP0TX = 0;
 786   2              }
 787   1      }
 788          
 789          
 790          //Get_Config获取配置
 791          void get_config(void)
 792          {
 793   1              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 794   1              D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;
 795   1              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
 796   1              wait_ep0tx();
 797   1              ep0out_ack();
 798   1      }       
 799          
C51 COMPILER V7.01  CHAP_9                                                                 03/28/2003 14:38:29 PAGE 14  

 800          //Clear_Feature特性清除
 801          void clear_feature(void)
 802          {
 803   1              unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
 804   1              //端点
 805   1              if(bRecipient == 0x02 &&USB_Device_Request.wValue == 0x0000)
 806   1              {
 807   2                      switch(USB_Device_Request.wIndex)
 808   2                      {
 809   3                      case  0x8000   :
 810   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 811   3                              break;
 812   3                      case  0x0000   :
 813   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
 814   3                              break;
 815   3                      case  0x8100   :
 816   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
 817   3                              break;
 818   3                      case  0x0100   :
 819   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
 820   3                              break;
 821   3                      case  0x8200   :
 822   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
 823   3                              break;
 824   3                      case  0x0200   :
 825   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
 826   3                              break;
 827   3                      case  0x8300   :
 828   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
 829   3                              break;
 830   3                      case  0x0300   :
 831   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
 832   3                              break;
 833   3                      case  0x8400   :
 834   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
 835   3                              break;
 836   3                      case  0x0400   :
 837   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
 838   3                              break;
 839   3                      case  0x8500   :
 840   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
 841   3                              break;
 842   3                      case  0x0500   :
 843   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
 844   3                              break;
 845   3                      case  0x8600   :
 846   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
 847   3                              break;
 848   3                      case  0x0600   :
 849   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
 850   3                              break;
 851   3                      case  0x8700   :
 852   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
 853   3                              break;
 854   3                      case  0x0700   :
 855   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
 856   3                              break;
 857   3                      default        :  
 858   3                              break;
 859   3                      }                                                                                                      
 860   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
 861   2                      Kernel_Flag.BITS.Endpt_Stall = 0;
C51 COMPILER V7.01  CHAP_9                                                                 03/28/2003 14:38:29 PAGE 15  

 862   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;                 //disable FIFO
 863   2                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;                  //disable FIFO
 864   2                      ep0in_ack();
 865   2                      USB_Device.BITS.Halt = 0;
 866   2              }                                                                                       
 867   1              else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
 868   1              {       //远程唤醒
 869   2                      USB_Device.BITS.Remote_Wakeup = 0;
 870   2                      ep0in_ack();
 871   2              }
 872   1              else
 873   1              {
 874   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 875   2                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 876   2                      while(!USB_Int_Flag.BITS.EP0SETUP)
 877   2                      {
 878   3                              //读取ISP1581中断寄存器
 879   3                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 880   3                              //回写ISP1581中断寄存器
 881   3                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
 882   3                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 883   3                                      return;
 884   3                      }
 885   2                      USB_Int_Flag.BITS.EP0TX = 0;
 886   2              }
 887   1      }       
 888          
 889          //Get_Status获取设备状态
 890          void get_status(void)
 891          {
 892   1              if(USB_Device_Request.bmRequestType == 0x80)
 893   1              {
 894   2                      //端点0IN返回0x01,0x00两字节
 895   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 896   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 897   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 898   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
 899   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
 900   2                      //等待发送完毕
 901   2                      wait_ep0tx();
 902   2                      ep0out_ack();
 903   2              }
 904   1      
 905   1              if(USB_Device_Request.bmRequestType == 0x81)
 906   1              {
 907   2                      //端点0IN返回0x00,0x00两字节
 908   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 909   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 910   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 911   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
 912   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
 913   2                      wait_ep0tx();
 914   2                      ep0out_ack();
 915   2              }
 916   1      
 917   1              if(USB_Device_Request.bmRequestType == 0x82)
 918   1              {
 919   2                      Temp = 0;
 920   2                      Temp = USB_Device.BITS.Halt;
 921   2                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 922   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
 923   2                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
C51 COMPILER V7.01  CHAP_9                                                                 03/28/2003 14:38:29 PAGE 16  

 924   2                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
 925   2                      D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
 926   2                      wait_ep0tx();
 927   2                      ep0out_ack();
 928   2              }
 929   1      }       
 930          
 931          
 932          
 933          //Set_Feature特性设置
 934          //不支持测试模式
 935          void set_feature(void)
 936          {
 937   1              unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
 938   1              //端点
 939   1              if(bRecipient == 0x02 && USB_Device_Request.wValue == 0x0000)
 940   1              {
 941   2                      switch(USB_Device_Request.wIndex)
 942   2                      {
 943   3                      case  0x8000   :
 944   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 945   3                              break;
 946   3                      case  0x0000   :
 947   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
 948   3                              break;
 949   3                      case  0x8100   :
 950   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
 951   3                              break;
 952   3                      case  0x0100   :
 953   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
 954   3                              break;
 955   3                      case  0x8200   :
 956   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
 957   3                              break;
 958   3                      case  0x0200   :
 959   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
 960   3                              break;
 961   3                      case  0x8300   :
 962   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
 963   3                              break;
 964   3                      case  0x0300   :
 965   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
 966   3                              break;
 967   3                      case  0x8400   :
 968   3                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
 969   3                              br

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -