📄 xxgisr.lst
字号:
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE XXGISR
OBJECT MODULE PLACED IN Xxgisr.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Xxgisr.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //#include <reg51.h> /* special function register declarations */
2 #include <stdio.h>
3 #include <string.h>
4
5 #include "xxghal.h"
6 #include "xxgd12ci.h"
7 #include "xxgmain.h"
8 #include "xxgUSB100.h"
9
10 void bus_reset(void);
11
12 void ep0_txdone(void);
13 void ep0_rxdone(void);
14 void ep1_txdone(void);
15 void ep1_rxdone(void);
16 void main_txdone(void);
17 void main_rxdone(void);
18
19 //void dma_eot(void);
20
21 /*
22 //*************************************************************************
23 // Public static data
24 //*************************************************************************
25 */
26 EPPFLAGS bEPPflags;
27
28 /* Control endpoint TX/RX buffers */
29 extern CONTROL_XFER ControlData;
30
31 /* ISR static vars */
32 unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
33 unsigned char idata EpBuf[EP2_PACKET_SIZE];
34 IO_REQUEST idata ioRequest;
35 unsigned char ioSize, ioCount;
36
37 unsigned long ClockTicks = 0;
38 unsigned char xdata MainEpBuf[256];
39
40 extern BOOL bNoRAM;
41
42 timer_isr() interrupt 1
43 {
44 1 DISABLE;
45 1 ClockTicks++;
46 1 bEPPflags.bits.timer = 1;
47 1 ENABLE;
48 1 }
49
50 /*
51 void fn_usb_isr()
52 {
53 //unsigned int st;
54 unsigned char x,st;
55 bEPPflags.bits.in_isr = 1;
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 2
56 x = D12_ReadInterruptRegister();
57 //st=x;
58 //i=st;
59 if(x != 0) {
60 //if(i_st & D12_INT_BUSRESET) {
61 if(x & 0x40) {
62 bus_reset();
63 bEPPflags.bits.bus_reset = 1;
64 }
65
66 if(x & D12_INT_EOT)
67 dma_eot();
68
69 if(x & D12_INT_SUSPENDCHANGE)
70 bEPPflags.bits.suspend = 1;
71
72
73 if(x & D12_INT_ENDP0IN)
74 ep0_txdone();
75 if(x & D12_INT_ENDP0OUT)
76 ep0_rxdone();
77 if(x & D12_INT_ENDP1IN)
78 ep1_txdone();
79 if(x & D12_INT_ENDP1OUT)
80 ep1_rxdone();
81 if(x & D12_INT_ENDP2IN)
82 main_txdone();
83 if(x & D12_INT_ENDP2OUT)
84 main_rxdone();
85
86 }
87
88 bEPPflags.bits.in_isr = 0;
89
90 }
91 */
92 usb_isr() interrupt 0
93 {
94 1 unsigned char x,st;
95 1 DISABLE;
96 1 //fn_usb_isr();
97 1 //unsigned int st;
98 1 //unsigned char x,st;
99 1 bEPPflags.bits.in_isr = 1;
100 1 x = D12_ReadInterruptRegister();
101 1 //st=x;
102 1 //i=st;
103 1 if(x != 0) {
104 2 //if(i_st & D12_INT_BUSRESET) {
105 2 if(x & 0x40) {
106 3 bus_reset();
107 3 bEPPflags.bits.bus_reset = 1;
108 3 }
109 2
110 2 //if(x & D12_INT_EOT)
111 2 //dma_eot();
112 2
113 2 if(x & D12_INT_SUSPENDCHANGE)
114 2 bEPPflags.bits.suspend = 1;
115 2
116 2
117 2 if(x & D12_INT_ENDP0IN)
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 3
118 2 ep0_txdone();
119 2 if(x & D12_INT_ENDP0OUT)
120 2 ep0_rxdone();
121 2 if(x & D12_INT_ENDP1IN)
122 2 ep1_txdone();
123 2 if(x & D12_INT_ENDP1OUT)
124 2 ep1_rxdone();
125 2 if(x & D12_INT_ENDP2IN)
126 2 main_txdone();
127 2 if(x & D12_INT_ENDP2OUT)
128 2 main_rxdone();
129 2
130 2 }
131 1
132 1 bEPPflags.bits.in_isr = 0;
133 1
134 1
135 1
136 1 ENABLE;
137 1 }
*** WARNING C280 IN LINE 94 OF XXGISR.C: 'st': unreferenced local variable
138 void bus_reset(void)
139 {
140 1 }
141 //void dma_eot(void)
142 //{
143 //}
144 //---------------------------------
145 void ep0_rxdone(void)
146 {
147 1 unsigned char ep_last, i;
148 1
149 1 ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
150 1 if (ep_last & D12_SETUPPACKET) {
151 2
152 2 ControlData.wLength = 0;
153 2 ControlData.wCount = 0;
154 2 //判断端点是否满,如是,则取出
155 2 if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
156 2 (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
157 3
158 3 D12_SetEndpointStatus(0, 1);
159 3 D12_SetEndpointStatus(1, 1);
160 3 bEPPflags.bits.control_state = USB_IDLE;
161 3
162 3 return;
163 3 }
164 2
165 2 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
166 2 ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
167 2 ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
168 2
169 2 // Acknowledge setup here to unlock in/out endp
170 2 //向控制输出端点发送应答建立命令以重新使能下一个建立阶段
171 2 D12_AcknowledgeEndpoint(0);
172 2 D12_AcknowledgeEndpoint(1);
173 2
174 2 ControlData.wLength = ControlData.DeviceRequest.wLength;
175 2 ControlData.wCount = 0;
176 2 //需要证实控制传输是控制读还是写,如果是读:
177 2 //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
178 2 //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 4
179 2 //模式即准备在主机发送请求时发送数据
180 2
181 2 if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
182 3 bEPPflags.bits.setup_packet = 1;
183 3 bEPPflags.bits.control_state = USB_IDLE; /* get command */
184 3 }
185 2 //如果是写
186 2 else {
187 3 if (ControlData.DeviceRequest.wLength == 0) {
188 4 bEPPflags.bits.setup_packet = 1;
189 4 bEPPflags.bits.control_state = USB_IDLE; /* set command */
190 4 }
191 3 else {
192 4 if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
193 5 bEPPflags.bits.control_state = USB_IDLE;
194 5 D12_SetEndpointStatus(0, 1);
195 5 D12_SetEndpointStatus(1, 1);
196 5 }
197 4 else {
198 5 bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
199 5 }
200 4 } // set command with data
201 3 } // else set command
202 2 } // if setup packet
203 1
204 1 else if (bEPPflags.bits.control_state == USB_RECEIVE) {
205 2 i = D12_ReadEndpoint(0, EP0_PACKET_SIZE,
206 2 ControlData.dataBuffer + ControlData.wCount);
207 2
208 2 ControlData.wCount += i;
209 2 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
210 3 bEPPflags.bits.setup_packet = 1;
211 3 bEPPflags.bits.control_state = USB_IDLE;
212 3 }
213 2 }
214 1
215 1 else {
216 2 bEPPflags.bits.control_state = USB_IDLE;
217 2 }
218 1
219 1 }
220 //----------------------------------
221 void ep0_txdone(void)
222 {
223 1 short i = ControlData.wLength - ControlData.wCount;
224 1
225 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
226 1
227 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
228 1 return;
229 1 //-------------------------
230 1 if( i >= EP0_PACKET_SIZE) {
231 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
232 2 ControlData.wCount += EP0_PACKET_SIZE;
233 2
234 2 bEPPflags.bits.control_state = USB_TRANSMIT;
235 2 }
236 1 else if( i != 0) {
237 2 D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
238 2 ControlData.wCount += i;
239 2
240 2 bEPPflags.bits.control_state = USB_IDLE;
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 5
241 2 }
242 1 else if (i == 0){
243 2 D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
244 2
245 2 bEPPflags.bits.control_state = USB_IDLE;
246 2 }
247 1
248 1 }
249 //----------------------------------
250 void ep1_txdone(void)
251 {
252 1 D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
253 1 }
254
255 void ep1_rxdone(void)
256 {
257 1 unsigned char len;
258 1
259 1 D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
260 1
261 1 len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
262 1
263 1 if(len != 0)
264 1 bEPPflags.bits.ep1_rxdone = 1;
265 1 }
266 //---------------------------------
267 void main_txdone(void)
268 {
269 1 unsigned char len;
270 1
271 1 D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
272 1
273 1 len = ioSize - ioCount;
274 1 if(len == 0) {
275 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
276 2 bEPPflags.bits.setup_dma ++;
277 2 else
278 2 bEPPflags.bits.dma_state = DMA_IDLE;
279 2 }
280 1 else {
281 2 if(len > 64)
282 2 len = 64;
283 2 if(bNoRAM)
284 2 len = D12_WriteEndpoint(5, len, EpBuf + ioCount);
285 2 else
286 2 len = D12_WriteEndpoint(5, len, MainEpBuf + ioCount);
287 2 ioCount += len;
288 2 }
289 1 }
290
291 void main_rxdone(void)
292 {
293 1 unsigned char len;
294 1
295 1 D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
296 1
297 1 if(bNoRAM)
298 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
299 1 else
300 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
301 1 ioCount += len;
302 1 if(bNoRAM)
C51 COMPILER V6.20c XXGISR 01/16/2003 10:36:17 PAGE 6
303 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
304 1 else
305 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
306 1 ioCount += len;
307 1 if(ioCount >= ioSize) {
308 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
309 2 bEPPflags.bits.setup_dma ++;
310 2 else
311 2 bEPPflags.bits.dma_state = DMA_IDLE;
312 2 }
313 1
314 1 }
315
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 859 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 256 ----
PDATA SIZE = ---- ----
DATA SIZE = 8 5
IDATA SIZE = 74 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -