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

📄 protodma.lst

📁 飞利浦usb D12芯片fireware 源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 222      =1  
 223      =1  
 224      =1  #endif   /* __USB100_H__ */
  31          #include "chap_9.h"
   1      =1  /*
   2      =1     //*************************************************************************
   3      =1     //
   4      =1     //                  P H I L I P S   P R O P R I E T A R Y
   5      =1     //
   6      =1     //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.
   7      =1     //                     --  ALL RIGHTS RESERVED  --
   8      =1     //
   9      =1     // File Name:        CHAP_9.H
  10      =1     // Author:           Wenkai Du
  11      =1     // Created:          19 Dec 97
  12      =1     // Modified:
  13      =1     // Revision:         2.0
  14      =1     //
  15      =1     //*************************************************************************
  16      =1     //
  17      =1     //*************************************************************************
  18      =1  */
  19      =1  
  20      =1  
  21      =1  #ifndef __CHAP_9_H__
  22      =1  #define __CHAP_9_H__
  23      =1  
  24      =1  /*
  25      =1     //*************************************************************************
  26      =1     // USB Protocol Layer
  27      =1     //*************************************************************************
  28      =1  */
  29      =1  
  30      =1  /*
  31      =1     //*************************************************************************
C51 COMPILER V8.02   PROTODMA                                                              07/27/2007 11:10:49 PAGE 15  

  32      =1     // USB standard device requests
  33      =1     //*************************************************************************
  34      =1  */
  35      =1  void get_status(void);
  36      =1  void clear_feature(void);
  37      =1  void set_feature(void);
  38      =1  void set_address(void);
  39      =1  void get_descriptor(void);
  40      =1  void get_configuration(void);
  41      =1  void set_configuration(void);
  42      =1  void get_interface(void);
  43      =1  void set_interface(void);
  44      =1  
  45      =1  void reserved(void);
  46      =1  
  47      =1  #endif
  32          
  33          extern CONTROL_XFER ControlData;
  34          extern IO_REQUEST idata ioRequest;
  35          extern EPPFLAGS bEPPflags;
  36          
  37          void get_firmware_version()
  38          {
  39   1              unsigned char i;
  40   1      
  41   1      #ifndef __C51__
                      i = 0x01; // firmware version number, return 0x01 for PC kit version 1
              #else
  44   1              i = 0x21; // firmware version number, return 0x11 for PC kit using 8052, 0x21 for USB-EPP
  45   1      #endif
  46   1              single_transmit((unsigned char *)&i, 1);
  47   1      }
  48          
  49          void setup_dma_request()
  50          {
  51   1              memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
  52   1                      ControlData.dataBuffer,
  53   1                      ControlData.DeviceRequest.wLength);
  54   1      
  55   1              ioRequest.uSize = SWAP(ioRequest.uSize);
  56   1              ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
  57   1      
  58   1              if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
  59   2                      stall_ep0();
  60   2              }
  61   1              else {
  62   2      
  63   2                      if(bEPPflags.bits.dma_state == DMA_IDLE) {
  64   3                              DISABLE;
  65   3                              bEPPflags.bits.setup_dma = 1;
  66   3                              ENABLE;
  67   3                      }
  68   2                      else {
  69   3                              DISABLE;
  70   3                              bEPPflags.bits.dma_state = DMA_PENDING;
  71   3                              ENABLE;
  72   3                      }
  73   2      
  74   2              } // else if accepted request
  75   1      }
  76          
  77          void read_write_register(void)
C51 COMPILER V8.02   PROTODMA                                                              07/27/2007 11:10:49 PAGE 16  

  78          {
  79   1              unsigned char i;
  80   1      
  81   1              if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
  82   2      
  83   2                      if(bEPPflags.bits.verbose)
  84   2                              printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
  85   2                                      ControlData.DeviceRequest.wValue,
  86   2                                      ControlData.DeviceRequest.wLength,
  87   2                                      ControlData.DeviceRequest.wIndex);
  88   2      
  89   2                      if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
  90   2                              ControlData.DeviceRequest.wValue == 0 &&
  91   2                              ControlData.DeviceRequest.wLength == 1)
  92   2                              get_firmware_version();
  93   2                      else
  94   2                              stall_ep0();
  95   2      
  96   2              }       // if read register
  97   1              else{
  98   2                      if(bEPPflags.bits.verbose) {
  99   3      
 100   3                              printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
 101   3                                      ControlData.DeviceRequest.wValue,
 102   3                                      ControlData.DeviceRequest.wLength,
 103   3                                      ControlData.DeviceRequest.wIndex);
 104   3      
 105   3                              printf("Data: ");
 106   3                              for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 107   3      #ifndef __C51__
                                              printf("0x%x, ", *((ControlData.dataBuffer)+i));
              #else
 110   3                                      printf("0x%bx, ", *((ControlData.dataBuffer)+i));
 111   3      #endif
 112   3                              printf("\n");
 113   3                      }
 114   2      
 115   2                      if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
 116   2                              ControlData.DeviceRequest.wValue == 0 &&
 117   2                              ControlData.DeviceRequest.wLength == 6)
 118   2                              setup_dma_request();
 119   2                      else
 120   2                              stall_ep0();
 121   2              }       // if write register
 122   1      }
C51 COMPILER V8.02   PROTODMA                                                              07/27/2007 11:10:49 PAGE 17  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION get_firmware_version (BEGIN)
                                           ; SOURCE LINE # 37
                                           ; SOURCE LINE # 38
                                           ; SOURCE LINE # 44
0000 900000      R     MOV     DPTR,#i
0003 7421              MOV     A,#021H
0005 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 46
0006 7B01              MOV     R3,#01H
0008 7A00        R     MOV     R2,#HIGH i
000A 7900        R     MOV     R1,#LOW i
000C 7D01              MOV     R5,#01H
000E 020000      E     LJMP    _single_transmit
             ; FUNCTION get_firmware_version (END)

             ; FUNCTION setup_dma_request (BEGIN)
                                           ; SOURCE LINE # 49
                                           ; SOURCE LINE # 50
                                           ; SOURCE LINE # 51
0000 900000      E     MOV     DPTR,#ControlData+06H
0003 E0                MOVX    A,@DPTR
0004 FE                MOV     R6,A
0005 A3                INC     DPTR
0006 E0                MOVX    A,@DPTR
0007 FF                MOV     R7,A
0008 900000      E     MOV     DPTR,#ControlData+02H
000B E0                MOVX    A,@DPTR
000C FC                MOV     R4,A
000D A3                INC     DPTR
000E E0                MOVX    A,@DPTR
000F 2400        E     ADD     A,#LOW ioRequest
0011 F9                MOV     R1,A
0012 7400        E     MOV     A,#HIGH ioRequest
0014 3C                ADDC    A,R4
0015 A801              MOV     R0,AR1
0017 FC                MOV     R4,A
0018 7D00              MOV     R5,#00H
001A 7B01              MOV     R3,#01H
001C 7A00        E     MOV     R2,#HIGH ControlData+0FH
001E 7900        E     MOV     R1,#LOW ControlData+0FH
0020 120000      E     LCALL   ?C?COPY
                                           ; SOURCE LINE # 55
0023 7800        E     MOV     R0,#LOW ioRequest+03H
0025 E6                MOV     A,@R0
0026 FC                MOV     R4,A
0027 08                INC     R0
0028 E6                MOV     A,@R0
0029 FD                MOV     R5,A
002A EC                MOV     A,R4
002B FB                MOV     R3,A
002C AF05              MOV     R7,AR5
002E EF                MOV     A,R7
002F 18                DEC     R0
0030 F6                MOV     @R0,A
0031 EB                MOV     A,R3
0032 08                INC     R0
0033 F6                MOV     @R0,A
                                           ; SOURCE LINE # 56
0034 7800        E     MOV     R0,#LOW ioRequest
C51 COMPILER V8.02   PROTODMA                                                              07/27/2007 11:10:49 PAGE 18  

0036 E6                MOV     A,@R0
0037 FC                MOV     R4,A
0038 08                INC     R0
0039 E6                MOV     A,@R0
003A FD                MOV     R5,A
003B EC                MOV     A,R4
003C FB                MOV     R3,A
003D AF05              MOV     R7,AR5
003F EF                MOV     A,R7
0040 18                DEC     R0
0041 F6                MOV     @R0,A
0042 EB                MOV     A,R3
0043 08                INC     R0
0044 F6                MOV     @R0,A
                                           ; SOURCE LINE # 58
0045 D3                SETB    C
0046 7800        E     MOV     R0,#LOW ioRequest+04H
0048 E6                MOV     A,@R0
0049 9400              SUBB    A,#00H
004B 18                DEC     R0
004C E6                MOV     A,@R0
004D 9440              SUBB    A,#040H
004F 4003              JC      ?C0002
                                           ; SOURCE LINE # 59
0051 020000      E     LJMP    stall_ep0
                                           ; SOURCE LINE # 60
0054         ?C0002:
                                           ; SOURCE LINE # 61
                                           ; SOURCE LINE # 63
0054 900000      E     MOV     DPTR,#bEPPflags+01H
0057 E0                MOVX    A,@DPTR
0058 C4                SWAP    A
0059 5403              ANL     A,#03H
005B 7007              JNZ     ?C0004
                                           ; SOURCE LINE # 64
005D C2AF              CLR     EA
                                           ; SOURCE LINE # 65
005F E0                MOVX    A,@DPTR
0060 4408              ORL     A,#08H
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
0062 800A              SJMP    ?C0025
0064         ?C0004:
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
0064 C2AF              CLR     EA
                                           ; SOURCE LINE # 70
0066 900000      E     MOV     DPTR,#bEPPflags+01H
0069 E0                MOVX    A,@DPTR
006A 54CF              ANL     A,#0CFH
006C 4420              ORL     A,#020H
006E         ?C0025:
006E F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 71
006F D2AF              SETB    EA
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 74
                                           ; SOURCE LINE # 75
0071         ?C0006:
0071 22                RET     
             ; FUNCTION setup_dma_request (END)

C51 COMPILER V8.02   PROTODMA                                                              07/27/2007 11:10:49 PAGE 19  

             ; FUNCTION read_write_register (BEGIN)
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 78
                                           ; SOURCE LINE # 81
0000 900000      E     MOV     DPTR,#ControlData
0003 E0                MOVX    A,@DPTR
0004 30E768            JNB     ACC.7,?C0007
                                           ; SOURCE LINE # 83
0007 900000      E     MOV     DPTR,#bEPPflags+01H
000A E0                MOVX    A,@DPTR
000B FF                MOV     R7,A

⌨️ 快捷键说明

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