📄 usbofcompuer00.lst
字号:
506 1 #ifdef debug
Prints("连接USB.\r\n");
#endif
509 1 write_usb_command(0xf3); //初始化USBD12
510 1 write_a_usb_data(0x1e); //连接USB
511 1 write_a_usb_data(0x47); //设置频率
512 1 }
513 /******************************************************************************/
514
515 /***************************初始化USB***************************************************/
516 void init_usb(void)
517 {
518 1 #ifdef debug
Prints("USBD12芯片初始化\r\n");
#endif
521 1 set_usb_addr(0);
522 1 set_endpoint_enable();
523 1 }
524 /******************************************************************************/
525
526 /****************************USB总线复位处理***********************************/
527 void usb_bus_reset(void)
528 {
529 1 #ifdef debug
Prints("USB总线复位.\r\n");
#endif
532 1 usb_flags.Register=0;
533 1 set_endpoint_enable();
534 1 }
535 /******************************************************************************/
536
537 /*****************************USB总线挂起处理**********************************/
538 void usb_bus_suspend(void)
539 {
540 1 #ifdef debug
Prints("USB总线挂起.\r\n");
#endif
543 1 }
544 /******************************************************************************/
545
546 /***************************设置地址***************************************/
547 void set_usb_address(void)
548 {
549 1 usb_flags.flags.set_addr=1;
550 1 set_usb_addr(Control_Data.DeviceRequest.wValue);
551 1 while(select_endpoint(1)&0x01);
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 10
552 1 write_endpoint_buff(1,0,0);
553 1 while(select_endpoint(1)&0x01);
554 1 usb_flags.flags.usb_endp0_in=0;
555 1 usb_flags.flags.setup_packet_out=0;
556 1 }
557 /******************************************************************************/
558
559 /**************************获取状态响应*****************************************/
560 void get_status(uint8 receiver)
561 {
562 1 uint8 status[2];
563 1 switch (receiver)
564 1 {
565 2 case 0: //获取设备状态
566 2 status[0]=0x00;
567 2 status[1]=0x00;
568 2 break;
569 2 case 1: //获取接口状态
570 2 status[0]=0x00;
571 2 status[0]=0x00;
572 2 break;
573 2 case 2: //获取端点状态
574 2 status[0]=0x00;
575 2 status[1]=0x00;
576 2 break;
577 2 }
578 1 write_endpoint_buff(1,2,status);
579 1 usb_flags.flags.usb_endp0_in=0;
580 1 }
581 /******************************************************************************/
582
583 /*********************清除特性*******************************************/
584 void clear_feature(uint8 receiver)
585 {
586 1 #ifdef debug
Prints(" 清除特性.\r\n");
#endif
589 1 receiver=0;
590 1 write_endpoint_buff(1,0,0);
591 1 usb_flags.flags.usb_endp0_in=0;
592 1 usb_flags.flags.setup_packet_out=0;
593 1 }
594 /******************************************************************************/
595
596 /*******************设置特性**************************************************/
597 void set_feature(uint8 receiver)
598 {
599 1 #ifdef debug
Prints(" 设置特性.\r\n");
#endif
602 1 receiver=0;
603 1 write_endpoint_buff(1,0,0);
604 1 usb_flags.flags.usb_endp0_in=0;
605 1 usb_flags.flags.setup_packet_out=0;
606 1 }
607 /******************************************************************************/
608
609 /*****************************设置描述*****************************************/
610 void set_descriptor(void)
611 {
612 1 #ifdef debug
Prints(" 设置描述符.\r\n");
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 11
#endif
615 1 usb_flags.flags.usb_endp0_in=0;
616 1 usb_flags.flags.setup_packet_out=0;
617 1 }
618 /******************************************************************************/
619
620 /***************************设置配置*******************************************/
621 void set_configuration(void)
622 {
623 1 #ifdef debug
Prints(" 设置配置.\r\n");
#endif
626 1 write_endpoint_buff(1,0,0);
627 1 usb_flags.flags.usb_endp0_in=0;
628 1 usb_flags.flags.setup_packet_out=0;
629 1 }
630 /******************************************************************************/
631
632 /************************获取配置状态******************************************/
633 void get_configuration(void)
634 {
635 1 uint8 value=0x01;
636 1 #ifdef debug
Prints(" 获取配置.\r\n");
#endif
639 1 write_endpoint_buff(1,1,&value);
640 1 usb_flags.flags.usb_endp0_in=0;
641 1 }
642 /******************************************************************************/
643
644 /****************************设置接口************************************/
645 void set_interface(void)
646 {
647 1 #ifdef debug
Prints(" 设置接口.\r\n");
#endif
650 1 write_endpoint_buff(1,0,0);
651 1 usb_flags.flags.usb_endp0_in=0;
652 1 usb_flags.flags.setup_packet_out=0;
653 1 }
654 /******************************************************************************/
655
656 /***************************获取接口状态***************************************/
657 void get_interface(void)
658 {
659 1 uint8 value=0x01;
660 1 #ifdef debug
Prints(" 获取接口.\r\n");
#endif
663 1 write_endpoint_buff(1,1,&value);
664 1 usb_flags.flags.usb_endp0_in=0;
665 1 }
666 /******************************************************************************/
667
668 /***********************获取描述符*********************************************/
669 void get_descriptor(void)
670 {
671 1 #ifdef debug
Prints(" 获取描述符.\r\n");
#endif
674 1 if(!usb_flags.flags.not_end)
675 1 {
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 12
676 2 switch(MSB(Control_Data.DeviceRequest.wValue))
677 2 {
678 3 case DEVICE_DESCRIPTOR:
679 3 #ifdef debug
Prints(" 获取设备描述符.\r\n");
#endif
682 3 Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
683 3 Control_Data.pData=(uint8 *)(&device_descriptor);
684 3 break;
685 3 case CONFIGURATION_DESCRIPTOR:
686 3 #ifdef debug
Prints(" 获取配置描述符.\r\n");
#endif
689 3 Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
690 3 Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
691 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
692 3 break;
693 3 case STRING_DESCRIPTOR:
694 3 #ifdef debug
Prints(" 获取字符串描述符.\r\n");
#endif
697 3 switch(LSB(Control_Data.DeviceRequest.wValue))
698 3 {
699 4 case 0:
700 4 #ifdef debug
Prints(" 获取语言ID.\r\n");
#endif
703 4 Control_Data.wCount=LANGUAGE_ID[0];
704 4 Control_Data.pData=LANGUAGE_ID;
705 4 break;
706 4
707 4 case 1:
708 4 #ifdef debug
Prints(" 获取厂商字符串.\r\n");
#endif
711 4 Control_Data.wCount=ManufacturerString[0];
712 4 Control_Data.pData=ManufacturerString;
713 4 break;
714 4
715 4 case 2:
716 4 #ifdef debug
Prints(" 获取产品字符串.\r\n");
#endif
719 4 Control_Data.wCount=ProducterString[0];
720 4 Control_Data.pData=ProducterString;
721 4 break;
722 4
723 4 case 3:
724 4 #ifdef debug
Prints(" 获取设备序列号.\r\n");
#endif
727 4 Control_Data.wCount=device_serial_number[0];
728 4 Control_Data.pData=device_serial_number;
729 4 break;
730 4
731 4 default:
732 4 Prints(" 其它描述符(未知),描述符编码:");
733 4 PrintHex(MSB(Control_Data.DeviceRequest.wValue));
734 4 Prints("\r\n");
735 4 DispLineInf();
736 4 break;
737 4 }
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 13
738 3 break;
739 3 default:
740 3 Prints(" 获取其它描述符..................描述符索引为:");
741 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
742 3 Prints("\r\n");
743 3 DispLineInf();
744 3 break;
745 3 }
746 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
747 2 }
748 1 //写数据到D12输入端点
749 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
750 1 {
751 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
752 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
753 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
754 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
755 2 else usb_flags.flags.usb_endp0_in=0;
756 2 return;
757 2 }
758 1 else
759 1 {
760 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
761 2 usb_flags.flags.setup_packet_in=0;
762 2 usb_flags.flags.usb_endp0_in=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -