📄 usb2uart.lst
字号:
505 /******************************************************************************/
506
507 /*************************写终端点缓冲*****************************************/
508 uint8 write_endpoint_buff(uint8 endp,uint8 len,uint8 * buff)
509 {
510 1 uint8 i;
511 1 read_last_status(endp);
512 1 select_endpoint(endp);
513 1 write_usb_command(Write_Buffer);
514 1 write_a_usb_data(0);
515 1 write_a_usb_data(len);
516 1 #ifdef debug
Prints("Write endpoint");
PrintLongInt(endp);
Prints("\'s buffer ");
PrintLongInt(len);
Prints(" bytes.\r\n");
#endif
523 1 for(i=0;i<len;i++)
524 1 {
525 2 USB_DATA=*(buff+i);
526 2 USB_WR=0;
527 2 USB_WR=1;
528 2 #ifdef debug
PrintHex(*(buff+i));
#endif
531 2 }
532 1 #ifdef debug
Prints("\r\n");
#endif
535 1 USB_DATA=0xFF;
536 1 validate_buffer();
537 1 return len;
538 1 }
539 /******************************************************************************/
540
541 /***************************断开USB连接****************************************/
542 void disconnect_usb(void)
543 {
544 1 #ifdef debug
Prints("断开USB连接.\r\n");
#endif
547 1 write_usb_command(0xf3);
548 1 write_a_usb_data(0x0e);
549 1 write_a_usb_data(0x47);
550 1 delay(100);
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 10
551 1 }
552 /******************************************************************************/
553
554 /*******************************连接USB**************************************/
555 void connect_usb(void)
556 {
557 1 #ifdef debug
Prints("连接USB.\r\n");
#endif
560 1 write_usb_command(0xf3); //初始化USBD12
561 1 write_a_usb_data(0x1e); //连接USB
562 1 write_a_usb_data(0x47); //设置频率
563 1 }
564 /******************************************************************************/
565
566 /***************************初始化USB***************************************************/
567 void init_usb(void)
568 {
569 1 #ifdef debug
Prints("USBD12芯片初始化\r\n");
#endif
572 1 set_usb_addr(0);
573 1 set_endpoint_enable();
574 1 }
575 /******************************************************************************/
576
577 /****************************USB总线复位处理***********************************/
578 void usb_bus_reset(void)
579 {
580 1 #ifdef debug
Prints("USB总线复位.\r\n");
#endif
583 1 usb_flags.Register=0;
584 1 set_endpoint_enable();
585 1 }
586 /******************************************************************************/
587
588 /*****************************USB总线挂起处理**********************************/
589 void usb_bus_suspend(void)
590 {
591 1 #ifdef debug
Prints("USB总线挂起.\r\n");
#endif
594 1 }
595 /******************************************************************************/
596
597 /***************************设置地址***************************************/
598 void set_usb_address(void)
599 {
600 1 usb_flags.flags.set_addr=1;
601 1 set_usb_addr(Control_Data.DeviceRequest.wValue);
602 1 while(select_endpoint(1)&0x01);
603 1 write_endpoint_buff(1,0,0);
604 1 while(select_endpoint(1)&0x01);
605 1 usb_flags.flags.usb_endp0_in=0;
606 1 usb_flags.flags.setup_packet_out=0;
607 1 }
608 /******************************************************************************/
609
610 /**************************获取状态响应*****************************************/
611 void get_status(uint8 receiver)
612 {
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 11
613 1 uint8 status[2];
614 1 switch (receiver)
615 1 {
616 2 case 0: //获取设备状态
617 2 status[0]=0x00;
618 2 status[1]=0x00;
619 2 break;
620 2 case 1: //获取接口状态
621 2 status[0]=0x00;
622 2 status[0]=0x00;
623 2 break;
624 2 case 2: //获取端点状态
625 2 status[0]=0x00;
626 2 status[1]=0x00;
627 2 break;
628 2 }
629 1 write_endpoint_buff(1,2,status);
630 1 usb_flags.flags.usb_endp0_in=0;
631 1 }
632 /******************************************************************************/
633
634 /*********************清除特性*******************************************/
635 void clear_feature(uint8 receiver)
636 {
637 1 #ifdef debug
Prints(" 清除特性.\r\n");
#endif
640 1 receiver=0;
641 1 write_endpoint_buff(1,0,0);
642 1 usb_flags.flags.usb_endp0_in=0;
643 1 usb_flags.flags.setup_packet_out=0;
644 1 }
645 /******************************************************************************/
646
647 /*******************设置特性**************************************************/
648 void set_feature(uint8 receiver)
649 {
650 1 #ifdef debug
Prints(" 设置特性.\r\n");
#endif
653 1 receiver=0;
654 1 write_endpoint_buff(1,0,0);
655 1 usb_flags.flags.usb_endp0_in=0;
656 1 usb_flags.flags.setup_packet_out=0;
657 1 }
658 /******************************************************************************/
659
660 /*****************************设置描述*****************************************/
661 void set_descriptor(void)
662 {
663 1 #ifdef debug
Prints(" 设置描述符.\r\n");
#endif
666 1 usb_flags.flags.usb_endp0_in=0;
667 1 usb_flags.flags.setup_packet_out=0;
668 1 }
669 /******************************************************************************/
670
671 /***************************设置配置*******************************************/
672 void set_configuration(void)
673 {
674 1 #ifdef debug
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 12
Prints(" 设置配置.\r\n");
#endif
677 1 write_endpoint_buff(1,0,0);
678 1 usb_flags.flags.usb_endp0_in=0;
679 1 usb_flags.flags.setup_packet_out=0;
680 1 }
681 /******************************************************************************/
682
683 /************************获取配置状态******************************************/
684 void get_configuration(void)
685 {
686 1 uint8 value=0x01;
687 1 #ifdef debug
Prints(" 获取配置.\r\n");
#endif
690 1 write_endpoint_buff(1,1,&value);
691 1 usb_flags.flags.usb_endp0_in=0;
692 1 }
693 /******************************************************************************/
694
695 /****************************设置接口************************************/
696 void set_interface(void)
697 {
698 1 #ifdef debug
Prints(" 设置接口.\r\n");
#endif
701 1 write_endpoint_buff(1,0,0);
702 1 usb_flags.flags.usb_endp0_in=0;
703 1 usb_flags.flags.setup_packet_out=0;
704 1 }
705 /******************************************************************************/
706
707 /***************************获取接口状态***************************************/
708 void get_interface(void)
709 {
710 1 uint8 value=0x01;
711 1 #ifdef debug
Prints(" 获取接口.\r\n");
#endif
714 1 write_endpoint_buff(1,1,&value);
715 1 usb_flags.flags.usb_endp0_in=0;
716 1 }
717 /******************************************************************************/
718
719 /***********************获取描述符*********************************************/
720 void get_descriptor(void)
721 {
722 1 #ifdef debug
Prints(" 获取描述符.\r\n");
#endif
725 1 if(!usb_flags.flags.not_end)
726 1 {
727 2 switch(MSB(Control_Data.DeviceRequest.wValue))
728 2 {
729 3 case DEVICE_DESCRIPTOR:
730 3 #ifdef debug
Prints(" 获取设备描述符.\r\n");
#endif
733 3 Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
734 3 Control_Data.pData=(uint8 *)(&device_descriptor);
735 3 break;
736 3 case CONFIGURATION_DESCRIPTOR:
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 13
737 3 #ifdef debug
Prints(" 获取配置描述符.\r\n");
#endif
740 3 Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
741 3 Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
742 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
743 3 break;
744 3 case STRING_DESCRIPTOR:
745 3 #ifdef debug
Prints(" 获取字符串描述符.\r\n");
#endif
748 3 switch(LSB(Control_Data.DeviceRequest.wValue))
749 3 {
750 4 case 0:
751 4 #ifdef debug
Prints(" 获取语言ID.\r\n");
#endif
754 4 Control_Data.wCount=LANGUAGE_ID[0];
755 4 Control_Data.pData=LANGUAGE_ID;
756 4 break;
757 4
758 4 case 1:
759 4 #ifdef debug
Prints(" 获取厂商字符串.\r\n");
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -