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

📄 vend_ax.lst

📁 USB芯片cy7c68013与AD转换芯片MAX115实现数据转换
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   VEND_AX                                                               04/23/2009 15:18:28 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 BROWSE 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          
  12          extern BOOL     GotSUD;                 // 接收设置数据标志
  13          extern BOOL     Sleep;
  14          extern BOOL     Rwuen;
  15          extern BOOL     Selfpwr;
  16             
  17          BYTE    Configuration;          // 当前设置
  18          BYTE    AlternateSetting;       // 交替设置
  19          sbit PA0 = IOA ^ 0;  
  20          sbit PA1 = IOA ^ 1;       
  21          sbit PA2 = IOA ^ 2;
  22          sbit PA3 = IOA ^ 3;       
  23          sbit PA4 = IOA ^ 4;
  24          sbit PA5 = IOA ^ 5;
  25          sbit PA6 = IOA ^ 6;
  26          sbit PA7 = IOA ^ 7;
  27          
  28          // EZUSB FX2 PORTD = FD[15:8], when IFCFG[1:0]=10 and WORDWIDE=1
  29          sbit PD0 = IOD ^ 0;
  30          sbit PD1 = IOD ^ 1;
  31          sbit PD2 = IOD ^ 2;
  32          sbit PD3 = IOD ^ 3;
  33          sbit PD4 = IOD ^ 4;
  34          sbit PD5 = IOD ^ 5;
  35          sbit PD6 = IOD ^ 6;
  36          sbit PD7 = IOD ^ 7;
  37          //-----------------------------------------------------------------------------
  38          // 常量
  39          //-----------------------------------------------------------------------------
  40          #define VR_UPLOAD               0xc0
  41          #define VR_DOWNLOAD             0x40
  42          
  43          #define VR_ANCHOR_DLD   0xa0 // handled by core
  44          #define VR_EEPROM               0xa2 // 上传/下载到 EEPROM
  45          #define VR_RAM                  0xa3 // 上传/下载到外部ram
  46          #define VR_SETI2CADDR   0xa4
  47          #define VR_GETI2C_TYPE  0xa5 // 8或16 字节地址
  48          #define VR_GET_CHIP_REV 0xa6 // Rev A, B = 0, Rev C = 2 // NOTE: New TNG Rev
  49          #define VR_TEST_MEM     0xa7 // runs mem test and returns result
  50          #define VR_RENUM            0xa8 // 重枚举
  51          #define VR_DB_FX            0xa9 // Force use of double byte address EEPROM (for FX)
  52          #define VR_I2C_100    0xaa // put the i2c bus in 100Khz mode
  53          #define VR_I2C_400    0xab // put the i2c bus in 400Khz mode
  54          #define VR_NOSDPAUTO  0xac // test code. does uploads using SUDPTR with manual length override
  55          
C51 COMPILER V7.50   VEND_AX                                                               04/23/2009 15:18:28 PAGE 2   

  56          
  57          #define VR_C1    0xC1 // put the i2c bus in 400Khz mode
  58          
  59          
  60          #define SERIAL_ADDR             0x50
  61          #define EP0BUFF_SIZE    0x40
  62          
  63          #define GET_CHIP_REV()          ((CPUCS >> 4) & 0x00FF) // EzUSB Chip Rev Field
  64          
  65          //-----------------------------------------------------------------------------
  66          // 全局变量
  67          //-----------------------------------------------------------------------------
  68          BYTE                    DB_Addr;                                        //TPM Dual Byte Address stat
  69          BYTE                    I2C_Addr;                                       //TPM I2C address
  70          
  71          //-----------------------------------------------------------------------------
  72          // 函数原型
  73          //-----------------------------------------------------------------------------
  74          void EEPROMWrite(WORD addr, BYTE length, BYTE xdata *buf); //TPM EEPROM Write
  75          void EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf);  //TPM EEPROM Read
  76          
  77          //-----------------------------------------------------------------------------
  78          // 任务分配器挂钩
  79          // 以下挂钩由任务分配器调用
  80          //-----------------------------------------------------------------------------
  81          
  82          void TD_Init(void)                              // 在起始调用一次
  83          {
  84   1              Rwuen = TRUE;                           // 使能远程唤醒
  85   1              EZUSB_InitI2C();                        // 初始化I2C总线
  86   1      }
  87          
  88          void TD_Poll(void)                              // 当设备闲置时,重复调用
  89          {
  90   1      }
  91          
  92          BOOL TD_Suspend(void)                   // 在设备进入挂起方式时调用
  93          {
  94   1              return(TRUE);
  95   1      }
  96          
  97          BOOL TD_Resume(void)                    // 在设备恢复会调用
  98          {
  99   1              return(TRUE);
 100   1      }
 101          
 102          //-----------------------------------------------------------------------------
 103          // 设备请求挂钩
 104          //-----------------------------------------------------------------------------
 105          
 106          
 107          BOOL DR_GetDescriptor(void)
 108          {
 109   1         return(TRUE);
 110   1      }
 111          
 112          BOOL DR_SetConfiguration(void)   // 当设置配置指令被接受时调用
 113          {
 114   1         Configuration = SETUPDAT[2];
 115   1         return(TRUE);            // 由用户代码处理
 116   1      }
 117          
C51 COMPILER V7.50   VEND_AX                                                               04/23/2009 15:18:28 PAGE 3   

 118          BOOL DR_GetConfiguration(void)   // 当设置配置指令被接受时调用
 119          {
 120   1         EP0BUF[0] = Configuration;
 121   1         EP0BCH = 0;
 122   1         EP0BCL = 1;
 123   1         return(TRUE);            // 由用户代码处理
 124   1      }
 125          
 126          BOOL DR_SetInterface(void)       // 当设置接口命令获取时调用
 127          {
 128   1         AlternateSetting = SETUPDAT[2];
 129   1         return(TRUE);            // 由用户代码处理
 130   1      }
 131          
 132          BOOL DR_GetInterface(void)       // 当设置接口命令获取时调用
 133          {
 134   1         EP0BUF[0] = AlternateSetting;
 135   1         EP0BCH = 0;
 136   1         EP0BCL = 1;
 137   1         return(TRUE);            // 由用户代码处理
 138   1      }
 139          
 140          BOOL DR_GetStatus(void)
 141          {
 142   1         return(TRUE);
 143   1      }
 144          
 145          BOOL DR_ClearFeature(void)
 146          {
 147   1         return(TRUE);
 148   1      }
 149          
 150          BOOL DR_SetFeature(void)
 151          {
 152   1         return(TRUE);
 153   1      }
 154          //定义自己的厂商请求
 155          #define VR_GET_FRAMENO 0xb0//得到帧计数
 156          #define VR_GET_MFRAMENO 0xb1//得到微帧计数
 157          BOOL DR_VendorCmnd(void)
 158          {
 159   1              WORD            addr, len, bc;
 160   1              WORD            ChipRev;
 161   1              WORD i;
 162   1      
 163   1              // Determine I2C boot eeprom device address; addr = 0x0 for 8 bit addr eeproms (24LC00)
 164   1              I2C_Addr = SERIAL_ADDR | ((I2CS & 0x10) >> 4); // addr=0x01 for 16 bit addr eeprom (LC65)
 165   1              // Indicate if it is a dual byte address part
 166   1              DB_Addr = (BOOL)(I2C_Addr & 0x01); //TPM: ID1 is 16 bit addr bit - set by rocker sw or jumper
 167   1      
 168   1              switch(SETUPDAT[1])//判断请求类型
 169   1              { //TPM handle new commands
 170   2              case VR_GET_FRAMENO:
 171   2                                              *EP0BUF = USBFRAMEL;
 172   2                                              *(EP0BUF+1)=USBFRAMEH;
 173   2                                              EP0BCH = 0;
 174   2                                              EP0BCL = 2; 
 175   2                                              EP0CS |= bmHSNAK; 
 176   2                              break;
 177   2                      case VR_GET_MFRAMENO:
 178   2                                              *EP0BUF = MICROFRAME;
 179   2                                              EP0BCH = 0;
C51 COMPILER V7.50   VEND_AX                                                               04/23/2009 15:18:28 PAGE 4   

 180   2                                              EP0BCL = 1; 
 181   2                                              EP0CS |= bmHSNAK; 
 182   2                              break;
 183   2                      case VR_GETI2C_TYPE:
 184   2                                              *EP0BUF = DB_Addr;
 185   2                                              EP0BCH = 0;
 186   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 187   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 188   2                              break;
 189   2                      case VR_GET_CHIP_REV:
 190   2                                              ChipRev = GET_CHIP_REV();
 191   2                                              *EP0BUF = ChipRev;
 192   2                                              EP0BCH = 0;
 193   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 194   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 195   2                              break;
 196   2                      case VR_TEST_MEM:
 197   2                                              *EP0BUF = 0x0F; // Fail
 198   2                                              EP0BCH = 0;
 199   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 200   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 201   2                              break;
 202   2                      case VR_SETI2CADDR:
 203   2                              I2C_Addr = SETUPDAT[2];
 204   2                              break;
 205   2                      case VR_I2C_100:
 206   2                              /*I2CTL &= ~bm400KHZ;
 207   2                              EP0BCH = 0;
 208   2                              EP0BCL = 0;*/
 209   2                // Serial_SendChar('A', 0);
 210   2      
 211   2                              break;
 212   2      
 213   2               case VR_C1:
 214   2                              CPUCS = 0x10;                 // CLKSPD[1:0]=10, for 48MHz operation
 215   2                                      // CLKOE=0, don't drive CLKOUT
 216   2      
 217   2                  IFCONFIG = 0xE8;  
 218   2                  // IFCLKSRC=1   , FIFOs executes on internal clk source
 219   2                  // xMHz=1       , 48MHz internal clk rate
 220   2                  // IFCLKOE=1    , Don't drive IFCLK pin signal at 48MHz
 221   2                  // IFCLKPOL=0   , Don't invert IFCLK pin signal from internal clk
 222   2                  // ASYNC=1      , master samples asynchronous
 223   2                  // GSTATE=0     , Don't drive GPIF states out on PORTE[2:0], debug WF
 224   2                  // IFCFG[1:0]=00, Port
 225   2                              OEA=0xFD;//OEA,OEB,OED控制口的输入输出使能,1为输出,0为输入
 226   2                              OEB=0xff;
 227   2                              OED=0xff;
 228   2                              IOA=0xFF;//IOA,IOB.IOD 为端口上输入输出数据
 229   2      
 230   2                  PA2=0;//读
 231   2      
 232   2                  IOB=0x01;
 233   2                              IOD=0x30;
 234   2      
 235   2                              EZUSB_Delay(100);      
 236   2          
 237   2                              PA2=1;//写
 238   2      
 239   2                              EZUSB_Delay(100);
 240   2      
 241   2                              OEB=0x00;//端点B、D输入
C51 COMPILER V7.50   VEND_AX                                                               04/23/2009 15:18:28 PAGE 5   

 242   2                              OED=0x00;
 243   2      
 244   2                  PA0=1;
 245   2                              EZUSB_Delay(100);
 246   2                  PA0=0;                                          //转换开始
 247   2                              EZUSB_Delay(100);
 248   2                  PA0=1;
 249   2                     
 250   2                              while (PA1==1);                //等待中断到来
 251   2                  EZUSB_Delay(100);
 252   2                              
 253   2                          PA4=0;                     //片选信号有效
 254   2                              PA2=0;                     //读数据
 255   2      
 256   2                  EZUSB_Delay(100);
 257   2                              
 258   2                  *EP0BUF =IOB;
 259   2                              *(EP0BUF+1) = IOD;             //通过EP0端点发送到主机
 260   2                  PA2=1;
 261   2                              PA4=1;
 262   2                  EP0BCH = 0;
 263   2                              EP0BCL = 2;
 264   2                      EP0CS |= bmHSNAK;
 265   2      
 266   2                              break;
 267   2      
 268   2      
 269   2      
 270   2                      case VR_I2C_400:
 271   2                              I2CTL |= bm400KHZ;
 272   2                              EP0BCH = 0;
 273   2                              EP0BCL = 0;
 274   2                              break;
 275   2                      case VR_RENUM:
 276   2                                              *EP0BUF = 7;
 277   2                                              EP0BCH = 0;
 278   2                                              EP0BCL = 1; // Arm endpoint with # bytes to transfer
 279   2                                              EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
 280   2                                              EZUSB_Delay(1000);
 281   2                                              EZUSB_Discon(TRUE);             // renumerate until setup received
 282   2                              break;
 283   2                      case VR_NOSDPAUTO:
 284   2               // we want specify our own length for the transfer so
 285   2               // disable the automatic length feature of the Setup Data Autopointer
 286   2               SUDPTRCTL &= ~bmSDPAUTO;
 287   2      
 288   2               EP0BCH = SETUPDAT[7];
 289   2               EP0BCL = SETUPDAT[6];
 290   2               SUDPTRH = SETUPDAT[3];
 291   2               SUDPTRL = SETUPDAT[2];
 292   2               break;
 293   2                              
 294   2                      case VR_DB_FX:
 295   2                              DB_Addr = 0x01;         //TPM: need to assert double byte
 296   2                              I2C_Addr |= 0x01;       //TPM: need to assert double byte
 297   2              // NOTE: This case falls through !
 298   2                      case VR_RAM:
 299   2                      case VR_EEPROM:

⌨️ 快捷键说明

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