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

📄 vdor.lst

📁 DSP通过双口RAM和ISP1581实现下位机的USB固件程序
💻 LST
字号:
C51 COMPILER V7.06   VDOR                                                                  09/09/2005 13:57:31 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE VDOR
OBJECT MODULE PLACED IN VDOR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE VDOR.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "string.h"
   2          #include "SMPro.H"
   3          #include "USB.H"
   4          #include "HAL.H"
   5          #include "VDOR.H"
   6          //#include "USBD12.H"
   7          #include "main.h"
   8          #include "USB200.H"
   9          #include "Isp1581.h"
  10          #include "Isr.h"
  11          //#include "Hal4sys.h"
  12          #include "chap9.h"
  13          #include "dportram.h"
  14          
  15          extern CONTROL_XFER             ControlData;
  16          extern ZBOARDFLAGS bZBoardFlags;
  17          extern IO_REQUEST idata ioRequest;
  18          extern GLOBE_VARIABLE globe_variable;
  19          extern unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
  20          extern unsigned char bdata key;
  21          code unsigned char ProductCode[] ="1234567890123456";
  22          
  23          
  24          //unsigned int dackpulse=0;
  25          //bit dmadackbit=0;
  26          /**************************************************************************/
  27          /* Subroutines For Vendor Specific Request                                */ 
  28          /**************************************************************************/
  29          /*
  30          void EnableIsoMode(void)
  31          {
  32                  bZBoardFlags.bits.ISO_CONFIG = 1;
  33                  
  34                  Chap9_ControlWriteHandshake();
  35          }
  36          */
  37          void USBVendorCmdSet(void)
  38          {
  39   1              memcpy(&ioRequest.bCommand,ControlData.dataBuffer,0x1);
  40   1              bZBoardFlags.bits.bLED = 1;
  41   1              Chap9_ControlWriteHandshake();
  42   1      }
  43          void USBVendorCmdGet(void)
  44          {
  45   1              USB_Single_Transmit(&key,1);
  46   1              //USB_Single_Transmit(0, 0);
  47   1      }
  48          /**********************************************************************************************/
  49          /**********************************************************************************************/
  50          //for ramshare project
  51          /**********************************************************************************************/
  52          //put zhe data that will be sended in GenEpBuf[]
  53          /////88*****************************************************************************************888/
  54          /**********************************************************************************************/        
  55          void USBVendorReadData(void)
C51 COMPILER V7.06   VDOR                                                                  09/09/2005 13:57:31 PAGE 2   

  56          {
  57   1        unsigned char xdata *exAddress;
  58   1        unsigned char i,j,k;
  59   1        exAddress=0;
  60   1      memcpy(&ioRequest.bCommand,ControlData.dataBuffer,0x1);
  61   1              Chap9_ControlWriteHandshake();
  62   1              if(ioRequest.bCommand>64)
  63   1              {
  64   2      j=ioRequest.bCommand/64;
  65   2      
  66   2      for(k=0;k<j;k++)
  67   2      {
  68   3      EA=0;
  69   3      ramcs=0;
  70   3      for(i=0;i<64;i++)
  71   3      {
  72   4      
  73   4      GenEpBuf[i]=*(exAddress);
  74   4      exAddress++;
  75   4      }
  76   3      ramcs=1;
  77   3      EA=1;
  78   3      
  79   3      ISP1581_WriteBulkEndpoint(EPINDEX4EP01IN,GenEpBuf,64);
  80   3      }
  81   2      ioRequest.bCommand=ioRequest.bCommand-j*64;
  82   2      }
  83   1              
  84   1                      //ioRequest.bCommand=64;
  85   1         //ReadRam(ioRequest.bCommand,GenEpBuf);
  86   1      EA=0;
  87   1      ramcs=0;
  88   1      for(i=0;i<ioRequest.bCommand;i++)
  89   1      {
  90   2      
  91   2      GenEpBuf[i]=*(exAddress);
  92   2      exAddress++;
  93   2      }
  94   1      ramcs=1;
  95   1      EA=1;
  96   1      
  97   1              ISP1581_WriteBulkEndpoint(EPINDEX4EP01IN,GenEpBuf,ioRequest.bCommand);
  98   1      
  99   1      }
 100          /**********************************************************************************************/
 101          /**********************************************************************************************/
 102          /**********************************************************************************************/
 103          /**********************************************************************************************/
 104          void read_write_register(void)
 105          {
 106   1              if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) //0x80
 107   1                {
 108   2                      if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
 109   2                              ControlData.DeviceRequest.wValue == 0 &&
 110   2                              ControlData.DeviceRequest.wLength == 1)
 111   2                              {
 112   3                                      get_firmware_version();
 113   3                              }
 114   2                      else
 115   2                      {
 116   3                              USB_Stall_EP0();
 117   3                      }
C51 COMPILER V7.06   VDOR                                                                  09/09/2005 13:57:31 PAGE 3   

 118   2              }       // if read register
 119   1              else{
 120   2                      if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
 121   2                              ControlData.DeviceRequest.wValue == 0 &&
 122   2                              ControlData.DeviceRequest.wLength == 6)
 123   2                      {
 124   3                              RaiseIRQL();
 125   3                              setup_dma_request();//0xc0,0x0c,0x0000,0x0471,0x0006
 126   3                              LowerIRQL();
 127   3                      }
 128   2                      else
 129   2                      {
 130   3                              USB_Stall_EP0();
 131   3                      }
 132   2              }       // if write register
 133   1      
 134   1      }
 135          
 136          void get_firmware_version(void)
 137          {
 138   1              unsigned char i;
 139   1      
 140   1              i = 0x01; // firmware version number, return 0x01 for PC kit version 1
 141   1              USB_Single_Transmit(&i,1);
 142   1      }
 143          
 144          void setup_dma_request(void)
 145          {
 146   1              memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
 147   1                      ControlData.dataBuffer,
 148   1                      ControlData.DeviceRequest.wLength);
 149   1      
 150   1              ioRequest.uSize = SWAP(ioRequest.uSize);
 151   1              ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
 152   1      
 153   1              if(ioRequest.uSize > DMA_BUFFER_SIZE) // Unaccepted request
 154   1              {
 155   2                      //Chap9_StallEP0();
 156   2                      USB_Stall_EP0();
 157   2              }
 158   1              else
 159   1              {
 160   2                      RaiseIRQL();
 161   2                      bZBoardFlags.bits.setup_dma = 1;
 162   2                      LowerIRQL();
 163   2              } // else if accepted request
 164   1      }
 165          ///////////////////////////////////////////////////////////////
 166          /*void setup_dma(void)
 167          {
 168                  
 169                  if(ioRequest.bCommand & 0x80)
 170                  {
 171                          Config_DMA();
 172                          
 173                  }
 174                  else
 175                  {
 176                          setup_io();
 177                  }
 178          
 179                  bZBoardFlags.bits.DCP_state = USBFSM4DCP_CONTROLOUTDONE;
C51 COMPILER V7.06   VDOR                                                                  09/09/2005 13:57:31 PAGE 4   

 180                  //return;
 181                  
 182          }
 183          // it only works on PC evaluation kit.
 184          void setup_io(void)
 185          {
 186                  
 187          }
 188          
 189          void Config_DMA(void)
 190          {
 191                  unsigned int c;
 192                  unsigned short dmacfg_width; // 16 bit when assign dmacfg_width16 to it, else 8 bit;
 193                  //unsigned short isa_dma_more = 0; // when this is not 0, EXT EOT does not come;
 194              
 195                  RaiseIRQL();
 196                  bZBoardFlags.bits.dma_state = DMA_RUNNING;
 197                  LowerIRQL();
 198          
 199                  dmacfg_width = dmacfg_width16;
 200                  T1=1;
 201                  dmaw=1;
 202                  //CPLD_ctl(dmactl_stop);
 203                  
 204                  ISP1581_SetDMACMD(dmacmd_reset);
 205          
 206                  globe_variable.xfer_dir = (unsigned short)(ioRequest.bCommand & 0x1);
 207                  
 208                  if(globe_variable.xfer_dir==0x1){// IN
 209                          globe_variable.isp1581_dma_counterset_lowbyte = ioRequest.uSize; //exact number, else, clear ep feature;
 210                          }
 211                  else{
 212                          globe_variable.isp1581_dma_counterset_lowbyte = ioRequest.uSize ; // adjust value, stop by short packet;
 213                          }
 214          
 215                  //设置CPLD中传输的起始地址和字节数
 216                  //CPLD_cfg(ioRequest.uAddressL,globe_variable.isp1581_dma_counterset_lowbyte);
 217                  
 218                          //硬件极性配置
 219                          ISP1581_SetDMAHDCfg(dmahd_dreqpolh|dmahd_eotpolh);
 220          
 221                          //dma 传输个数
 222                          ISP1581_SetDMACounterLow(globe_variable.isp1581_dma_counterset_lowbyte);
 223                          ISP1581_SetDMACounterHigh(0x00);                // no longer than 64k bytes each transfer;
 224                          //dma 传输配置
 225                          ISP1581_SetDMAConfig(0x00
 226                                                                  |dmacfg_burst0//dmacfg_burst0
 227                                                                  |dmacfg_modediorw
 228          //                                                      |dmacfg_modedack
 229          //                                                      |dmacfg_modediorack
 230                                                                  |dmacfg_width//dmacfg_width16
 231                                                                  //|dmacfg_disablecounter  //test
 232                                                                  );
 233                          //dma 中断配置
 234                          ISP1581_SetDMAIntMask(dmaint_intereot|dmaint_xferok);
 235                          //ISP1581_SetDMAIntMask(dmaint_extereot|dmaint_xferok);
 236                     
 237                     CY=0;
 238                     dackpulse=globe_variable.isp1581_dma_counterset_lowbyte>>1;
 239                          if(globe_variable.xfer_dir==0x1)
 240                          {//IN
 241                                  //选择端点
C51 COMPILER V7.06   VDOR                                                                  09/09/2005 13:57:31 PAGE 5   

 242                                  ISP1581_SetDMAEP(bulkinendpointindex);
 243          
 244                                  bZBoardFlags.bits.dma_endpoint = bulkinendpointindex;
 245                                  //将用作dma传输的端点中断禁止
 246                                  c = ISP1581_GetIntEnableLow();
 247                                  ISP1581_SetIntEnableLow(c&(~bulkinendpointinterrupt));
 248                                  ISP1581_SetEPMAXSize(EPINDEX4EP02IN, maxepsize_1024);
 249                                  //启动cpld的DMA传输机制
 250                                  //CPLD_ctl(dmactl_in|dmactl_start);
 251                                  ///启动dma读操作
 252                         //TL1 = 0xf0;                    ///* value set by user 
 253                         //TH1 = 0xf0;                    ///* value set by user  
 254                     ISP1581_SetDMACMD(dmacmd_gdmaread);
 255                     
 256                          dmadackbit=1;  
 257          
 258          
 259                 MCU_LED0=!MCU_LED0;
 260                     
 261                          }
 262                          else
 263                          {// out
 264                                  ISP1581_SetDMAEP(bulkoutendpointindex);
 265                                  bZBoardFlags.bits.dma_endpoint = bulkoutendpointindex;
 266                                  c = ISP1581_GetIntEnableLow();
 267                                  ISP1581_SetIntEnableLow(c&(~bulkoutendpointinterrupt));
 268                                  
 269                                  //CPLD_ctl(dmactl_out|dmactl_start);
 270                                  
 271                                  ISP1581_SetDMACMD(dmacmd_gdmawrite);
 272                      MCU_LED0=!MCU_LED0;
 273                          
 274          
 275                          }
 276                          
 277          }
 278          
 279          
 280           */ // 7.25
 281          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    407    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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