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

📄 protodma.lst

📁 usb固件程序
💻 LST
字号:
C51 COMPILER V7.01  PROTODMA                                                               09/27/2003 23:46:49 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE PROTODMA
OBJECT MODULE PLACED IN protodma.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE protodma.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          
   3          
   4          
   5          
   6          
   7          
   8          
   9          #include <stdio.h>
  10          #include <string.h>
  11          
  12          #include "mainloop.h"
  13          #include "Epphal.h"
  14          #include "usb100.h"
  15          
  16          extern CONTROL_XFER ControlData;
  17          extern IO_REQUEST idata ioRequest;
  18          extern EPPFLAGS bEPPflags;
  19          extern BOOL bNoRAM;
  20          
  21          extern void single_transmit(unsigned char * buf, unsigned char len);
  22          extern void stall_ep0(void);
  23          
  24          void get_firmware_version()
  25          {
  26   1              unsigned char i;
  27   1      
  28   1              i = 0x30; // firmware version number
  29   1              single_transmit((unsigned char *)&i, 1);
  30   1      
  31   1      }
  32          
  33          void get_buffer_size()
  34          {
  35   1              unsigned char i[4];
  36   1      
  37   1              if(bNoRAM == TRUE) {
  38   2                      i[0] = EP2_PACKET_SIZE;
  39   2                      i[1] = 0;
  40   2                      i[2] = 0;
  41   2                      i[3] = 0;
  42   2              } else {
  43   2                      i[0] = 0;
  44   2                      i[1] = 1;
  45   2                      i[2] = 0;
  46   2                      i[3] = 0;
  47   2              }
  48   1              single_transmit(i, 4);
  49   1      
  50   1      }
  51          
  52          void setup_dma_request()
  53          {
  54   1              memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
  55   1                      ControlData.dataBuffer,
C51 COMPILER V7.01  PROTODMA                                                               09/27/2003 23:46:49 PAGE 2   

  56   1                      ControlData.DeviceRequest.wLength);
  57   1      
  58   1              ioRequest.uSize = SWAP(ioRequest.uSize);
  59   1              ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
  60   1      
  61   1              if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
  62   2                      stall_ep0();
  63   2              }
  64   1              else if(bNoRAM == TRUE && ioRequest.uSize > EP2_PACKET_SIZE) {
  65   2                      stall_ep0();
  66   2              }
  67   1              else {
  68   2                      if(bEPPflags.bits.dma_state == DMA_IDLE) {
  69   3                              DISABLE;
  70   3                              bEPPflags.bits.setup_dma ++;
  71   3                              ENABLE;
  72   3                      }
  73   2                      else {
  74   3                              DISABLE;
  75   3                              bEPPflags.bits.dma_state = DMA_PENDING;
  76   3                              ENABLE;
  77   3                      }
  78   2      
  79   2              } // else if accepted request
  80   1      }
  81          
  82          void read_write_register(void)
  83          {
  84   1              unsigned char i;
  85   1      
  86   1              if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
  87   2      
  88   2                      if(bEPPflags.bits.verbose)
  89   2                              printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
  90   2                                      ControlData.DeviceRequest.wValue,
  91   2                                      ControlData.DeviceRequest.wLength,
  92   2                                      ControlData.DeviceRequest.wIndex);
  93   2      
  94   2                      if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
  95   2                              ControlData.DeviceRequest.wValue == 0 &&
  96   2                              ControlData.DeviceRequest.wLength == 1)
  97   2                              get_firmware_version();
  98   2                      else
  99   2                      if(ControlData.DeviceRequest.wIndex == GET_BUFFER_SIZE &&
 100   2                              ControlData.DeviceRequest.wValue == 0 &&
 101   2                              ControlData.DeviceRequest.wLength == 4)
 102   2                              get_buffer_size();
 103   2                      else
 104   2                              stall_ep0();
 105   2      
 106   2              }       // if read register
 107   1              else{
 108   2                      if(bEPPflags.bits.verbose) {
 109   3      
 110   3                              //printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
 111   3                              //      ControlData.DeviceRequest.wValue,
 112   3                              //      ControlData.DeviceRequest.wLength,
 113   3                              //      ControlData.DeviceRequest.wIndex);
 114   3      
 115   3                              //printf("Data: ");
 116   3                              for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 117   3                                      printf("0x%bx, ", *((ControlData.dataBuffer)+i));
C51 COMPILER V7.01  PROTODMA                                                               09/27/2003 23:46:49 PAGE 3   

 118   3                              printf("\n");
 119   3                      }
 120   2      
 121   2                      if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
 122   2                              ControlData.DeviceRequest.wValue == 0 &&
 123   2                              ControlData.DeviceRequest.wLength == 6)
 124   2                              setup_dma_request();
 125   2                              //stall_ep0();
 126   2                      else
 127   2                              stall_ep0();
 128   2              }       // if write register
 129   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    371    ----
   CONSTANT SIZE    =     71    ----
   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 + -