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

📄 host_811.lst

📁 sl811 c8051F驱动程序 保证绝对可以使用 USB通信协议USB1.1
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   HOST_811                                                              04/25/2009 23:03:20 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE HOST_811
OBJECT MODULE PLACED IN HOST_811.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HOST_811.C LARGE OMF2 BROWSE DEBUG

line level    source

   1          //////////////////////////////////////////////////////////////////////////////
   2          //author:dragon;www.8dragon.com
   3          //2004年完成于桃龙源
   4          //
   5          //////////////////////////////////////////////////////////////////////////
   6          #include <stdio.h>
   7          #include <c8051F020.h>
   8          #include "host_811.h"
   9          #include "MAIN.H"
  10          xdata BYTE SL811H_ADDR    _at_  0x4000;         //A0=0
  11          xdata BYTE SL811H_DATA  _at_    0x4001;         //A0=1
  12          //////////////////////////////////////////////////////////////////////////
  13          BYTE   xdata bBUF[256];                 // at 0x2000 for general descriptors data
  14          USBDEV idata uDev;              // Multiple USB devices attributes, Max 5 devices
  15          //////////////////////////////////////////////////////////////////////////
  16          Control bdata USB_Control;  //全局命令控制变量
  17          BYTE  bData1;                           //乒乓操作标志
  18          BYTE  d1,d2;
  19          //*****************************************************************************************
  20          // Byte Read from SL811H
  21          // a = register address
  22          // return = data in register
  23          //*****************************************************************************************
  24          BYTE SL811Read(BYTE idata a)
  25          {  
  26   1              SL811H_ADDR = a;                        
  27   1              return (SL811H_DATA);
  28   1      }
  29          //*****************************************************************************************
  30          // Byte Write to SL811H
  31          // a = register address
  32          // d = data to be written to this register address
  33          //*****************************************************************************************
  34          void SL811Write(BYTE idata a, BYTE idata d)
  35          {  
  36   1              SL811H_ADDR = a;        
  37   1              SL811H_DATA = d;
  38   1      }
  39          //*****************************************************************************************
  40          // Buffer Read from SL811H
  41          // addr = buffer start address
  42          // s    = return buffer address where data are to be save/read
  43          // c    = buffer data length
  44          //*****************************************************************************************
  45          void SL811BufRead(BYTE addr, BYTE *s, BYTE c)
  46          {       
  47   1              BYTE idata i;
  48   1              ////////////////////////////////////////////////////////////////////////
  49   1              i=c;
  50   1              SL811H_ADDR = addr;     
  51   1              while (i--) 
  52   1                      *s++ = SL811H_DATA;
  53   1      }
  54          
  55          //*****************************************************************************************
C51 COMPILER V8.08   HOST_811                                                              04/25/2009 23:03:20 PAGE 2   

  56          // Buffer Write  to SL811H
  57          // addr = buffer start address
  58          // s    = buffer address where data are to be written
  59          // c    = buffer data length
  60          //*****************************************************************************************
  61          void SL811BufWrite(BYTE addr, BYTE *s, BYTE c)
  62          {       
  63   1              SL811H_ADDR = addr;     
  64   1              while (c--) 
  65   1                      SL811H_DATA = *s++;
  66   1      }
  67          void DelayMs(BYTE nFactor)
  68          {
  69   1              BYTE i;
  70   1              BYTE j;
  71   1              
  72   1              for(i=0; i<nFactor; i++)
  73   1                      {
  74   2                      Clr_WDT();
  75   2                      for(j=0;j<240;j++)
  76   2                             j=j;
  77   2                      }
  78   1      }
  79          
  80          WORD WordSwap(WORD input)
  81          {
  82   1              return(((input&0x00FF)<<8)|((input&0xFF00)>>8));
  83   1      }
  84          DWORD DWordSwap(DWORD dData)
  85          {
  86   1          dData = (dData&0xff)<<24|(dData&0xff00)<<8|(dData&0xff000000)>>24|(dData&0xff0000)>>8;
  87   1              return dData;
  88   1      }
  89          
  90          void USBReset()
  91          {
  92   1              BYTE temp;
  93   1              BYTE i; 
  94   1              ////////////////////////////////////////////////////////////////////////
  95   1      /*      SL811Write(cSOFcnt,0xae);
  96   1              SL811Write(CtrlReg,0x48);
  97   1              DelayMs(10);
  98   1              SL811Write(CtrlReg,0x00);
  99   1              DelayMs(10);*/
 100   1              i=SL811Read(IntStatus);
 101   1              if(i&0x80)      
 102   1              {       
 103   2                      SL811Write(cDATASet,0xe0);
 104   2                      SL811Write(cSOFcnt,0xae);
 105   2                      SL811Write(CtrlReg,0x05);
 106   2                      //SL811Write(0x00, 0x01);     //Arm Transfers
 107   2              }       
 108   1              SL811Write(EP0Status,0x50);
 109   1              SL811Write(EP0Counter,0x00);
 110   1          SL811Write(EP0Control,0x01);
 111   1          DelayMs(150);  
 112   1          temp=SL811Read(CtrlReg);   
 113   1              SL811Write(CtrlReg,temp|0x08);
 114   1              DelayMs(15);            
 115   1              SL811Write(CtrlReg,temp | 0x18); 
 116   1              DelayMs(15);//Delay(200);       
 117   1              SL811Write(CtrlReg,temp | 0x08); 
C51 COMPILER V8.08   HOST_811                                                              04/25/2009 23:03:20 PAGE 3   

 118   1              DelayMs(15);//Delay(200);
 119   1          SL811Write(CtrlReg,temp);
 120   1          DelayMs(150);
 121   1              //DelayMs(400);//Delay(2000);    
 122   1      }
 123          
 124          
 125          
 126          //*****************************************************************************************
 127          // usbXfer:
 128          // successful transfer = return TRUE
 129          // fail transfer = return FALSE
 130          //*****************************************************************************************
 131          unsigned  char  usbXfer(BYTE usbaddr, BYTE endpoint, BYTE pid,WORD wPayload, WORD wLen, BYTE *buffer)
 132          {                                                                                                                    
             -                                                      
 133   1              BYTE    cmd, result, timeout, intr;
 134   1          BYTE        xferLen, bufLen, data0, data1, dataX, addr,remainder;   
 135   1          ////////////////////////////////////////////////////////////////////////
 136   1              //------------------------------------------------
 137   1              // Default setting for usb trasnfer
 138   1              //------------------------------------------------
 139   1                      //result          = SL811Read(EP0Status);
 140   1                      //printf("result=%x\n\r",result);
 141   1              bufLen = dataX = timeout = 0;                                   //reset all
 142   1              data0 = EP0_Buf;                                                                // DATA0 buffer address
 143   1              data1 = data0 + (BYTE)wPayload;                                 // DATA1 buffer address
 144   1              USB_Control.DATA_STOP = USB_Control.TIMEOUT_ERR = FALSE;                                // set default conditions
 145   1              //------------------------------------------------
 146   1              // Define data transfer payload
 147   1              //------------------------------------------------
 148   1              if (wLen >= wPayload)                                                   // select proper data payload
 149   1                      xferLen = wPayload;                                                     // limit to wPayload size 
 150   1              else                                                                                    // else take < payload len
 151   1                      xferLen = wLen;                                                         //一次传输的数据长度;  
 152   1      
 153   1              //------------------------------------------------
 154   1              // For IN token
 155   1              //------------------------------------------------
 156   1              if (pid==PID_IN)                                                                // for current IN tokens
 157   1              {
 158   2                      cmd=sDATA0_RD;
 159   2              }
 160   1              //------------------------------------------------
 161   1              // For OUT token
 162   1              //------------------------------------------------
 163   1              else if(pid==PID_OUT)                                                   // for OUT tokens
 164   1              {       
 165   2                      if(xferLen)                                                                     // only when there are  
 166   2                              SL811BufWrite(data0,buffer,xferLen);    // data to transfer on USB
 167   2                      cmd=sDATA0_WR;
 168   2                      bData1 = uDev.bData1[endpoint];
 169   2              uDev.bData1[endpoint] = (uDev.bData1[endpoint] ? 0 : 1); // DataToggle
 170   2                      if(bData1)
 171   2                              cmd |= 0x40;                             // Set Data1 bit in command
 172   2              }
 173   1              //------------------------------------------------
 174   1              // For SETUP/OUT token
 175   1              //------------------------------------------------

⌨️ 快捷键说明

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