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

📄 usbcore.lst

📁 2010年新增TX-1C程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 264           //wTotalLength字段。配置描述符集合的总长度,
 265           //包括配置描述符本身、接口描述符、类描述符、端点描述符等。
 266           sizeof(ConfigurationDescriptor)&0xFF, //低字节
 267           (sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节
 268           
 269           //bNumInterfaces字段。该配置包含的接口数,只有一个接口。
 270           0x01,
 271           
 272           //bConfiguration字段。该配置的值为1。
 273           0x01,
 274           
 275           //iConfigurationz字段,该配置的字符串索引。这里没有,为0。
 276           0x00,
 277           
 278           //bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
 279           //并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
 280           0x80,
 281           
 282           //bMaxPower字段,该设备需要的最大电流量。由于我们的板子
 283           //需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
 284           //电流为2mA,所以这里设置为50(0x32)。
 285           0x32,
 286           
 287           /*******************接口描述符*********************/
 288           //bLength字段。接口描述符的长度为9字节。
 289           0x09,
 290           
 291           //bDescriptorType字段。接口描述符的编号为0x04。
 292           0x04,
 293           
 294           //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
 295           0x00,
 296           
 297           //bAlternateSetting字段。该接口的备用编号,为0。
 298           0x00,
 299           
 300           //bNumEndpoints字段。非0端点的数目。该USB键盘需要二个
 301           //中断端点(一个输入一个输出),因此该值为2。
 302           0x02,
 303           
C51 COMPILER V8.02   USBCORE                                                               06/17/2010 09:51:39 PAGE 6   

 304           //bInterfaceClass字段。该接口所使用的类。USB键盘是HID类,
 305           //HID类的编码为0x03。
 306           0x03,
 307           
 308           //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
 309           //只规定了一种子类:支持BIOS引导启动的子类。
 310           //USB键盘、鼠标属于该子类,子类代码为0x01。
 311           0x01,
 312           
 313           //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
 314           //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
 315           0x01,
 316           
 317           //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
 318           0x00,
 319           
 320           /******************HID描述符************************/
 321           //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
 322           0x09,
 323           
 324           //bDescriptorType字段。HID描述符的编号为0x21。
 325           0x21,
 326           
 327           //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
 328           0x10,
 329           0x01,
 330           
 331           //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
 332           0x21,
 333           
 334           //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
 335           0x01,
 336           
 337           //bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
 338           0x22,
 339           
 340           //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
 341           sizeof(ReportDescriptor)&0xFF,
 342           (sizeof(ReportDescriptor)>>8)&0xFF,
 343           
 344           /**********************输入端点描述符***********************/
 345           //bLength字段。端点描述符长度为7字节。
 346           0x07,
 347           
 348           //bDescriptorType字段。端点描述符编号为0x05。
 349           0x05,
 350           
 351           //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
 352           //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
 353           0x81,
 354           
 355           //bmAttributes字段。D1~D0为端点传输类型选择。
 356           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 357           0x03,
 358           
 359           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 360           //注意低字节在先。
 361           0x10,
 362           0x00,
 363           
 364           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 365           0x0A,
C51 COMPILER V8.02   USBCORE                                                               06/17/2010 09:51:39 PAGE 7   

 366           
 367           /**********************输出端点描述符***********************/
 368           //bLength字段。端点描述符长度为7字节。
 369           0x07,
 370           
 371           //bDescriptorType字段。端点描述符编号为0x05。
 372           0x05,
 373           
 374           //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
 375           //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
 376           0x01,
 377           
 378           //bmAttributes字段。D1~D0为端点传输类型选择。
 379           //该端点为中断端点。中断端点的编号为3。其它位保留为0。
 380           0x03,
 381           
 382           //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
 383           //注意低字节在先。
 384           0x10,
 385           0x00,
 386           
 387           //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
 388           0x0A
 389          };
 390          ////////////////////////配置描述符集合完毕//////////////////////////
 391          
 392          /************************语言ID的定义********************/
 393          code uint8 LanguageId[4]=
 394          {
 395           0x04, //本描述符的长度
 396           0x03, //字符串描述符
 397           //0x0409为美式英语的ID
 398           0x09,
 399           0x04
 400          };
 401          ////////////////////////语言ID完毕//////////////////////////////////
 402          
 403          
 404          //字符串““天祥电子” Http:www.txmcu.cn”的Unicode编码
 405          //8位小端格式
 406          code uint8 ManufacturerStringDescriptor[52]={
 407          52,         //该描述符的长度为82字节
 408          0x03,       //字符串描述符的类型编码为0x03
 409          0x1c, 0x20, //“
 410          0x29, 0x59, //天
 411          0x65, 0x79, //祥
 412          0x35, 0x75, //电
 413          0x50, 0x5b, //子
 414          0x1d, 0x20, //”
 415          0x20, 0x00, // 
 416          0x48, 0x00, //H
 417          0x74, 0x00, //t
 418          0x74, 0x00, //t
 419          0x70, 0x00, //p
 420          0x3a, 0x00, //:
 421          0x77, 0x00, //w
 422          0x77, 0x00, //w
 423          0x77, 0x00, //w
 424          0x2e, 0x00, //.
 425          0x74, 0x00, //t
 426          0x78, 0x00, //x
 427          0x6d, 0x00, //m
C51 COMPILER V8.02   USBCORE                                                               06/17/2010 09:51:39 PAGE 8   

 428          0x63, 0x00, //c
 429          0x75, 0x00, //u
 430          0x2e, 0x00, //.
 431          0x63, 0x00, //c
 432          0x6f, 0x00, //o
 433          0x6d, 0x00 //m
 434          };
 435          /////////////////////////厂商字符串结束/////////////////////////////
 436          
 437          //字符串““天祥电子”之USB键盘”的Unicode编码
 438          //8位小端格式
 439          code uint8 ProductStringDescriptor[34]={
 440          34,         //该描述符的长度为34字节
 441          0x03,       //字符串描述符的类型编码为0x03
 442          0x1c, 0x20, //“
 443          0x29, 0x59, //天
 444          0x65, 0x79, //祥
 445          0x35, 0x75, //电
 446          0x50, 0x5b, //子
 447          0x1d, 0x20, //”
 448          0x4b, 0x4e, //之
 449          0x55, 0x00, //U
 450          0x53, 0x00, //S
 451          0x42, 0x00, //B
 452          0x2e, 0x95, //键
 453          0xd8, 0x76  //盘
 454          };
 455          ////////////////////////产品字符串结束////////////////////////////
 456          
 457          //字符串“2008-07-12”的Unicode编码
 458          //8位小端格式
 459          code uint8 SerialNumberStringDescriptor[22]={
 460          22,         //该描述符的长度为22字节
 461          0x03,       //字符串描述符的类型编码为0x03
 462          0x32, 0x00, //2
 463          0x30, 0x00, //0
 464          0x31, 0x00, //0
 465          0x30, 0x00, //8
 466          0x2d, 0x00, //-
 467          0x30, 0x00, //0
 468          0x36, 0x00, //7
 469          0x2d, 0x00, //-
 470          0x31, 0x00, //1
 471          0x32, 0x00  //2
 472          };
 473          //////////////////////产品序列号字符串结束/////////////////////////
 474          
 475          /********************************************************************
 476          函数功能:延时x毫秒函数。
 477          入口参数:x:延时的毫秒数。
 478          返    回:无。
 479          备    注:无。
 480          ********************************************************************/
 481          void DelayXms(uint16 x)                
 482          {
 483   1       uint16 i;
 484   1       uint16 j;
 485   1       for(i=0;i<x;i++)
 486   1       for(j=0;j<227;j++); //循环语句延时
 487   1      }
 488          ////////////////////////End of function//////////////////////////////
 489          
C51 COMPILER V8.02   USBCORE                                                               06/17/2010 09:51:39 PAGE 9   

 490          /********************************************************************
 491          函数功能:USB断开连接函数。
 492          入口参数:无。
 493          返    回:无。
 494          备    注:无。
 495          ********************************************************************/
 496          void UsbDisconnect(void)
 497          {
 498   1      #ifdef DEBUG0
 499   1       Prints("断开USB连接。\r\n");
 500   1      #endif
 501   1      outportb(D12COMMAND, 0xF3);  //写设置模式命令
 502   1       outportb(D12DATA, 0x06);
 503   1       outportb(D12DATA, 0x47);
 504   1       
 505   1       DelayXms(1000);  //延迟1秒
 506   1      }
 507          ////////////////////////End of function//////////////////////////////
 508          
 509          /********************************************************************
 510          函数功能:USB连接函数。
 511          入口参数:无。
 512          返    回:无。
 513          备    注:无。
 514          ********************************************************************/
 515          void UsbConnect(void)
 516          {
 517   1      #ifdef DEBUG0
 518   1       Prints("连接USB。\r\n");
 519   1      #endif
 520   1       outportb(D12COMMAND, 0xF3);
 521   1        //写设置模式命令
 522   1      outportb(D12DATA, 0x16);
 523   1      outportb(D12DATA, 0x47);
 524   1      }
 525          ////////////////////////End of function//////////////////////////////
 526          
 527          /********************************************************************
 528          函数功能:总线挂起中断处理函数。
 529          入口参数:无。
 530          返    回:无。
 531          备    注:无。
 532          ********************************************************************/
 533          void UsbBusSuspend(void)
 534          {
 535   1      #ifdef DEBUG0

⌨️ 快捷键说明

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