📄 usbcore.lst
字号:
492 //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
493 //注意低字节在先。
494 0x10,
495 0x00,
496
497 //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
498 0x0A,
499
500 /**********************输出端点描述符***********************/
501 //bLength字段。端点描述符长度为7字节。
502 0x07,
503
504 //bDescriptorType字段。端点描述符编号为0x05。
505 0x05,
506
507 //bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
508 //D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
509 0x01,
510
511 //bmAttributes字段。D1~D0为端点传输类型选择。
512 //该端点为中断端点。中断端点的编号为3。其它位保留为0。
513 0x03,
514
515 //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
516 //注意低字节在先。
517 0x10,
518 0x00,
519
520 //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
521 0x0A
522 };
523 ////////////////////////配置描述符集合完毕//////////////////////////
524
525 /************************语言ID的定义********************/
526 code uint8 LanguageId[4]=
527 {
528 0x04, //本描述符的长度
529 0x03, //字符串描述符
530 //0x0409为美式英语的ID
531 0x09,
532 0x04
533 };
534 ////////////////////////语言ID完毕//////////////////////////////////
535
536 /**************************************************/
537 /********* 本转换结果来自 **********/
538 /********* Http://computer00.21ic.org **********/
539 /********* 作者: 电脑圈圈 **********/
540 /********* 欢迎大家使用 **********/
541 /********* 版权所有,盗版请写明出处 **********/
542 /**************************************************/
543
544 //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
545 //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
546 //8位小端格式
547 code uint8 ManufacturerStringDescriptor[82]={
548 82, //该描述符的长度为82字节
549 0x03, //字符串描述符的类型编码为0x03
550 0x35, 0x75, //电
551 0x11, 0x81, //脑
C51 COMPILER V7.06 USBCORE 11/16/2008 15:59:49 PAGE 10
552 0x08, 0x57, //圈
553 0x08, 0x57, //圈
554 0x84, 0x76, //的
555 0x55, 0x00, //U
556 0x53, 0x00, //S
557 0x42, 0x00, //B
558 0x13, 0x4e, //专
559 0x3a, 0x53, //区
560 0x20, 0x00, //
561 0x48, 0x00, //H
562 0x74, 0x00, //t
563 0x74, 0x00, //t
564 0x70, 0x00, //p
565 0x3a, 0x00, //:
566 0x2f, 0x00, ///
567 0x2f, 0x00, ///
568 0x67, 0x00, //g
569 0x72, 0x00, //r
570 0x6f, 0x00, //o
571 0x75, 0x00, //u
572 0x70, 0x00, //p
573 0x2e, 0x00, //.
574 0x65, 0x00, //e
575 0x64, 0x00, //d
576 0x6e, 0x00, //n
577 0x63, 0x00, //c
578 0x68, 0x00, //h
579 0x69, 0x00, //i
580 0x6e, 0x00, //n
581 0x61, 0x00, //a
582 0x2e, 0x00, //.
583 0x63, 0x00, //c
584 0x6f, 0x00, //o
585 0x6d, 0x00, //m
586 0x2f, 0x00, ///
587 0x39, 0x00, //9
588 0x33, 0x00, //3
589 0x2f, 0x00 ///
590 };
591 /////////////////////////厂商字符串结束/////////////////////////////
592
593 //字符串“《圈圈教你玩USB》之多媒体USB键盘”的Unicode编码
594 //8位小端格式
595 code uint8 ProductStringDescriptor[40]={
596 40, //该描述符的长度为40字节
597 0x03, //字符串描述符的类型编码为0x03
598 0x0a, 0x30, //《
599 0x08, 0x57, //圈
600 0x08, 0x57, //圈
601 0x59, 0x65, //教
602 0x60, 0x4f, //你
603 0xa9, 0x73, //玩
604 0x55, 0x00, //U
605 0x53, 0x00, //S
606 0x42, 0x00, //B
607 0x0b, 0x30, //》
608 0x4b, 0x4e, //之
609 0x1a, 0x59, //多
610 0x92, 0x5a, //媒
611 0x53, 0x4f, //体
612 0x55, 0x00, //U
613 0x53, 0x00, //S
C51 COMPILER V7.06 USBCORE 11/16/2008 15:59:49 PAGE 11
614 0x42, 0x00, //B
615 0x2e, 0x95, //键
616 0xd8, 0x76 //盘
617 };
618 ////////////////////////产品字符串结束////////////////////////////
619
620 //字符串“2008-07-17”的Unicode编码
621 //8位小端格式
622 code uint8 SerialNumberStringDescriptor[22]={
623 22, //该描述符的长度为22字节
624 0x03, //字符串描述符的类型编码为0x03
625 0x32, 0x00, //2
626 0x30, 0x00, //0
627 0x30, 0x00, //0
628 0x38, 0x00, //8
629 0x2d, 0x00, //-
630 0x30, 0x00, //0
631 0x37, 0x00, //7
632 0x2d, 0x00, //-
633 0x31, 0x00, //1
634 0x37, 0x00 //7
635 };
636 //////////////////////产品序列号字符串结束/////////////////////////
637
638 /********************************************************************
639 函数功能:延时x毫秒函数。
640 入口参数:x:延时的毫秒数。
641 返 回:无。
642 备 注:无。
643 ********************************************************************/
644 void DelayXms(uint16 x)
645 {
646 1 uint16 i;
647 1 uint16 j;
648 1 for(i=0;i<x;i++)
649 1 for(j=0;j<227;j++); //循环语句延时
650 1 }
651 ////////////////////////End of function//////////////////////////////
652
653 /********************************************************************
654 函数功能:USB断开连接函数。
655 入口参数:无。
656 返 回:无。
657 备 注:无。
658 ********************************************************************/
659 void UsbDisconnect(void)
660 {
661 1 #ifdef DEBUG0
662 1 Prints("断开USB连接。\r\n");
663 1 #endif
664 1 D12WriteCommand(D12_SET_MODE); //写设置模式命令
665 1 D12WriteByte(0x06); //设置模式的第一字节
666 1 D12WriteByte(0x47); //设置模式的第二字节
667 1 DelayXms(1000); //延迟1秒
668 1 }
669 ////////////////////////End of function//////////////////////////////
670
671 /********************************************************************
672 函数功能:USB连接函数。
673 入口参数:无。
674 返 回:无。
675 备 注:无。
C51 COMPILER V7.06 USBCORE 11/16/2008 15:59:49 PAGE 12
676 ********************************************************************/
677 void UsbConnect(void)
678 {
679 1 #ifdef DEBUG0
680 1 Prints("连接USB。\r\n");
681 1 #endif
682 1 D12WriteCommand(D12_SET_MODE); //写设置模式命令
683 1 D12WriteByte(0x16); //设置模式的第一字节
684 1 D12WriteByte(0x47); //设置模式的第二字节
685 1 }
686 ////////////////////////End of function//////////////////////////////
687
688 /********************************************************************
689 函数功能:总线挂起中断处理函数。
690 入口参数:无。
691 返 回:无。
692 备 注:无。
693 ********************************************************************/
694 void UsbBusSuspend(void)
695 {
696 1 #ifdef DEBUG0
697 1 Prints("USB总线挂起。\r\n");
698 1 #endif
699 1 }
700 ////////////////////////End of function//////////////////////////////
701
702 /********************************************************************
703 函数功能:总线复位中断处理函数。
704 入口参数:无。
705 返 回:无。
706 备 注:无。
707 ********************************************************************/
708 void UsbBusReset(void)
709 {
710 1 #ifdef DEBUG0
711 1 Prints("USB总线复位。\r\n");
712 1 #endif
713 1 Ep1InIsBusy=0; //复位后端点1输入缓冲区空闲。
714 1 }
715 ////////////////////////End of function//////////////////////////////
716
717 /********************************************************************
718 函数功能:根据pData和SendLength将数据发送到端点0的函数。
719 入口参数:无。
720 返 回:无。
721 备 注:无。
722 ********************************************************************/
723 void UsbEp0SendData(void)
724 {
725 1 //将数据写到端点中去准备发送
726 1 //写之前要先判断一下需要发送的数据是否比端点0
727 1 //最大长度大,如果超过端点大小,则一次只能发送
728 1 //最大包长的数据。端点0的最大包长在DeviceDescriptor[7]
729 1 if(SendLength>DeviceDescriptor[7])
730 1 {
731 2 //按最大包长度发送
732 2 D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
733 2 //发送后剩余字节数减少最大包长
734 2 SendLength-=DeviceDescriptor[7];
735 2 //发送一次后指针位置要调整
736 2 pSendData+= DeviceDescriptor[7];
737 2 }
C51 COMPILER V7.06 USBCORE 11/16/2008 15:59:49 PAGE 13
738 1 else
739 1 {
740 2 if(SendLength!=0)
741 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -