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

📄 vend_ax.lst

📁 CYPRESS USB CY7C68013A 命令传输的固件和上位机程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   VEND_AX                                                               06/04/2006 20:12:23 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE VEND_AX
OBJECT MODULE PLACED IN VEND_AX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE VEND_AX.C OPTIMIZE(6,SPEED) DEFINE(NO_RENUM) DEBUG OBJECTEXTEND

line level    source

   1          #pragma NOIV                                    // Do not generate interrupt vectors
   2          //-----------------------------------------------------------------------------
   3          //      File:           periph.c
   4          //      Contents:       Hooks required to implement USB peripheral function.
   5          //
   6          //      Copyright (c) 2000 Cypress Semiconductor All rights reserved
   7          //-----------------------------------------------------------------------------
   8          #include "fx2.h"
   9          #include "Fx2regs.h"
  10          
  11          extern BOOL     GotSUD;                 // Received setup data flag
  12          extern BOOL     Sleep;
  13          extern BOOL     Rwuen;
  14          extern BOOL     Selfpwr;
  15          
  16          BYTE    Configuration;          // Current configuration
  17          BYTE    AlternateSetting;       // Alternate settings
  18          
  19          //-----------------------------------------------------------------------------
  20          // Constants
  21          //-----------------------------------------------------------------------------
  22          #define VR_UPLOAD               0xc0
  23          #define VR_DOWNLOAD             0x40
  24          
  25          #define VR_ANCHOR_DLD   0xa0 // handled by core
  26          #define VR_EEPROM               0xa2 // loads (uploads) EEPROM
  27          #define VR_RAM                  0xa3 // loads (uploads) external ram
  28          #define VR_SETI2CADDR   0xa4
  29          #define VR_GETI2C_TYPE  0xa5 // 8 or 16 byte address
  30          #define VR_GET_CHIP_REV 0xa6 // Rev A, B = 0, Rev C = 2 // NOTE: New TNG Rev
  31          #define VR_TEST_MEM     0xa7 // runs mem test and returns result
  32          #define VR_RENUM            0xa8 // renum
  33          #define VR_DB_FX            0xa9 // Force use of double byte address EEPROM (for FX)
  34          #define VR_I2C_100    0xaa // put the i2c bus in 100Khz mode
  35          #define VR_I2C_400    0xab // put the i2c bus in 400Khz mode
  36          #define VR_NOSDPAUTO  0xac // test code. does uploads using SUDPTR with manual length override
  37          
  38          #define SERIAL_ADDR             0x50
  39          #define EP0BUFF_SIZE    0x40
  40          
  41          #define GET_CHIP_REV()          ((CPUCS >> 4) & 0x00FF) // EzUSB Chip Rev Field
  42          
  43          //-----------------------------------------------------------------------------
  44          // Global Variables
  45          //-----------------------------------------------------------------------------
  46          BYTE                    DB_Addr;                                        //TPM Dual Byte Address stat
  47          BYTE                    I2C_Addr;                                       //TPM I2C address
  48          
  49          //-----------------------------------------------------------------------------
  50          // Prototypes
  51          //-----------------------------------------------------------------------------
  52          void EEPROMWrite(WORD addr, BYTE length, BYTE xdata *buf); //TPM EEPROM Write
  53          void EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf);  //TPM EEPROM Read
  54          
  55          //-----------------------------------------------------------------------------
C51 COMPILER V7.50   VEND_AX                                                               06/04/2006 20:12:23 PAGE 2   

  56          // Task Dispatcher hooks
  57          //      The following hooks are called by the task dispatcher.
  58          //-----------------------------------------------------------------------------
  59          
  60          void TD_Init(void)                              // Called once at startup
  61          {
  62   1              Rwuen = TRUE;                           // Enable remote-wakeup
  63   1              EZUSB_InitI2C();                        // Initialize I2C Bus
  64   1      }
  65          
  66          void TD_Poll(void)                              // Called repeatedly while the device is idle
  67          {
  68   1      }
  69          
  70          BOOL TD_Suspend(void)                   // Called before the device goes into suspend mode
  71          {
  72   1              return(TRUE);
  73   1      }
  74          
  75          BOOL TD_Resume(void)                    // Called after the device resumes
  76          {
  77   1              return(TRUE);
  78   1      }
  79          
  80          //-----------------------------------------------------------------------------
  81          // Device Request hooks
  82          //      The following hooks are called by the end point 0 device request parser.
  83          //-----------------------------------------------------------------------------
  84          
  85          
  86          BOOL DR_GetDescriptor(void)
  87          {
  88   1         return(TRUE);
  89   1      }
  90          
  91          BOOL DR_SetConfiguration(void)   // Called when a Set Configuration command is received
  92          {
  93   1         Configuration = SETUPDAT[2];
  94   1         return(TRUE);            // Handled by user code
  95   1      }
  96          
  97          BOOL DR_GetConfiguration(void)   // Called when a Get Configuration command is received
  98          {
  99   1         EP0BUF[0] = Configuration;
 100   1         EP0BCH = 0;
 101   1         EP0BCL = 1;
 102   1         return(TRUE);            // Handled by user code
 103   1      }
 104          
 105          BOOL DR_SetInterface(void)       // Called when a Set Interface command is received
 106          {
 107   1         AlternateSetting = SETUPDAT[2];
 108   1         return(TRUE);            // Handled by user code
 109   1      }
 110          
 111          BOOL DR_GetInterface(void)       // Called when a Set Interface command is received
 112          {
 113   1         EP0BUF[0] = AlternateSetting;
 114   1         EP0BCH = 0;
 115   1         EP0BCL = 1;
 116   1         return(TRUE);            // Handled by user code
 117   1      }
C51 COMPILER V7.50   VEND_AX                                                               06/04/2006 20:12:23 PAGE 3   

 118          
 119          BOOL DR_GetStatus(void)
 120          {
 121   1         return(TRUE);
 122   1      }
 123          
 124          BOOL DR_ClearFeature(void)
 125          {
 126   1         return(TRUE);
 127   1      }
 128          
 129          BOOL DR_SetFeature(void)
 130          {
 131   1         return(TRUE);
 132   1      }
 133          //定义自己的厂商请求
 134          #define VR_GET_FRAMENO 0xb0//得到帧计数
 135          #define VR_GET_MFRAMENO 0xb1//得到微帧计数
 136          BOOL DR_VendorCmnd(void)
 137          {
 138   1              WORD            addr, len, bc;
 139   1              WORD            ChipRev;
 140   1              WORD i;
 141   1      
 142   1              // Determine I2C boot eeprom device address; addr = 0x0 for 8 bit addr eeproms (24LC00)
 143   1              I2C_Addr = SERIAL_ADDR | ((I2CS & 0x10) >> 4); // addr=0x01 for 16 bit addr eeprom (LC65)
 144   1              // Indicate if it is a dual byte address part
 145   1              DB_Addr = (BOOL)(I2C_Addr & 0x01); //TPM: ID1 is 16 bit addr bit - set by rocker sw or jumper
 146   1      
 147   1              switch(SETUPDAT[1])//判断请求类型
 148   1              { //TPM handle new commands
 149   2              case VR_GET_FRAMENO:
 150   2                                              *EP0BUF = USBFRAMEL;
 151   2                                              *(EP0BUF+1)=USBFRAMEH;
 152   2                                              EP0BCH = 0;
 153   2                                              EP0BCL = 2; 
 154   2                                              EP0CS |= bmHSNAK; 
 155   2                              break;
 156   2                      case VR_GET_MFRAMENO:
 157   2                                              *EP0BUF = MICROFRAME;
 158   2                                              EP0BCH = 0;
 159   2                                              EP0BCL = 1; 
 160   2                                              EP0CS |= bmHSNAK; 
 161   2                              break;
 162   2                      case VR_GETI2C_TYPE:
 163   2                                              *EP0BUF = DB_Addr;
 164   2                                              EP0BCH = 0;
 165   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 166   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 167   2                              break;
 168   2                      case VR_GET_CHIP_REV:
 169   2                                              ChipRev = GET_CHIP_REV();
 170   2                                              *EP0BUF = ChipRev;
 171   2                                              EP0BCH = 0;
 172   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 173   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 174   2                              break;
 175   2                      case VR_TEST_MEM:
 176   2                                              *EP0BUF = 0x0F; // Fail
 177   2                                              EP0BCH = 0;
 178   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 179   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
C51 COMPILER V7.50   VEND_AX                                                               06/04/2006 20:12:23 PAGE 4   

 180   2                              break;
 181   2                      case VR_SETI2CADDR:
 182   2                              I2C_Addr = SETUPDAT[2];
 183   2                              break;
 184   2                      case VR_I2C_100:
 185   2                              I2CTL &= ~bm400KHZ;
 186   2                              EP0BCH = 0;
 187   2                              EP0BCL = 0;
 188   2                              break;
 189   2                      case VR_I2C_400:
 190   2                              I2CTL |= bm400KHZ;
 191   2                              EP0BCH = 0;
 192   2                              EP0BCL = 0;
 193   2                              break;
 194   2                      case VR_RENUM:
 195   2                                              *EP0BUF = 7;
 196   2                                              EP0BCH = 0;
 197   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 198   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 199   2                                              EZUSB_Delay(1000);
 200   2                                              EZUSB_Discon(TRUE);             // renumerate until setup received
 201   2                              break;
 202   2                      case VR_NOSDPAUTO:
 203   2               // we want specify our own length for the transfer so
 204   2               // disable the automatic length feature of the Setup Data Autopointer
 205   2               SUDPTRCTL &= ~bmSDPAUTO;
 206   2      
 207   2               EP0BCH = SETUPDAT[7];
 208   2               EP0BCL = SETUPDAT[6];
 209   2               SUDPTRH = SETUPDAT[3];
 210   2               SUDPTRL = SETUPDAT[2];
 211   2               break;
 212   2                              
 213   2                      case VR_DB_FX:
 214   2                              DB_Addr = 0x01;         //TPM: need to assert double byte
 215   2                              I2C_Addr |= 0x01;       //TPM: need to assert double byte
 216   2              // NOTE: This case falls through !
 217   2                      case VR_RAM:
 218   2                      case VR_EEPROM:
 219   2                              addr = SETUPDAT[2];             // Get address and length
 220   2                              addr |= SETUPDAT[3] << 8;
 221   2                              len = SETUPDAT[6];
 222   2                              len |= SETUPDAT[7] << 8;
 223   2                              // Is this an upload command ?
 224   2                              if(SETUPDAT[0] == VR_UPLOAD)
 225   2                              {
 226   3                                      while(len)                                      // Move requested data through EP0IN 
 227   3                                      {                                                       // one packet at a time.
 228   4      
 229   4                     while(EP0CS & bmEPBUSY);
 230   4      
 231   4                                              if(len < EP0BUFF_SIZE)
 232   4                                                      bc = len;
 233   4                                              else
 234   4                                                      bc = EP0BUFF_SIZE;
 235   4      
 236   4                                              // Is this a RAM upload ?
 237   4                                              if(SETUPDAT[1] == VR_RAM)
 238   4                                              {
 239   5                                                      for(i=0; i<bc; i++)
 240   5                                                              *(EP0BUF+i) = *((BYTE xdata *)addr+i);
 241   5                                              }
C51 COMPILER V7.50   VEND_AX                                                               06/04/2006 20:12:23 PAGE 5   

 242   4                                              else
 243   4                                              {
 244   5                                                      for(i=0; i<bc; i++)
 245   5                                                              *(EP0BUF+i) = 0xcd;
 246   5                                                      EEPROMRead(addr,(WORD)bc,(WORD)EP0BUF);
 247   5                                              }
 248   4      
 249   4                                              EP0BCH = 0;
 250   4                                              EP0BCL = (BYTE)bc; // Arm endpoint with # bytes to transfer
 251   4      
 252   4                                              addr += bc;
 253   4                                              len -= bc;
 254   4      
 255   4                                      }
 256   3                              }
 257   2                              // Is this a download command ?
 258   2                              else if(SETUPDAT[0] == VR_DOWNLOAD)

⌨️ 快捷键说明

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