📄 usb_main.lst
字号:
260 1
261 1 ControlData.pData = pRomData;
262 1 if( ControlData.wLength >= EP0_PACKET_SIZE) { // 如果发送代码大于包长度
263 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
264 2 ControlData.wCount += EP0_PACKET_SIZE;
265 2
266 2 DISABLE;
267 2 bEPPflags.bits.control_state = USB_TRANSMIT;
268 2 ENABLE;
269 2 }
270 1 else { //发送代码小于包长度
271 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
272 2 ControlData.wCount += ControlData.wLength;
273 2 DISABLE;
274 2 bEPPflags.bits.control_state = USB_IDLE;
275 2 ENABLE;
276 2 }
277 1 }
278
279 //---------------------------
280
281 void setup_dma()
282 {
283 1 ioSize = ioRequest.uSize;
284 1 ioCount = 0;
285 1
286 1 DISABLE;
287 1 bEPPflags.bits.dma_state = DMA_RUNNING;
288 1 ENABLE;
289 1
290 1 single_transmit(0, 0);
291 1
292 1 if(ioRequest.bCommand & 0x1) {
293 2 if(ioSize > 64 || ioSize == 0) {
294 3 //if(bNoRAM)
295 3 D12_WriteEndpoint(5, 64, EpBuf);
296 3 //else
297 3 // D12_WriteEndpoint(5, 64, MainEpBuf);
298 3 ioCount += 64;
299 3 }
300 2 else {
301 3 //if(bNoRAM)
302 3 D12_WriteEndpoint(5, ioSize, EpBuf);
303 3 //else
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 6
304 3 // D12_WriteEndpoint(5, ioSize, MainEpBuf);
305 3 ioCount += ioSize;
306 3 }
307 2 }
308 1 }
309
310 //------------------------------
311 void control_handler()
312 {
313 1 unsigned char type, req;
314 1
315 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
316 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; //0x0F
317 1
318 1 //help_devreq(type, req); // print out device request
319 1
320 1 if (type == USB_STANDARD_REQUEST)
321 1 (*StandardDeviceRequest[req])();
322 1 else if (type == USB_VENDOR_REQUEST)
323 1 (*VendorDeviceRequest[req])();
324 1 else
325 1 stall_ep0();
326 1
327 1 }
328
329
330 //-------------------------------------------
331
332 //-------------------------------------------
333
334 void main()
335 {
336 1 unsigned char i;
337 1 //bNoRam=1;
338 1 //DISABLE;
339 1 init_port();
340 1
341 1 init_timer0();
342 1 EA = 0;
343 1 //for test
344 1 MCU_LED0=0;
345 1 MCU_LED1=0;
346 1 MCU_LED0=1;
347 1 MCU_LED1=1;
348 1
349 1 IE1=0;
350 1 IT1=0;
351 1 EX1=1;
352 1
353 1
354 1 //-----------------------
355 1
356 1 //for(i = 0; i < 16; i ++)
357 1 // MainEpBuf[i] = i;
358 1 //for(i = 0; i < 16; i ++) {
359 1 // if(MainEpBuf[i] != i)
360 1 // break;
361 1 // }
362 1 //if(i < 16)
363 1 bNoRAM = FALSE;
364 1 //else
365 1 // bNoRAM = FALSE;
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 7
366 1
367 1 //--------------------------
368 1 //bNoRam=TRUE;
369 1 //---------------------------
370 1
371 1 //----------------------------
372 1 /*
373 1 if(MCU_SWM0 == 0 && MCU_SWM1 == 0) {
374 1 MCU_D12RST = 0;
375 1 MCU_D12RST = 1;
376 1 D12_SetDMA(0x0);
377 1 }
378 1 */
379 1 //if((i = D12_GetDMA()) == 0xC3)
380 1 // {D12_SendResume();}
381 1 //else {
382 1 // bEPPflags.value = 0;
383 1
384 1 /* Power on reset, lightup LEDs for 1 sec,
385 1 disconnect and reconnect Soft-Connect */
386 1 //printf("\nPDIUSBD12 SMART evaluation board firmware V3.0.\n");
387 1 i=D12_ReadInterruptRegister();
388 1 i=0;
389 1 //i=D12_ReadEndpointStatus(0);
390 1 i=D12_ReadLastTransactionStatus(0);
391 1 i=D12_ReadLastTransactionStatus(1);
392 1 i=D12_ReadLastTransactionStatus(2);
393 1 i=D12_ReadLastTransactionStatus(3);
394 1 i=D12_ReadLastTransactionStatus(4);
395 1 i=D12_ReadLastTransactionStatus(5);
396 1 ENABLE;
397 1 reconnect_USB();
398 1 ENABLE;
399 1 // }
400 1 //=======================================
401 1 /* Main program loop */
402 1
403 1 while( TRUE ){
404 2
405 2 if (bEPPflags.bits.timer)
406 2 {
407 3 DISABLE;
408 3 bEPPflags.bits.timer = 0;
409 3 ENABLE;
410 3
411 3 if(bEPPflags.bits.configuration)
412 3 check_key_LED();
413 3 }
414 2
415 2 if (bEPPflags.bits.bus_reset)
416 2 {
417 3 DISABLE;
418 3 bEPPflags.bits.bus_reset = 0;
419 3 ENABLE;
420 3 // Release D12's SUSPEND pin after bus reset
421 3 // Enable 74HCT123 pulse generation before disconnect
422 3 ///D12SUSPD = 1;
423 3 D12SUSPD=0;
424 3 } // if bus reset
425 2
426 2 if (bEPPflags.bits.suspend)
427 2 {
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 8
428 3 DISABLE;
429 3 bEPPflags.bits.suspend= 0;
430 3 ENABLE;
431 3
432 3 if(D12SUSPD == 1) {
433 4 D12SUSPD = 0;
434 4 P0 = 0xFF;
435 4 P1 = 0xFF;
436 4 P2 = 0xFF;
437 4 P3 = 0xFF;
438 4 D12_SetDMA(0xC3);
439 4 D12SUSPD = 1;
440 4 PCON |= 0x02;
441 4 while (1);
442 4
443 4 }
444 3
445 3 } // if suspend change
446 2
447 2 if (bEPPflags.bits.setup_packet){
448 3 DISABLE;
449 3 bEPPflags.bits.setup_packet = 0;
450 3 ENABLE;
451 3 control_handler();
452 3 //D12SUSPD = 1;
453 3 D12SUSPD=0;
454 3 } // if setup_packet
455 2
456 2 if(bEPPflags.bits.setup_dma != 0)
457 2 {
458 3 DISABLE;
459 3 bEPPflags.bits.setup_dma --;
460 3 ENABLE;
461 3 setup_dma();
462 3 } // if setup_dma
463 2
464 2 } // Main Loop
465 1
466 1 //on_exit();
467 1 //=======================================
468 1
469 1 }
470
471
472 //zaq
473 //P57命令接口-D12CI.C
474 //===============================================================
475 //===============================================================
476 //---------------------------------
477 void outportcmd(unsigned char value)
478 {
479 1
480 1 // unsigned char xdata *ext_address;
481 1 // ext_address=D12_COMMAND;
482 1 // *ext_address = value; // write cycle
483 1 // *((INT8 xdata *)D12_command) = val;
484 1 //*/
485 1 //unsigned char xdata *exAddress;
486 1 // exAddress = nPort;
487 1 // *exAddress = nVal;
488 1
489 1 *((unsigned char xdata *)D12_COMMAND)=value;
C51 COMPILER V6.23a USB_MAIN 12/24/2005 14:35:50 PAGE 9
490 1 }
491 void outportdata(unsigned char value)
492 {
493 1
494 1 *((unsigned char xdata *)D12_DATA)=value;
495 1 }
496
497 unsigned char inportb(void)
498 {
499 1
500 1 return *((unsigned xdata *)D12_DATA);
501 1 }
502
503 //--------------------------
504 //初始化命令-D0H
505 void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
506 {
507 1 if(bEPPflags.bits.in_isr == 0)
508 1 DISABLE;
509 1
510 1 outportcmd(0xD0);
511 1 if(bEnable)
512 1 bAddress |= 0x80;
513 1 outportdata(bAddress);
514 1
515 1 if(bEPPflags.bits.in_isr == 0)
516 1 ENABLE;
517 1 }
518
519 void D12_SetEndpointEnable(unsigned char bEnable)
520 {
521 1 if(bEPPflags.bits.in_isr == 0)
522 1 DISABLE;
523 1
524 1 outportcmd(0xD8);
525 1 if(bEnable)
526 1 outportdata(1);
527 1 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -