?? mainloop.lst
字號(hào):
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MAINLOOP.OBJ
COMPILER INVOKED BY: D:\Program Files\Keilc7\C51\BIN\C51.EXE MAINLOOP.C BROWSE DEBUG OBJECTEXTEND
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: MainLoop.C
10 // Author: Wenkai Du
11 // Created: 19 Dec 97
12 // Modified:
13 // Revision: 3.0
14 //
15 //*************************************************************************
16 //
17 // 98/11/25 Added I/O access support on Main endpoints. (WK)
18 //*************************************************************************
19 */
20
21
22
23 #include <reg51.h> /* special function register declarations */
24
25 #include "epphal.h"
26 #include "d12ci.h"
27 #include "mainloop.h"
28 #include "usb100.h"
29 #include "chap_9.h"
30 #include "ISP.h"
31 /*
32 //*************************************************************************
33 // USB protocol function pointer arrays
34 //*************************************************************************
35 */
36 code void (*StandardDeviceRequest[])(void) =
37 {
38 get_status,
39 clear_feature,
40 reserved,
41 set_feature,
42 reserved,
43 set_address,
44 get_descriptor,
45 reserved,
46 get_configuration,
47 set_configuration,
48 get_interface,
49 set_interface,
50 reserved,
51 reserved,
52 reserved,
53 reserved
54 };
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 2
56 /*
57 //*************************************************************************
58 // Public static data
59 //*************************************************************************
60 */
61
62 extern EPPFLAGS bEPPflags;
63 extern unsigned char idata GenEpBuf[];
64 extern unsigned char idata EpBuf[];
65 //extern IO_REQUEST idata ioRequest;
66
67
68 CONTROL_XFER ControlData;
69
70
71 void init_special_interrupts(void)
72 {
73 1 EA=1;
74 1 EX1=1;
75 1 }
76
77 void init_port()
78 {
79 1 P0 = 0xFF;
80 1 P1 = 0xFF;
81 1 P2 = 0xFF;
82 1 P3 = 0xFF;
83 1 D12SUSPD = 0;
84 1 }
85
86 void init_flags()
87 {
88 1 // bEPPflags.bits.bus_reset=0;
89 1 // bEPPflags.bits.suspend=0;
90 1 bEPPflags.bits.setup_packet=0;
91 1 bEPPflags.bits.remote_wakeup=0;
92 1 bEPPflags.bits.in_isr=0;
93 1 bEPPflags.bits.control_state=0;
94 1 bEPPflags.bits.configuration=0;
95 1 bEPPflags.bits.ep1_rxdone=0;
96 1 bEPPflags.bits.main_rxdone=0;
97 1 }
98
99 void main(void)
100 {
101 1 init_port();
102 1 init_special_interrupts();
103 1 init_flags();
104 1 reconnect_USB();
105 1 while( TRUE )
106 1 {
107 2 /* if (bEPPflags.bits.bus_reset)
108 2 {
109 2 DISABLE;
110 2 bEPPflags.bits.bus_reset = 0;
111 2 ENABLE;
112 2 D12SUSPD = 1;
113 2 }
114 2 if (bEPPflags.bits.suspend)
115 2 {
116 2 DISABLE;
117 2 bEPPflags.bits.suspend= 0;
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 3
118 2 ENABLE;
119 2 if(D12SUSPD == 1)
120 2 {
121 2 D12SUSPD = 0;
122 2 P0 = 0xFF;
123 2 P1 = 0xFF;
124 2 P2 = 0xFF;
125 2 P3 = 0xFF;
126 2 D12SUSPD = 1;
127 2 PCON |= 0x02;
128 2 while (1);
129 2 }
130 2 } // if suspend change*/
131 2
132 2 if (bEPPflags.bits.setup_packet)
133 2 {
134 3 DISABLE;
135 3 bEPPflags.bits.setup_packet = 0;
136 3 ENABLE;
137 3 control_handler();
138 3 D12SUSPD = 1;
139 3 } // if setup_packet
140 2 if(bEPPflags.bits.configuration)
141 2 IspControl();
142 2 } // Main Loop
143 1
144 1 }
145
146 void stall_ep0(void)
147 {
148 1 D12_SetEndpointStatus(0, 1);
149 1 D12_SetEndpointStatus(1, 1);
150 1 }
151
152 void init_unconfig(void)
153 {
154 1 // unsigned char i;
155 1
156 1 D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
157 1 }
158
159 void init_config(void)
160 {
161 1 D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
162 1 }
163
164 void single_transmit(unsigned char * buf, unsigned char len)
165 {
166 1 if( len <= EP0_PACKET_SIZE) {
167 2 D12_WriteEndpoint(1, len, buf);
168 2 }
169 1 }
170
171 void code_transmit(unsigned char code * pRomData, unsigned short len)
172 {
173 1 ControlData.wCount = 0;
174 1 if(ControlData.wLength > len)
175 1 ControlData.wLength = len;
176 1
177 1 ControlData.pData = pRomData;
178 1 if( ControlData.wLength >= EP0_PACKET_SIZE) {
179 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 4
180 2 ControlData.wCount += EP0_PACKET_SIZE;
181 2
182 2 DISABLE;
183 2 bEPPflags.bits.control_state = USB_TRANSMIT;
184 2 ENABLE;
185 2 }
186 1 else {
187 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
188 2 ControlData.wCount += ControlData.wLength;
189 2 DISABLE;
190 2 bEPPflags.bits.control_state = USB_IDLE;
191 2 ENABLE;
192 2 }
193 1 }
194
195 void IspControl(void)
196 {
197 1 unsigned char a;
198 1 unsigned char time;
199 1 int Addr;
200 1 unsigned char i;
201 1 unsigned char j;
202 1 unsigned char nBit;
203 1 while(!bEPPflags.bits.ep1_rxdone)
204 1 {}
205 1 DISABLE;
206 1 bEPPflags.bits.ep1_rxdone = 0;
207 1 ENABLE;
208 1 a=GenEpBuf[0];
209 1 PreparePro();
210 1 switch(a)
211 1 {
212 2 case 0:
213 2 Erase();
214 2 GenEpBuf[0]=1;
215 2 D12_WriteEndpoint(3,4, GenEpBuf);
216 2 GenEpBuf[0]=0;
217 2 break;
218 2 case 1:
219 2 time=GenEpBuf[1];
220 2 for(i=0;i<time;i++)
221 2 {
222 3 while(!bEPPflags.bits.main_rxdone)
223 3 {}
224 3 DISABLE;
225 3 bEPPflags.bits.main_rxdone = 0;
226 3 ENABLE;
227 3 D12SUSPD=1;
228 3 for(j=0;j<64;j++)
229 3 {
230 4 Addr=j+i*64;
231 4 Write(EpBuf[j],Addr);
232 4 if(Read(Addr)!=EpBuf[j])
233 4 {
234 5 GenEpBuf[0]=2;
235 5 D12_WriteEndpoint(3,4, GenEpBuf);
236 5 GenEpBuf[0]=0;
237 5 return;
238 5 }
239 4 }
240 3 D12SUSPD=0;
241 3 GenEpBuf[0]=1;
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 5
242 3 D12_WriteEndpoint(3,4, GenEpBuf);
243 3 GenEpBuf[0]=0;
244 3 }
245 2 break;
246 2 case 2:
247 2 time=GenEpBuf[1];
248 2 for(i=0;i<time;i++)
249 2 {
250 3 for(j=0;j<64;j++)
251 3 {
252 4 Addr=j+i*64;
253 4 EpBuf[j]=Read(Addr);
254 4 }
255 3 D12_WriteEndpoint(5,64,EpBuf);
256 3 GenEpBuf[0]=1;
257 3 D12_WriteEndpoint(3,4, GenEpBuf);
258 3 }
259 2 GenEpBuf[0]=0;
260 2 break;
261 2 case 3:
262 2 ReadSign(GenEpBuf);
263 2 if(GenEpBuf[0]==0)
264 2 GenEpBuf[0]=2;
265 2 D12_WriteEndpoint(3,4, GenEpBuf);
266 2 GenEpBuf[0]=0;
267 2 break;
268 2 case 4:
269 2 nBit=GenEpBuf[1];
270 2 LockBit(nBit);
271 2 GenEpBuf[0]=1;
272 2 D12_WriteEndpoint(3,4, GenEpBuf);
273 2 GenEpBuf[0]=0;
274 2 break;
275 2 }
276 1 ProOver();
277 1 }
278
279 void control_handler()
280 {
281 1 unsigned char type, req;
282 1
283 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
284 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
285 1 if (type == USB_STANDARD_REQUEST)
286 1 (*StandardDeviceRequest[req])();
287 1 else
288 1 stall_ep0();
289 1 }
290
291 void reconnect_USB(void)
292 {
293 1 D12SUSPD = 0;
294 1 disconnect_USB();
295 1 connect_USB();
296 1 }
297
298 void disconnect_USB(void)
299 {
300 1 // Initialize D12 configuration
301 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
302 1 }
303
C51 COMPILER V7.02a MAINLOOP 09/20/2005 15:10:00 PAGE 6
304 void connect_USB(void)
305 {
306 1 D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
307 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
308 1 }
309
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 712 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -