📄 usbcore.lst
字号:
273 //bDescriptorType字段。配置描述符编号为0x02。
274 0x02,
275
276 //wTotalLength字段。配置描述符集合的总长度,
277 //包括配置描述符本身、接口描述符、类描述符、端点描述符等。
278 sizeof(ConfigurationDescriptor)&0xFF, //低字节
279 (sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节
280
281 //bNumInterfaces字段。该配置包含的接口数,只有一个接口。
282 0x01,
283
284 //bConfiguration字段。该配置的值为1。
285 0x01,
286
287 //iConfigurationz字段,该配置的字符串索引。这里没有,为0。
288 0x00,
289
290 //bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
291 //并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
292 0x80,
293
294 //bMaxPower字段,该设备需要的最大电流量。由于我们的板子
295 //需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
296 //电流为2mA,所以这里设置为50(0x32)。
297 0x32,
298
299 /*******************接口描述符*********************/
300 //bLength字段。接口描述符的长度为9字节。
301 0x09,
302
303 //bDescriptorType字段。接口描述符的编号为0x04。
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 6
304 0x04,
305
306 //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
307 0x00,
308
309 //bAlternateSetting字段。该接口的备用编号,为0。
310 0x00,
311
312 //bNumEndpoints字段。非0端点的数目。该USB键盘需要二个
313 //中断端点(一个输入一个输出),因此该值为2。
314 0x02,
315
316 //bInterfaceClass字段。该接口所使用的类。USB键盘是HID类,
317 //HID类的编码为0x03。
318 0x03,
319
320 //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
321 //只规定了一种子类:支持BIOS引导启动的子类。
322 //USB键盘、鼠标属于该子类,子类代码为0x01。
323 0x01,
324
325 //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
326 //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
327 0x01,
328
329 //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
330 0x00,
331
332 /******************HID描述符************************/
333 //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
334 0x09,
335
336 //bDescriptorType字段。HID描述符的编号为0x21。
337 0x21,
338
339 //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
340 0x10,
341 0x01,
342
343 //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
344 0x21,
345
346 //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
347 0x01,
348
349 //bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
350 0x22,
351
352 //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
353 sizeof(ReportDescriptor)&0xFF,
354 (sizeof(ReportDescriptor)>>8)&0xFF,
355
356 /**********************输入端点描述符***********************/
357 //bLength字段。端点描述符长度为7字节。
358 0x07,
359
360 //bDescriptorType字段。端点描述符编号为0x05。
361 0x05,
362
363 //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
364 //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
365 0x81,
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 7
366
367 //bmAttributes字段。D1~D0为端点传输类型选择。
368 //该端点为中断端点。中断端点的编号为3。其它位保留为0。
369 0x03,
370
371 //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
372 //注意低字节在先。
373 0x10,
374 0x00,
375
376 //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
377 0x0A,
378
379 /**********************输出端点描述符***********************/
380 //bLength字段。端点描述符长度为7字节。
381 0x07,
382
383 //bDescriptorType字段。端点描述符编号为0x05。
384 0x05,
385
386 //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
387 //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
388 0x01,
389
390 //bmAttributes字段。D1~D0为端点传输类型选择。
391 //该端点为中断端点。中断端点的编号为3。其它位保留为0。
392 0x03,
393
394 //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
395 //注意低字节在先。
396 0x10,
397 0x00,
398
399 //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
400 0x0A
401 };
402 ////////////////////////配置描述符集合完毕//////////////////////////
403
404 /************************语言ID的定义********************/
405 code uint8 LanguageId[4]=
406 {
407 0x04, //本描述符的长度
408 0x03, //字符串描述符
409 //0x0409为美式英语的ID
410 0x09,
411 0x04
412 };
413 ////////////////////////语言ID完毕//////////////////////////////////
414
415 /**************************************************/
416 /********* 本转换结果来自 **********/
417 /********* Http://computer00.21ic.org **********/
418 /********* 作者: 电脑圈圈 **********/
419 /********* 欢迎大家使用 **********/
420 /********* 版权所有,盗版请写明出处 **********/
421 /**************************************************/
422
423 //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
424 //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
425 //8位小端格式
426 code uint8 ManufacturerStringDescriptor[82]={
427 82, //该描述符的长度为82字节
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 8
428 0x03, //字符串描述符的类型编码为0x03
429 0x35, 0x75, //电
430 0x11, 0x81, //脑
431 0x08, 0x57, //圈
432 0x08, 0x57, //圈
433 0x84, 0x76, //的
434 0x55, 0x00, //U
435 0x53, 0x00, //S
436 0x42, 0x00, //B
437 0x13, 0x4e, //专
438 0x3a, 0x53, //区
439 0x20, 0x00, //
440 0x48, 0x00, //H
441 0x74, 0x00, //t
442 0x74, 0x00, //t
443 0x70, 0x00, //p
444 0x3a, 0x00, //:
445 0x2f, 0x00, ///
446 0x2f, 0x00, ///
447 0x67, 0x00, //g
448 0x72, 0x00, //r
449 0x6f, 0x00, //o
450 0x75, 0x00, //u
451 0x70, 0x00, //p
452 0x2e, 0x00, //.
453 0x65, 0x00, //e
454 0x64, 0x00, //d
455 0x6e, 0x00, //n
456 0x63, 0x00, //c
457 0x68, 0x00, //h
458 0x69, 0x00, //i
459 0x6e, 0x00, //n
460 0x61, 0x00, //a
461 0x2e, 0x00, //.
462 0x63, 0x00, //c
463 0x6f, 0x00, //o
464 0x6d, 0x00, //m
465 0x2f, 0x00, ///
466 0x39, 0x00, //9
467 0x33, 0x00, //3
468 0x2f, 0x00 ///
469 };
470 /////////////////////////厂商字符串结束/////////////////////////////
471
472 //字符串“《圈圈教你玩USB》之USB键盘”的Unicode编码
473 //8位小端格式
474 code uint8 ProductStringDescriptor[34]={
475 34, //该描述符的长度为34字节
476 0x03, //字符串描述符的类型编码为0x03
477 0x0a, 0x30, //《
478 0x08, 0x57, //圈
479 0x08, 0x57, //圈
480 0x59, 0x65, //教
481 0x60, 0x4f, //你
482 0xa9, 0x73, //玩
483 0x55, 0x00, //U
484 0x53, 0x00, //S
485 0x42, 0x00, //B
486 0x0b, 0x30, //》
487 0x4b, 0x4e, //之
488 0x55, 0x00, //U
489 0x53, 0x00, //S
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 9
490 0x42, 0x00, //B
491 0x2e, 0x95, //键
492 0xd8, 0x76 //盘
493 };
494 ////////////////////////产品字符串结束////////////////////////////
495
496 //字符串“2008-07-12”的Unicode编码
497 //8位小端格式
498 code uint8 SerialNumberStringDescriptor[22]={
499 22, //该描述符的长度为22字节
500 0x03, //字符串描述符的类型编码为0x03
501 0x32, 0x00, //2
502 0x30, 0x00, //0
503 0x30, 0x00, //0
504 0x38, 0x00, //8
505 0x2d, 0x00, //-
506 0x30, 0x00, //0
507 0x37, 0x00, //7
508 0x2d, 0x00, //-
509 0x31, 0x00, //1
510 0x32, 0x00 //2
511 };
512 //////////////////////产品序列号字符串结束/////////////////////////
513
514 /********************************************************************
515 函数功能:延时x毫秒函数。
516 入口参数:x:延时的毫秒数。
517 返 回:无。
518 备 注:无。
519 ********************************************************************/
520 void DelayXms(uint16 x)
521 {
522 1 uint16 i;
523 1 uint16 j;
524 1 for(i=0;i<x;i++)
525 1 for(j=0;j<227;j++); //循环语句延时
526 1 }
527 ////////////////////////End of function//////////////////////////////
528
529 /********************************************************************
530 函数功能:USB断开连接函数。
531 入口参数:无。
532 返 回:无。
533 备 注:无。
534 ********************************************************************/
535 void UsbDisconnect(void)
536 {
537 1 #ifdef DEBUG0
538 1 Prints("断开USB连接。\r\n");
539 1 #endif
540 1 D12WriteCommand(D12_SET_MODE); //写设置模式命令
541 1 D12WriteByte(0x06); //设置模式的第一字节
542 1 D12WriteByte(0x47); //设置模式的第二字节
543 1 DelayXms(1000); //延迟1秒
544 1 }
545 ////////////////////////End of function//////////////////////////////
546
547 /********************************************************************
548 函数功能:USB连接函数。
549 入口参数:无。
550 返 回:无。
551 备 注:无。
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -