📄 mainloop.lst
字号:
217 2 MCU_LED1 = !(GenEpBuf[3] & 0x2);
218 2 }
219 1 }
220 //--------------------------
221 void init_unconfig(void)
222 {
223 1 //unsigned char i;
224 1
225 1 D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
226 1 }
227
228 void init_config(void)
229 {
230 1 D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
231 1 }
232 //--------------------------
233
234 void single_transmit(unsigned char * buf, unsigned char len)
235 {
236 1 if( len <= EP0_PACKET_SIZE)
237 1 {
238 2 D12_WriteEndpoint(1, len, buf);
239 2 }
240 1 }
241
C51 COMPILER V7.01 MAINLOOP 09/27/2003 23:46:51 PAGE 5
242 void code_transmit(unsigned char code * pRomData, unsigned short len)
243 {
244 1 ControlData.wCount = 0;
245 1 if(ControlData.wLength > len)
246 1 {
247 2 ControlData.wLength = len;
248 2 }
249 1 ControlData.pData = pRomData;
250 1 if( ControlData.wLength >= EP0_PACKET_SIZE)
251 1 { // 如果发送代码大于包长度
252 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
253 2 ControlData.wCount += EP0_PACKET_SIZE;
254 2
255 2 DISABLE;
256 2 bEPPflags.bits.control_state = USB_TRANSMIT;
257 2 ENABLE;
258 2 }
259 1 else
260 1 { //发送代码小于包长度
261 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
262 2 ControlData.wCount += ControlData.wLength;
263 2 DISABLE;
264 2 bEPPflags.bits.control_state = USB_IDLE;
265 2 ENABLE;
266 2 }
267 1 }
268
269 //---------------------------
270 void setup_dma()
271 {
272 1 ioSize = ioRequest.uSize;
273 1 ioCount = 0;
274 1
275 1 DISABLE;
276 1 bEPPflags.bits.dma_state = DMA_RUNNING;
277 1 ENABLE;
278 1
279 1 single_transmit(0, 0);
280 1
281 1 if(ioRequest.bCommand & 0x1)
282 1 {
283 2 if(ioSize > 64 || ioSize == 0)
284 2 {
285 3 //if(bNoRAM)
286 3 D12_WriteEndpoint(5, 64, EpBuf);
287 3 //else
288 3 // D12_WriteEndpoint(5, 64, MainEpBuf);
289 3 ioCount += 64;
290 3 }
291 2 else
292 2 {
293 3 //if(bNoRAM)
294 3 D12_WriteEndpoint(5, ioSize, EpBuf);
295 3 //else
296 3 // D12_WriteEndpoint(5, ioSize, MainEpBuf);
297 3 ioCount += ioSize;
298 3 }
299 2 }
300 1 }
301
302 //------------------------------
303 void control_handler()
C51 COMPILER V7.01 MAINLOOP 09/27/2003 23:46:51 PAGE 6
304 {
305 1 unsigned char type, req;
306 1
307 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
308 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; //0x0F
309 1
310 1 if (type == USB_STANDARD_REQUEST)
311 1 {
312 2 (*StandardDeviceRequest[req])();
313 2 }
314 1 else if (type == USB_VENDOR_REQUEST)
315 1 {
316 2 (*VendorDeviceRequest[req])();
317 2 }
318 1 else
319 1 {
320 2 stall_ep0();
321 2 }
322 1 }
323
324
325
326 void main()
327 {
328 1 // unsigned char key, i;
329 1 //bNoRam=1;
330 1
331 1 init_port();
332 1 init_serial();
333 1 init_timer0();
334 1 EA = 1;
335 1 //for test
336 1 MCU_LED0=0;
337 1 MCU_LED1=0;
338 1 MCU_LED0=1;
339 1 MCU_LED1=1;
340 1 //--------------
341 1 printf("LQBD12 USB board Version3.0\n");
342 1 IE0=0;
343 1 IT0=0;
344 1 EX0=1;
345 1 MCU_D12CS = 0x1;
346 1
347 1 bNoRAM = TRUE;
348 1
349 1 MCU_D12CS = 0x0;
350 1
351 1 reconnect_USB();
352 1
353 1 while( TRUE )
354 1 {
355 2 SBUF= 0xAA;
356 2 if (bEPPflags.bits.timer)
357 2 {
358 3 DISABLE;
359 3 bEPPflags.bits.timer = 0;
360 3 ENABLE;
361 3
362 3 if(bEPPflags.bits.configuration)
363 3 check_key_LED();
364 3 }
365 2
C51 COMPILER V7.01 MAINLOOP 09/27/2003 23:46:51 PAGE 7
366 2 if (bEPPflags.bits.bus_reset)
367 2 {
368 3 DISABLE;
369 3 bEPPflags.bits.bus_reset = 0;
370 3 ENABLE;
371 3 // Release D12's SUSPEND pin after bus reset
372 3 // Enable 74HCT123 pulse generation before disconnect
373 3 ///D12SUSPD = 1;
374 3 D12SUSPD=0;
375 3 } // if bus reset
376 2
377 2 if (bEPPflags.bits.suspend)
378 2 {
379 3 DISABLE;
380 3 bEPPflags.bits.suspend= 0;
381 3 ENABLE;
382 3
383 3 if(D12SUSPD == 1)
384 3 {
385 4 D12SUSPD = 0;
386 4 P0 = 0xFF;
387 4 P1 = 0xFF;
388 4 P2 = 0xFF;
389 4 P3 = 0xFF;
390 4 D12_SetDMA(0xC3);
391 4 D12SUSPD = 1;
392 4 PCON |= 0x02;
393 4 while (1);
394 4
395 4 }
396 3
397 3 } // if suspend change
398 2
399 2 if (bEPPflags.bits.setup_packet)
400 2 {
401 3 DISABLE;
402 3 bEPPflags.bits.setup_packet = 0;
403 3 ENABLE;
404 3 control_handler();
405 3 //D12SUSPD = 1;
406 3 D12SUSPD=0;
407 3 } // if setup_packet
408 2
409 2 if(bEPPflags.bits.setup_dma != 0)
410 2 {
411 3 DISABLE;
412 3 bEPPflags.bits.setup_dma --;
413 3 ENABLE;
414 3 setup_dma();
415 3 } // if setup_dma
416 2
417 2 } // Main Loop
418 1
419 1 on_exit();
420 1 //=======================================
421 1
422 1 }
423
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 740 ----
C51 COMPILER V7.01 MAINLOOP 09/27/2003 23:46:51 PAGE 8
CONSTANT SIZE = 148 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -