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

📄 usbcore.lst

📁 USB HID类软固件代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 784   5            
 785   5            default:  //未定义的标准请求
 786   5             #ifdef DEBUG0
 787   5              Prints("错误:未定义的标准输入请求。\r\n");
 788   5             #endif       
 789   5            break;
 790   5           }
 791   4          break;
 792   4          
 793   4          case 1:  //类请求
 794   4           #ifdef DEBUG0
 795   4            Prints("USB类输入请求:\r\n");
 796   4           #endif
 797   4          break;
 798   4          
 799   4          case 2:  //厂商请求
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:55 PAGE 14  

 800   4           #ifdef DEBUG0
 801   4            Prints("USB厂商输入请求:\r\n");
 802   4           #endif
 803   4          break;
 804   4          
 805   4          default: //未定义的请求。这里只显示一个报错信息。
 806   4           #ifdef DEBUG0
 807   4            Prints("错误:未定义的输入请求。\r\n");
 808   4           #endif
 809   4          break;
 810   4         }
 811   3        }
 812   2        //否则说明是输出请求
 813   2        else //if(bmRequestType&0x80==0x80)之else
 814   2        {
 815   3         //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
 816   3         //0为标准请求,1为类请求,2为厂商请求。
 817   3         switch((bmRequestType>>5)&0x03)
 818   3         {
 819   4          case 0:  //标准请求
 820   4           #ifdef DEBUG0
 821   4            Prints("USB标准输出请求:");
 822   4           #endif
 823   4           //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
 824   4           //请求的代码在bRequest中,对不同的请求代码进行散转
 825   4           switch(bRequest)
 826   4           {
 827   5            case CLEAR_FEATURE: //清除特性
 828   5             #ifdef DEBUG0
 829   5              Prints("清除特性。\r\n");
 830   5             #endif
 831   5            break;
 832   5            
 833   5            case SET_ADDRESS:  //设置地址
 834   5             #ifdef DEBUG0
 835   5              Prints("设置地址。地址为:");
 836   5              PrintHex(wValue&0xFF); //显示所设置的地址
 837   5              Prints("\r\n");
 838   5             #endif
 839   5             D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
 840   5             //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
 841   5             SendLength=0;
 842   5             NeedZeroPacket=1;
 843   5             //将数据通过EP0返回
 844   5             UsbEp0SendData();
 845   5            break;
 846   5            
 847   5            case SET_CONFIGURATION: //设置配置
 848   5             #ifdef DEBUG0
 849   5              Prints("设置配置。\r\n");
 850   5             #endif
 851   5             //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
 852   5             //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
 853   5             //保存当前配置值
 854   5             ConfigValue=wValue&0xFF;
 855   5             D12SetEndpointEnable(ConfigValue);
 856   5             //返回一个0长度的状态数据包
 857   5             SendLength=0;
 858   5             NeedZeroPacket=1;
 859   5             //将数据通过EP0返回
 860   5             UsbEp0SendData();
 861   5            break;
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:55 PAGE 15  

 862   5            
 863   5            case SET_DESCRIPTOR: //设置描述符
 864   5             #ifdef DEBUG0
 865   5              Prints("设置描述符。\r\n");
 866   5             #endif
 867   5            break;
 868   5            
 869   5            case SET_FEATURE: //设置特性
 870   5             #ifdef DEBUG0
 871   5              Prints("设置特性。\r\n");
 872   5             #endif
 873   5            break;
 874   5      
 875   5            case SET_INTERFACE: //设置接口
 876   5             #ifdef DEBUG0
 877   5              Prints("设置接口。\r\n");
 878   5             #endif
 879   5            break;      
 880   5            
 881   5            default:  //未定义的标准请求
 882   5             #ifdef DEBUG0
 883   5              Prints("错误:未定义的标准输出请求。\r\n");
 884   5             #endif       
 885   5            break;
 886   5           }
 887   4          break;
 888   4          
 889   4          case 1:  //类请求
 890   4           #ifdef DEBUG0
 891   4            Prints("USB类输出请求:");
 892   4           #endif
 893   4           switch(bRequest)
 894   4           {
 895   5            case SET_IDLE:
 896   5             #ifdef DEBUG0
 897   5              Prints("设置空闲。\r\n");
 898   5             #endif
 899   5             //只需要返回一个0长度的数据包即可
 900   5             SendLength=0;
 901   5             NeedZeroPacket=1;
 902   5             //将数据通过EP0返回
 903   5             UsbEp0SendData();
 904   5            break;
 905   5            
 906   5            default:
 907   5             #ifdef DEBUG0
 908   5              Prints("未知请求。\r\n");
 909   5             #endif
 910   5            break;
 911   5           }
 912   4          break;
 913   4          
 914   4          case 2:  //厂商请求
 915   4           #ifdef DEBUG0
 916   4            Prints("USB厂商输出请求:\r\n");
 917   4           #endif
 918   4          break;
 919   4          
 920   4          default: //未定义的请求。这里只显示一个报错信息。
 921   4           #ifdef DEBUG0
 922   4            Prints("错误:未定义的输出请求。\r\n");
 923   4           #endif
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:55 PAGE 16  

 924   4          break;
 925   4         }
 926   3        }
 927   2       }
 928   1       //普通数据输出
 929   1       else //if(D12ReadEndpointLastStatus(0)&0x20)之else
 930   1       {
 931   2        D12ReadEndpointBuffer(0,16,Buffer);
 932   2        D12ClearBuffer();
 933   2       }
 934   1      }
 935          ////////////////////////End of function//////////////////////////////
 936          
 937          /********************************************************************
 938          函数功能:端点0输入中断处理函数。
 939          入口参数:无。
 940          返    回:无。
 941          备    注:无。
 942          ********************************************************************/
 943          void UsbEp0In(void)
 944          {
 945   1      #ifdef DEBUG0
 946   1       Prints("USB端点0输入中断。\r\n");
 947   1      #endif
 948   1       //读最后发送状态,这将清除端点0的中断标志位
 949   1       D12ReadEndpointLastStatus(1);
 950   1       //发送剩余的字节数
 951   1       UsbEp0SendData();
 952   1      }
 953          ////////////////////////End of function//////////////////////////////
 954          
 955          /********************************************************************
 956          函数功能:端点1输出中断处理函数。
 957          入口参数:无。
 958          返    回:无。
 959          备    注:无。
 960          ********************************************************************/
 961          void UsbEp1Out(void)
 962          {
 963   1       uint8 Buf[8]; //用来保存8字节的输出报告。
 964   1      #ifdef DEBUG0
 965   1       Prints("USB端点1输出中断。\r\n");
 966   1      #endif
 967   1       //读端点最后状态,这将清除端点1输出的中断标志位
 968   1       D12ReadEndpointLastStatus(2);
 969   1       //从端点1输出缓冲读回8字节数据
 970   1       D12ReadEndpointBuffer(2,8,Buf);
 971   1       //清除端点缓冲区
 972   1       D12ClearBuffer();
 973   1       
 974   1       //输出报告第一字节为LED状态,某位为1时,表示LED亮。
 975   1       LEDs=~Buf[0];
 976   1       
 977   1       //输出报告的第二字节非0时,清除发送计数器Count。
 978   1       if(Buf[1]!=0)
 979   1       {
 980   2        Count=0;
 981   2       }
 982   1      }
 983          ////////////////////////End of function//////////////////////////////
 984          
 985          /********************************************************************
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:55 PAGE 17  

 986          函数功能:端点1输入中断处理函数。
 987          入口参数:无。
 988          返    回:无。
 989          备    注:无。
 990          ********************************************************************/
 991          void UsbEp1In(void)
 992          {
 993   1      #ifdef DEBUG0
 994   1       Prints("USB端点1输入中断。\r\n");
 995   1      #endif
 996   1       //读最后发送状态,这将清除端点1输入的中断标志位
 997   1       D12ReadEndpointLastStatus(3);
 998   1       //端点1输入处于空闲状态
 999   1       Ep1InIsBusy=0;
1000   1      }
1001          ////////////////////////End of function//////////////////////////////
1002          
1003          /********************************************************************
1004          函数功能:端点2输出中断处理函数。
1005          入口参数:无。
1006          返    回:无。
1007          备    注:无。
1008          ********************************************************************/
1009          void UsbEp2Out(void)
1010          {
1011   1      #ifdef DEBUG0
1012   1       Prints("USB端点2输出中断。\r\n");
1013   1      #endif
1014   1      }
1015          ////////////////////////End of function//////////////////////////////
1016          
1017          /********************************************************************
1018          函数功能:端点2输入中断处理函数。
1019          入口参数:无。
1020          返    回:无。
1021          备    注:无。
1022          ********************************************************************/
1023          void UsbEp2In(void)
1024          {
1025   1      #ifdef DEBUG0
1026   1       Prints("USB端点2输入中断。\r\n");
1027   1      #endif
1028   1      }
1029          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1273    ----
   CONSTANT SIZE    =   1002    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       8
   IDATA SIZE       =     16    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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