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

📄 chap_9.lst

📁 该代码是基于菲利普ISP1581USB接口芯片与STC89C51单片机的USB2.0开发代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN chap_9.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE chap_9.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************Copyright (c)**************************************************
   2          
   3          ** 文   件   名: Chap_9.c
   4          ** 最后修改日期: 2006年10月19日
   5          ** 描        述: USB驱动程序软件包: D14 设备端驱动程序 协议层
   6          ** 版        本: V1.0
   7          **********************************************************************************************************
             -/
   8          
   9          
  10          #include "standard.h"
  11          #include "Kernel.h"
  12          #include "D14.h"
  13          #include "usb.h"
  14          
  15          //外部函数
  16          
  17          extern volatile D14_CNTRL_REG xdata D14_Cntrl_Reg;
  18          extern void Init_D14(void);
  19          extern UC code Standard_Device_Descriptor[];
  20          extern UC code Bulk_Interface_Descriptor[];
  21          extern UC code Iso_Interface_Descriptor[];
  22          extern UC code Standard_Config_Descriptor[];
  23          extern UC code Standard_Manufacturer_String[];
  24          extern UC code Standard_Product_String[];
  25          extern UC code Standard_String_ID[];
  26          extern UC code Bulk_In_Descriptor[];
  27          extern UC code Bulk_Out_Descriptor[];
  28          extern UC code Int_In_Descriptor[];
  29          extern UC code Int_Out_Descriptor[];
  30          extern UC code Iso_In_Descriptor[];
  31          extern UC code Iso_Out_Descriptor[];
  32          extern UC code Iso_In_Zero_Descriptor[];
  33          extern UC code Iso_Out_Zero_Descriptor[];
  34          extern UC code HS_Device_Descriptor[];
  35          extern UC code HS_Device_Qualifier[];
  36          extern UC code HS_Bulk_Interface_Descriptor[];
  37          extern UC code HS_Bulk_In_Descriptor[];
  38          extern UC code HS_Bulk_Out_Descriptor[];
  39          extern UC code HS_Int_In_Descriptor[];
  40          extern UC code HS_Int_Out_Descriptor[];
  41          extern UC code Other_Speed_Config_Descriptor[];
  42          extern UI count;
  43          extern void Start_mSEC_Timer(Data);
  44          extern void Start_SEC_Timer(Data);
  45          extern void Check_Busy(void);
  46          extern void TaskFile_Update(void);
  47          extern UI Temp;
  48          extern UC Device_Config_Value;
  49          extern KERNEL Kernel_Flag;
  50          extern DMA_INT_FLAG DMA_Int_Flag;
  51          extern USB_INT_FLAG USB_Int_Flag;
  52          extern USBCBW USB_CBW;
  53          extern void Init_Device(void);
  54          extern UC code Test_Packet[];
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 2   

  55          extern void Init_Endpoint(void);
  56          extern void Init_Device(void);
  57          extern void Set_USB(void);
  58          
  59          
  60          //内部函数
  61          
  62          void USB_Setup(void);
  63          void reserved(void);
  64          void Send_Device_Status(void);
  65          void Send_Interface_Status(void);
  66          void Send_Endpoint_Status(void);
  67          
  68          void Vendor_Specific_Command(void);
  69          void Send_Status(unsigned char tran_status);
  70          
  71          void Set_Interface_Value(void);
  72          void Get_Interface_Value(void);
  73          void Process_Synch_Frame(void);
  74          
  75          void get_status(void);
  76          void clear_feature(void);
  77          void set_feature(void);
  78          void set_address(void);
  79          void get_descriptor(void);
  80          void get_config(void);
  81          void set_config(void);
  82          void get_interface(void);
  83          void set_interface(void);
  84          
  85          void Set_Descriptor(void);
  86          void reserved(void);
  87          
  88          void ep0in_ack(void);
  89          void ep0out_ack(void);
  90          void wait_ep0tx(void);
  91          void wait_ep0rx(void);
  92          unsigned int read_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
  93          unsigned int write_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
  94          
  95          
  96          //变量定义
  97          
  98          USB_INT_FLAG  USB_Int_Flag;
  99          USB_DEVICE_REQ  idata   USB_Device_Request;
 100          USB_DEVICE              USB_Device;
 101          
 102          UC      code    *Descriptor_Ptr;
 103          
 104          
 105          UI      FIFO_Count;
 106          UC VID[2],PID[2];
 107          FILESIZE FileSize;
 108          UI PIO_Count;
 109          UC      File_Number;
 110          UC      Current_File;
 111          ULI bytecount;
 112          
 113          //USB标准请求
 114          code void (*StandardDeviceRequest[])(void) =
 115          {
 116                  get_status,
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 3   

 117                  clear_feature,
 118                  reserved,
 119                  set_feature,
 120                  reserved,
 121                  set_address,
 122                  get_descriptor,
 123                  reserved,
 124                  get_config,
 125                  set_config,
 126                  get_interface,
 127                  set_interface,
 128                  reserved,
 129                  reserved,
 130                  reserved,
 131                  reserved
 132          };
 133          
 134          /////////////////////
 135          
 136          
 137          
 138          //USB事件处理函数
 139          void USBserve(void)
 140          {
 141   1              //端点0接收到setup包处理      
 142   1              if(USB_Int_Flag.BITS.EP0SETUP)
 143   1              {
 144   2                      EA_DISABLE;
 145   2                      USB_Setup();
 146   2                      EA_ENABLE;
 147   2              }
 148   1              
 149   1              //挂起处理
 150   1              if(USB_Int_Flag.BITS.SUSP)
 151   1              {               
 152   2                      //清除挂起标志
 153   2                      EA_DISABLE;
 154   2                      USB_Int_Flag.BITS.SUSP = 0;
 155   2                      EA_ENABLE;
 156   2                      //ISP1581进入挂起状态           
 157   2                      D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 1;
 158   2                      D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 0;
 159   2              }
 160   1              
 161   1              //挂起恢复处理
 162   1              if(USB_Int_Flag.BITS.RESUME)
 163   1              {
 164   2                      //清除恢复标志
 165   2                      EA_DISABLE;
 166   2                      USB_Int_Flag.BITS.RESUME = 0;         
 167   2                      EA_ENABLE;
 168   2                      //产生一个恢复信号
 169   2                      D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 1;
 170   2                      D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 0;
 171   2              }
 172   1              
 173   1              //高速状态
 174   1              if(USB_Int_Flag.BITS.HS_STAT)
 175   1              {
 176   2                      //清除高速状态标志
 177   2                      EA_DISABLE;
 178   2                      USB_Int_Flag.BITS.HS_STAT = 0;
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 4   

 179   2                      EA_ENABLE;
 180   2                      if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
 181   2                      {
 182   3                              //切换高速指示
 183   3                              HS_FS_LED = HIGH_SPEED_LED;
 184   3                              //设置高速模式状态
 185   3                              Kernel_Flag.BITS.HS_FS_State = HIGH_SPEED;
 186   3                              //重新配置高速端点
 187   3                              Init_Endpoint();
 188   3      
 189   3                              PIO_Count = 512;
 190   3                      }
 191   2              }
 192   1      }
 193          
 194          
 195          
 196          //建立包处理
 197          void USB_Setup(void)
 198          {
 199   1              unsigned char type, req;
 200   1      
 201   1              //清除EP0SETUP中断标志
 202   1              USB_Int_Flag.BITS.EP0SETUP = 0;   
 203   1              //清除总线复位标志
 204   1              Kernel_Flag.BITS.Bus_Reset = 0;
 205   1              //选择端点0SETUP缓冲区
 206   1              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0x20;
 207   1              
 208   1              //读取USB请求
 209   1              //读取请求类型
 210   1              USB_Device_Request.bmRequestType =  D14_Cntrl_Reg.D14_DATA_PORT_LSB;

⌨️ 快捷键说明

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