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

📄 epsetup.lst

📁 我改了一部分别人的USB,原来的不方便看逻辑
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   EPSETUP                                                               09/11/2008 22:15:07 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE EPSETUP
OBJECT MODULE PLACED IN epsetup.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE epsetup.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"mytype.h"
   2          #include "d12_command.h"
   3          #include"d12_value.h"
   4          #include"port.h"
   5          #include"epmain.h"
   6          #include"uar.h"
   7          extern USB_FLAGS usb_flags;
   8          extern INT_REG Interrupt_Register;
   9          extern LAST_STATUS Last_Status;
  10          extern CONTROL_DATA_BUFF Control_Data;
  11          /************************终端点0输出中断处理************************************/
  12          void endp0_out(void)
  13          {uint16 i;
  14   1       Prints("ep0_out\r\0");
  15   1       Last_Status.value=read_last_status(0);
  16   1       
  17   1       if(Last_Status.Status.setup_packet)
  18   1        {
  19   2           Control_Data.wLength=0;
  20   2           Control_Data.wCount=0;
  21   2            if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))
             -!=sizeof(REQUESTCMD))
  22   2                 {
  23   3                    set_endpoint_status(0,0);
  24   3                    set_endpoint_status(1,0);
  25   3                usb_flags.Status.control_state = USB_IDLE;
  26   3                    return;
  27   3                  }
  28   2           Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
  29   2           Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
  30   2           Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
  31   2      
  32   2           ack_setup(0);
  33   2           ack_setup(1);
  34   2                select_endpoint(0);
  35   2            clear_buffer(); 
  36   2           usb_flags.Status.setup_packet=1;
  37   2           Control_Data.wLength=Control_Data.DeviceRequest.wLength;
  38   2           if(Control_Data.DeviceRequest.bmRequestType&0x80)
  39   2                {
  40   3                 usb_flags.Status.control_state=USB_TRANSMIT;
  41   3                }
  42   2           else 
  43   2                { 
  44   3                  usb_flags.Status.control_state=USB_RECEIVE;
  45   3                        }// set command with data
  46   2                       // else set command
  47   2              }// if setup packet
  48   1              // 接收内容
  49   1      
  50   1      else if(usb_flags.Status.control_state==USB_RECEIVE) //正常的0端点写数据
  51   1                  {
  52   2                     i = read_endpoint_buff(0, EP0_PACKET_SIZE,Control_Data.dataBuffer + Control_Data.wCount);  
             -//从端点0接收数据
  53   2                                 Control_Data.wCount +=i ;                                                              //统计已接收的字节数
C51 COMPILER V7.20   EPSETUP                                                               09/11/2008 22:15:07 PAGE 2   

  54   2                             if( i != EP0_PACKET_SIZE || Control_Data.wCount >= Control_Data.wLength)
  55   2                                {                                                                             //数据接收完毕
  56   3                                                                                        //通知control_handler()处理Setup包                              
  57   3                                       usb_flags.Status.control_state = USB_IDLE;               //设置为等待状态
  58   3                         } 
  59   2                              }
  60   1           else
  61   1              usb_flags.Status.control_state = USB_IDLE; 
  62   1      } 
  63          /******************************************************************************/
  64          
  65          /****************************终端点0输入处理**************************************/
  66          void endp0_in( void)
  67          { 
  68   1        uint16  i = Control_Data.wLength - Control_Data.wCount;       //计算未发送的字节数
  69   1        read_last_status(1);  //清除中断寄存器标志位  
  70   1        Prints("ep0_in\r  \0");       
  71   1              if (usb_flags.Status.control_state != USB_TRANSMIT)
  72   1                 {    //非发送状态                                                                                            
  73   2              write_endpoint_buff(1,0,0);     
  74   2                       Prints("   ep0_in错误返回\r\0");               
  75   2                      return;                                                                                 //返回
  76   2              }       
  77   1                if (Control_Data.wLength==0)
  78   1                 {                                                  //非发送状态                                                                                              
  79   2              write_endpoint_buff(1,0,0);     
  80   2                      Prints("   ep0_in0长度写返回\r\0");             
  81   2                      return;                                                                                 //返回
  82   2              }
  83   1              if( i >= EP0_PACKET_SIZE) 
  84   1                  {                                                   //未发送字节数大于16,发送16个字节
  85   2                      write_endpoint_buff(1, EP0_PACKET_SIZE, Control_Data.pData + Control_Data.wCount);
  86   2                      Control_Data.wCount += EP0_PACKET_SIZE;
  87   2                      usb_flags.Status.not_end=1;
  88   2              usb_flags.Status.control_state = USB_TRANSMIT;  
  89   2               Prints("  没有写完 \r\0");
  90   2                  }
  91   1              else if( i != 0) {                                                                      //发送所有未发送的字节
  92   2                      write_endpoint_buff(1, i, Control_Data.pData + Control_Data.wCount);
  93   2                      Control_Data.wCount += i;
  94   2                      usb_flags.Status.control_state = USB_IDLE;              //置状态为等待状态
  95   2                      usb_flags.Status.not_end=0;
  96   2                               Prints("   写完 \r\0");
  97   2              }
  98   1              else if (i == 0){
  99   2                      write_endpoint_buff(1, 0, 0);                                   //发送完毕,发0个字节
 100   2                      usb_flags.Status.control_state = USB_IDLE; 
 101   2                      usb_flags.Status.not_end=0;
 102   2                      Prints("        写空白字 \r\0");
 103   2              }
 104   1      }
 105          /******************************************************************************/
 106          void call_c9(void)
 107          {Prints("进入第九章\r\0");
 108   1      //如果是输入请求包
 109   1      if(usb_flags.Status.control_state==USB_TRANSMIT)
 110   1        {Prints("     输入包\r\0");
 111   2          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 112   2               {
 113   3                 case 0x00:  //标准请求
 114   3              Prints("          输入标准请求\r\0");
 115   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
C51 COMPILER V7.20   EPSETUP                                                               09/11/2008 22:15:07 PAGE 3   

 116   3                  {
 117   4                       case 0: //到设备
 118   4                         switch (Control_Data.DeviceRequest.bRequest)
 119   4                          {
 120   5                           case 0: get_status(0);break;
 121   5                           case 6: get_descriptor();break;
 122   5                           case 8: get_configuration();break;
 123   5                               default:break;
 124   5                          }
 125   4                       break;
 126   4      
 127   4                       case 1:  //到接口
 128   4                         switch (Control_Data.DeviceRequest.bRequest)
 129   4                          {
 130   5                       case  0: get_status(1);break;
 131   5                                case 6: get_descriptor_interface();break;
 132   5                           case 10: get_interface();break;
 133   5                       default: break;
 134   5                              }
 135   4                       break;
 136   4      
 137   4                       case 2:  //到端点
 138   4                        {
 139   5                     if(Control_Data.DeviceRequest.bRequest==0)get_status(2);  
 140   5                        }
 141   4                       default: break;
 142   4                  }
 143   3                 break;
 144   3      
 145   3                 case 0x20:  //类请求
 146   3       
 147   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 148   3                  {
 149   4                       case 0:  //到设备
 150   4                         switch (Control_Data.DeviceRequest.bRequest)
 151   4                          {
 152   5                               default:break;
 153   5                          }
 154   4                       break;
 155   4      
 156   4                       case 1:  //到接口
 157   4                         switch (Control_Data.DeviceRequest.bRequest)
 158   4                          {
 159   5      
 160   5                               case     01: get_report();   break; //获取报告
 161   5                   case     02: get_idle();     break; //获取空闲状态
 162   5                   case     03: get_protocol(); break; //获取协议
 163   5                       default: break;
 164   5                              }
 165   4                       break;
 166   4      
 167   4                       case 2:  //到端点

⌨️ 快捷键说明

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