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

📄 fusb200.lst

📁 faraday_USB芯片的固件
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   FUSB200                                                               11/21/2008 15:02:59 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FUSB200
OBJECT MODULE PLACED IN FUSB200.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE FUSB200.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "FUSB200.h"
   2          #include "type.h"
   3          #include "reg51.h"
   4          #include "absacc.h"
   5          #include <stdio.h>
   6          #include <string.h>
   7          
   8          //for testing TX data
   9          //const char code tdata[] = {0x55,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x
             -55};
  10          
  11          struct  dev_req_s dev_req;
  12          
  13          //Initialize M8051EW
  14          void init_m8051ew()
  15          {
  16   1              //Enable global interrupt
  17   1              EA = 1;
  18   1              //Enable external interrput0
  19   1              EX0 = 1;
  20   1              //Edge 
  21   1              IT0 = 1;
  22   1      //      //Interrput priority
  23   1      //      PX0 = 1;
  24   1      }
  25          
  26          //Initialize USB controller
  27          void init_fusb()
  28          {
  29   1              //int gTest = 0;
  30   1              //int a,b,c;
  31   1              //gTest = XBYTE[FUSB_REG_MAIN_CTL];
  32   1              
  33   1      /* Initialize control register */
  34   1              //Turn on D+/D- & Turn off UNPLUG
  35   1              XBYTE[FUSB_REG_PHY_TMS] = 0x00; 
  36   1              //Test mode--Loop Back Test of CX
  37   1              //XBYTE[FUSB_REG_TEST_EP] = 0x02;
  38   1              //set CHIP_EN/SFRST/Global Interrupt
  39   1              XBYTE[FUSB_REG_MAIN_CTL] = 0x34;
  40   1              //Turn off SFRST
  41   1              XBYTE[FUSB_REG_MAIN_CTL] = 0x24;
  42   1              //Unmask group interruput(MINT_SCR0~MINT_SCR7)
  43   1              XBYTE[FUSB_REG_INT_MGRP] = 0x00;
  44   1              //Unmask CX interruput                      
  45   1              XBYTE[FUSB_REG_INT_MSKB0] = 0x00;
  46   1              //set suspend delay = 5ms
  47   1              XBYTE[FUSB_REG_IDLE_CNT] |= 0x05;
  48   1      }
  49          
  50          //Initialize interrupt
  51          void init_interrupt()
  52          {
  53   1              /* Initialize FIFO register */
  54   1              XBYTE[FUSB_REG_EP1_MAP]         = 0xf0; //EP1 IN map to FIFO0
C51 COMPILER V7.50   FUSB200                                                               11/21/2008 15:02:59 PAGE 2   

  55   1              XBYTE[FUSB_REG_EP2_MAP]         = 0x6f; //EP2 OUT map to FIFO6
  56   1              XBYTE[FUSB_REG_FIFO0_MAP]   = 0x11;     //FIFO0 map to EP1 IN
  57   1              XBYTE[FUSB_REG_FIFO6_MAP]   = 0x02;     //FIFO6 map to EP2 OUT
  58   1              XBYTE[FUSB_REG_IEP1_XPSZ_L] = 0x00;     //EP1 IN Max Packet Size (L)
  59   1              XBYTE[FUSB_REG_IEP1_XPSZ_H] = 0x64;     //EP1 IN Max Packet Size (H) = 1024 TX_NUM_HBW = 3
  60   1              XBYTE[FUSB_REG_OEP2_XPSZ_L] = 0x00;     //EP2 OUT Max Packet Size(L)
  61   1              XBYTE[FUSB_REG_OEP2_XPSZ_H] = 0x04;     //EP2 OUT Max Packet Size(H) = 1024
  62   1              XBYTE[FUSB_REG_FIFO0_CFG]       = 0x9a; //Set FIFO0 Size <= 1024, Triple buffer, bulk type
  63   1              //revision
  64   1              XBYTE[FUSB_REG_FIFO2_CFG]       = 0x1a; //Set FIFO2 Size <= 1024, Triple buffer, bulk type
  65   1              XBYTE[FUSB_REG_FIFO4_CFG]       = 0x1a; //Set FIFO4 Size <= 1024, Triple buffer, bulk type
  66   1              
  67   1              XBYTE[FUSB_REG_FIFO6_CFG]       = 0x82; //Set FIFO6 Size <= 1024, Single buffer, bulk type
  68   1              XBYTE[FUSB_REG_INT_MSKB0]  |= 0x40; //FW read masked status of interrupt
  69   1      }
  70          //Delay function 30us
  71          void delay(void)
  72          {
  73   1              u8 i = 0;
  74   1      
  75   1              for (i=0;i<0x7f;i++)
  76   1              {
  77   2                      //for(i=0;i<0x7fff;i++)
  78   2                      //{
  79   2                              ;
  80   2                      //}
  81   2              }
  82   1              return;
  83   1      }
  84          
  85          //EndPoint0 interrupt service
  86          void ep0_int_service(void)
  87          {
  88   1              if(XBYTE[FUSB_REG_INT_SOURCE0] & FUSB_INT_SOURCE0_CX_SETUP_INT)
  89   1              {
  90   2                      //u8 dev_configuration;
  91   2                      u8 meg[8];
  92   2                      //Clear CX_COM_INT
  93   2                      XBYTE[FUSB_REG_INT_SOURCE0] &= 0x7f;
  94   2                              
  95   2                      //Device request, read EndPoint0 FIFO 8bit each time
  96   2                      meg[0] = XBYTE[FUSB_REG_EP0_DATA];
  97   2                      meg[1] = XBYTE[FUSB_REG_EP0_DATA];
  98   2                      meg[2] = XBYTE[FUSB_REG_EP0_DATA];
  99   2                      meg[3] = XBYTE[FUSB_REG_EP0_DATA];
 100   2                      meg[4] = XBYTE[FUSB_REG_EP0_DATA];
 101   2                      meg[5] = XBYTE[FUSB_REG_EP0_DATA];
 102   2                      meg[6] = XBYTE[FUSB_REG_EP0_DATA];
 103   2                      meg[7] = XBYTE[FUSB_REG_EP0_DATA];
 104   2                      
 105   2                      //Get descriptor value to struct        
 106   2                      dev_req.bmRequestType = meg[0];
 107   2                      dev_req.bRequest = meg[1];
 108   2                      dev_req.wValue = BYTE_TO_WORD(meg[3],meg[2]);
 109   2                      dev_req.wIndex = BYTE_TO_WORD(meg[5],meg[4]);
 110   2                      dev_req.wLength = BYTE_TO_WORD(meg[7],meg[6]);
 111   2              
 112   2                      //GetDescriptor request
 113   2                      if(dev_req.bmRequestType == 0x80 && dev_req.bRequest == 0x06)
 114   2                      {
 115   3                              if(dev_req.wValue == 0x0100)//Type--device descriptor
 116   3                              {
C51 COMPILER V7.50   FUSB200                                                               11/21/2008 15:02:59 PAGE 3   

 117   4                                      //Clear EndPoint0 FIFO
 118   4                                       XBYTE[FUSB_REG_CX_CSR] |= 0x08;
 119   4                                      //Check EndPoint0 FIFO empty
 120   4                                      if(XBYTE[FUSB_REG_CX_CSR] & 0x20)
 121   4                                      {
 122   5                                              //Device descriptor for host
 123   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x12;//DeviceDscr.bLength;
 124   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x01;//DeviceDscr.bDescriptorType;
 125   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_LOW(DeviceDscr.bcdUSB);
 126   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x02;//GET_HIGH(DeviceDscr.bcdUSB);
 127   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.bDeviceClass; /*Means config the class in interface desc
             -ription*/
 128   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.bDeviceSubClass;
 129   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.bDeviceProtocol;
 130   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x40;//DeviceDscr.bMaxPacketSize0;
 131   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x51;//GET_LOW(DeviceDscr.idVendor);/*Apply on www.usb.org*/
 132   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x19;//GET_HIGH(DeviceDscr.idVendor);
 133   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x03;//GET_LOW(DeviceDscr.idProduct);/*Defined by user*/
 134   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x16;//GET_HIGH(DeviceDscr.idProduct);
 135   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_LOW(DeviceDscr.bcdDevice);/**/
 136   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x02;//GET_HIGH(DeviceDscr.bcdDevice);
 137   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.iManufacturer;
 138   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.iSerialNumber;
 139   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x00;//DeviceDscr.serialnum_str;
 140   5                                              XBYTE[FUSB_REG_EP0_DATA] = 0x01;//DeviceDscr.bNumberConfigurations;
 141   5                                              //CX writen done
 142   5                                              XBYTE[FUSB_REG_CX_CSR] |= 0x01;
 143   5                                      }
 144   4                              }
 145   3                              else if(dev_req.wValue == 0x0200)//Type--configuration descriptor
 146   3                              {
 147   4                                      if(dev_req.wLength == 0x0009)
 148   4                                      {
 149   5                                              //Clear EndPoint0 FIFO
 150   5                                              XBYTE[FUSB_REG_CX_CSR] |= 0x08;
 151   5                                              //Check EndPoint0 FIFO empty
 152   5                                              if(XBYTE[FUSB_REG_CX_CSR] & 0x20)
 153   5                                              {
 154   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x09;//ConfigurationDscr.bLength;
 155   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x02;//ConfigurationDscr.bDescriptorType;
 156   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x20;//GET_LOW(ConfigurationDscr.wTotalLength);
 157   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_HIGH(ConfigurationDscr.wTotalLength);
 158   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x01;//ConfigurationDscr.bNumInterfaces;
 159   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x01;//ConfigurationDscr.bConfigurationValue;
 160   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//ConfigurationDscr.iConfiguration;
 161   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0xc0;//ConfigurationDscr.bmAttributes;
 162   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//ConfigurationDscr.bMaxpower;
 163   6                                                      
 164   6                                                      //CX writen done
 165   6                                              XBYTE[FUSB_REG_CX_CSR] |= 0x01;
 166   6                                              }
 167   5                                      }
 168   4                                      else
 169   4                                      {
 170   5                                              //Clear EndPoint0 FIFO
 171   5                                              XBYTE[FUSB_REG_CX_CSR] |= 0x08;
 172   5                                              //Check EndPoint0 FIFO empty
 173   5                                              if(XBYTE[FUSB_REG_CX_CSR] & 0x20)
 174   5                                              {
 175   6                                                      //Configuration description
 176   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x09;//ConfigurationDscr.bLength;
 177   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x02;//ConfigurationDscr.bDescriptorType;
C51 COMPILER V7.50   FUSB200                                                               11/21/2008 15:02:59 PAGE 4   

 178   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x20;//GET_LOW(ConfigurationDscr.wTotalLength);
 179   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_HIGH(ConfigurationDscr.wTotalLength);
 180   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x01;//ConfigurationDscr.bNumInterfaces;
 181   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x01;//ConfigurationDscr.bConfigurationValue;
 182   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//ConfigurationDscr.iConfiguration;
 183   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0xc0;//ConfigurationDscr.bmAttributes;
 184   6                                                      XBYTE[FUSB_REG_EP0_DATA] = 0x00;//ConfigurationDscr.bMaxpower;

⌨️ 快捷键说明

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