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

📄 protodma.lst

📁 PDIUSBD12 USB1.1 C51源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V4.01,  PROTODMA                                                              07/07/01  13:16:08  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE PROTODMA
OBJECT MODULE PLACED IN PROTODMA.OBJ
COMPILER INVOKED BY: C:\KEIL\C51V4\BIN\C51.EXE PROTODMA.C DEBUG SMALL CODE SYMBOLS OBJECTEXTEND NOAMAKE

stmt level    source

   1          /*
   2             //*************************************************************************
   3             //
   4             //                  P H I L I P S   P R O P R I E T A R Y
   5             //
   6             //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.
   7             //                     --  ALL RIGHTS RESERVED  --
   8             //
   9             // File Name:	PROTODMA.C
  10             // Created:		18 Aug 98
  11             // Modified:
  12             // Revision:		3.0
  13             //
  14             //*************************************************************************
  15          */
  16          
  17          #include <stdio.h>
  18          #include <string.h>
  19          
  20          #include <reg51.h>                /* special function register declarations   */
  21          #include "epphal.h"
  22          
  23          #include "d12ci.h"
  24          #include "mainloop.h"
  25          #include "usb100.h"
  26          #include "chap_9.h"
  27          
  28          extern CONTROL_XFER ControlData;
  29          extern IO_REQUEST idata ioRequest;
  30          extern EPPFLAGS bEPPflags;
  31          extern BOOL bNoRAM;
  32          
  33          void get_firmware_version()
  34          {
  35   1      	unsigned char i;
  36   1      
  37   1      	i = 0x30; // firmware version number
  38   1      	single_transmit((unsigned char *)&i, 1);
  39   1      }
  40          
  41          void get_buffer_size()
  42          {
  43   1      	unsigned char i[4];
  44   1      
  45   1      	if(bNoRAM == TRUE) {
  46   2      		i[0] = EP2_PACKET_SIZE;
  47   2      		i[1] = 0;
  48   2      		i[2] = 0;
  49   2      		i[3] = 0;
  50   2      	} else {
  51   2      		i[0] = 0;
  52   2      		i[1] = 1;
  53   2      		i[2] = 0;
  54   2      		i[3] = 0;
  55   2      	}
  56   1      	single_transmit((unsigned char *)&i, 4);
  57   1      }
  58          
  59          void setup_dma_request()
C51 COMPILER V4.01,  PROTODMA                                                              07/07/01  13:16:08  PAGE 2   

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

 126   3      		}
 127   2      
 128   2      		if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
 129   2      			ControlData.DeviceRequest.wValue == 0 &&
 130   2      			ControlData.DeviceRequest.wLength == 6)
 131   2      			setup_dma_request();
 132   2      		else
 133   2      			stall_ep0();
 134   2      	}	// if write register
 135   1      }
C51 COMPILER V4.01,  PROTODMA                                                              07/07/01  13:16:08  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION get_firmware_version (BEGIN)
                                           ; SOURCE LINE # 33
                                           ; SOURCE LINE # 34
                                           ; SOURCE LINE # 37
0000 750030  R     MOV     i,#030H
                                           ; SOURCE LINE # 38
0003 7B04          MOV     R3,#04H
0005 7A00    R     MOV     R2,#HIGH i
0007 7900    R     MOV     R1,#LOW i
0009 7D01          MOV     R5,#01H
000B 120000  E     LCALL   _single_transmit
                                           ; SOURCE LINE # 39
000E 22            RET     
             ; FUNCTION get_firmware_version (END)

             ; FUNCTION get_buffer_size (BEGIN)
                                           ; SOURCE LINE # 41
                                           ; SOURCE LINE # 42
                                           ; SOURCE LINE # 45
0000 E500    E     MOV     A,bNoRAM
0002 B4010C        CJNE    A,#01H,?C0002
                                           ; SOURCE LINE # 46
0005 750040  R     MOV     i,#040H
                                           ; SOURCE LINE # 47
0008 E4            CLR     A
0009 F500    R     MOV     i+01H,A
                                           ; SOURCE LINE # 48
000B F500    R     MOV     i+02H,A
                                           ; SOURCE LINE # 49
000D F500    R     MOV     i+03H,A
                                           ; SOURCE LINE # 50
000F 800A          SJMP    ?C0003
0011         ?C0002:
                                           ; SOURCE LINE # 51
0011 E4            CLR     A
0012 F500    R     MOV     i,A
                                           ; SOURCE LINE # 52
0014 750001  R     MOV     i+01H,#01H
                                           ; SOURCE LINE # 53
0017 F500    R     MOV     i+02H,A
                                           ; SOURCE LINE # 54
0019 F500    R     MOV     i+03H,A
                                           ; SOURCE LINE # 55
001B         ?C0003:
                                           ; SOURCE LINE # 56
001B 7B04          MOV     R3,#04H
001D 7A00    R     MOV     R2,#HIGH i
001F 7900    R     MOV     R1,#LOW i
0021 7D04          MOV     R5,#04H
0023 120000  E     LCALL   _single_transmit
                                           ; SOURCE LINE # 57
0026 22            RET     
             ; FUNCTION get_buffer_size (END)

             ; FUNCTION setup_dma_request (BEGIN)
                                           ; SOURCE LINE # 59
                                           ; SOURCE LINE # 60
                                           ; SOURCE LINE # 61
0000 AE00    E     MOV     R6,ControlData+06H
0002 AF00    E     MOV     R7,ControlData+07H
0004 7400    E     MOV     A,#LOW ioRequest
0006 2500    E     ADD     A,ControlData+03H
0008 F9            MOV     R1,A
C51 COMPILER V4.01,  PROTODMA                                                              07/07/01  13:16:08  PAGE 5   

0009 7400    E     MOV     A,#HIGH ioRequest
000B 3500    E     ADDC    A,ControlData+02H
000D A801          MOV     R0,AR1
000F FC            MOV     R4,A
0010 7D01          MOV     R5,#01H
0012 7B04          MOV     R3,#04H
0014 7A00    E     MOV     R2,#HIGH ControlData+0FH
0016 7900    E     MOV     R1,#LOW ControlData+0FH
0018 120000  E     LCALL   ?C_COPY
                                           ; SOURCE LINE # 65
001B 7800    E     MOV     R0,#ioRequest+03H
001D E6            MOV     A,@R0
001E FC            MOV     R4,A
001F 08            INC     R0
0020 E6            MOV     A,@R0
0021 FD            MOV     R5,A
0022 EC            MOV     A,R4
0023 FB            MOV     R3,A
0024 AF05          MOV     R7,AR5
0026 EF            MOV     A,R7
0027 18            DEC     R0
0028 F6            MOV     @R0,A
0029 EB            MOV     A,R3
002A 08            INC     R0
002B F6            MOV     @R0,A
                                           ; SOURCE LINE # 66
002C 7800    E     MOV     R0,#ioRequest
002E E6            MOV     A,@R0
002F FC            MOV     R4,A
0030 08            INC     R0
0031 E6            MOV     A,@R0
0032 FD            MOV     R5,A
0033 EC            MOV     A,R4
0034 FB            MOV     R3,A
0035 AF05          MOV     R7,AR5
0037 EF            MOV     A,R7
0038 18            DEC     R0
0039 F6            MOV     @R0,A
003A EB            MOV     A,R3
003B 08            INC     R0
003C F6            MOV     @R0,A
                                           ; SOURCE LINE # 68
003D D3            SETB    C
003E 7800    E     MOV     R0,#ioRequest+04H
0040 E6            MOV     A,@R0
0041 9400          SUBB    A,#00H
0043 18            DEC     R0
0044 E6            MOV     A,@R0
0045 9401          SUBB    A,#01H
0047 4004          JC      ?C0005
                                           ; SOURCE LINE # 69
0049 120000  E     LCALL   stall_ep0
                                           ; SOURCE LINE # 70

⌨️ 快捷键说明

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