📄 protodma.lst
字号:
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 + -