📄 gpiflongxfr.lst
字号:
408 1
409 1 for(i=R_STEP1;i>0;i--)
410 1 for(j=R_STEP3;j>0;j--)
411 1 for(k=R_STEP2;k>0;k--)
412 1 {
413 2 IOA^=0x01;//CPL IOA.0(O_STEP)
414 2 for(l=R_SPEED;l>0;l--);
415 2 IOA^=0x01;//CPL IOA.0(O_STEP)
416 2 for(l=R_SPEED;l>0;l--);
417 2 }
418 1 IOA|=0x08;//SETB O_SWITCH
419 1 }
420
421 void SUB_F1(void)
422 {
423 1 BYTE i,j,k,l;
424 1 for(i=R_LENGTH;i>0;i--)
425 1 {
426 2 IOA&=0xF7;//CLR O_SWITCH
427 2 for(j=R_TIME1;j>0;j--)
428 2 {
429 3 for(l=100;l>0;l--)
430 3 {
431 4 for(k=R_TIME2;k>0;k--);
432 4 for(k=R_TIME2;k>0;k--);
433 4 }
434 3 }
435 2 if(!S_SWITCH)//根据S_SWITCH标志决定是否关闭电子开关
C51 COMPILER V6.10 GPIFLONGXFR 07/07/2005 13:31:08 PAGE 9
436 2 {
437 3 IOA|=0x08;//SETB O_SWITCH
438 3 }
439 2 for(j=R_STEP1;j>0;j--)
440 2 {
441 3 for(k=R_STEP2;k>0;k--)
442 3 {
443 4 IOA^=0x01;//CPL O_STEP(IOA.0)
444 4 for(l=R_SPEED;l>0;l--);
445 4 IOA^=0x01;//CPL O_STEP(IOA.0)
446 4 for(l=R_SPEED;l>0;l--);
447 4 //没有STOP中断
448 4 }
449 3 }
450 2 }
451 1 IOA|=0x08;//SETB O_SWITCH
452 1 }
453 //////////////////////////////////////////////////////////////////
-////////////
454
455 BOOL DR_VendorCmnd( void )
456 {
457 1 switch( SETUPDAT[ 1 ] )
458 1 {
459 2 case VX_A2:
460 2 { // Get status of peripheral function, by doing a GPIF singl
-e read transaction
461 3 // using register(s) in XDATA space, dummy read
462 3 SYNCDELAY;
463 3 GPIFIDLECTL=0xFD;
464 3 SYNCDELAY;
465 3 while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bi
-t
466 3 {
467 4 }
468 3 *EP0BUF = XGPIFSGLDATLX; // trigger GPIF single byte r
-ead transaction
469 3 while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done b
-it
470 3 {
471 4 }
472 3 // EP0BUF[0]=XGPIFSGLDATH;
473 3 EP0BUF[0] = XGPIFSGLDATLNOX; // ...GPIF reads byte from PERIP
-HERAL
474 3 EP0BCH = 0;
475 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
476 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
477 3 return( FALSE );
478 3 break;
479 3 }
480 2 case VX_A3:
481 2 { // Tell peripheral we're going into HS mode, by doing a GP
-IF single write transaction
482 3 while( !( GPIFTRIG & 0x80 ) ) // Poll GPIFTRIG.7 Done b
-it
483 3 {
484 4 }
485 3 XGPIFSGLDATLX = 0xA3; // Trigger GPIF
486 3 *EP0BUF = 0xA3;
487 3 EP0BCH = 0;
C51 COMPILER V6.10 GPIFLONGXFR 07/07/2005 13:31:08 PAGE 10
488 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
489 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
490 3 break;
491 3 }
492 2 case VX_A7:
493 2 { // Setup peripheral for high speed FIFO xfr(s), TC=8 byt
-es
494 3 EP6GPIFTCH = 0x00; // setup transaction count
495 3 EP6GPIFTCL = 0x40; // set EP8GPIFTC = 8
496 3 *EP0BUF = 0xA7;
497 3 EP0BCH = 0;
498 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
499 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
500 3 break;
501 3 }
502 2 case VX_A8:
503 2 { // Do a FIFO Rd transaction w/TC=8 into EP8
504 3 if( !( EP2468STAT & 0x20 ) )
505 3 { // EP8FF=0, when buffer is available...
506 4 // trigger FIFO read transaction(s), using SFR
507 4 while( !( GPIFTRIG & 0x80 ) ) // Poll GPIFTRIG.7 Done
-bit
508 4 {
509 5 }
510 4 GPIFTRIG = GPIFTRIGRD | GPIF_EP6; // R/W=1, EP[1:0]=FIFO_
-EpNum for EPx read(s)
511 4 *EP0BUF = 0xA8; // return that there was a buffe
-r available
512 4 }
513 3 else
514 3 { // If EP busy then host is behind...
515 4 *EP0BUF = 0x00; // Buffer space wasn't available
- and we still have
516 4 // two buffers containing data
517 4 }
518 3 EP0BCH = 0;
519 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
520 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
521 3 break;
522 3 }
523 2 case VX_AC:
524 2 { // manually commit IN data to host...
525 3 // GPIF needs to still be pointing to EP8, last
-FIFO accessed
526 3 if( EP2468STAT & 0x20 )
527 3 { // EP6F=1 when buffer is not available
528 4 *EP0BUF = 0x00; // buffer wasn't available
529 4 }
530 3 else
531 3 { // EP8F=0 when buffer is available
532 4 INPKTEND = 0x06; // 8051 commits pkt by writing
-#8 to INPKTEND
533 4 *EP0BUF = 0xAC;
534 4 }
535 3 EP0BCH = 0;
536 3 EP0BCL = 1; // Arm endpoint with # bytes to
C51 COMPILER V6.10 GPIFLONGXFR 07/07/2005 13:31:08 PAGE 11
- transfer
537 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase
-of device request
538 3 break;
539 3 }
540 2 case VX_C5:
541 2 { // read REVCTL register
542 3 HighAddr=0xAAAA;
543 3 EP0BUF[0]=LSB(HighAddr>>3);
544 3 EP0BUF[1]=MSB(HighAddr>>3);
545 3 EP0BCH = 0;
546 3 EP0BCL = 2; // Arm endpoint with # bytes t
-o transfer
547 3 EP0CS |= bmHSNAK;
548 3 return( FALSE );
549 3 break;
550 3 }
551 2 case VX_D0:
552 2 { // read live GPIF address
553 3 EP0BUF[0] = VX_D0;
554 3 SYNCDELAY;
555 3 EP0BUF[3]=GPIFADRH;
556 3 SYNCDELAY;
557 3 EP0BUF[4]=GPIFADRL;
558 3 EP0BUF[2]=IOD;
559 3 EP0BUF[1]=IOE;
560 3 EP0BCH = 0;
561 3 EP0BCL = 5; // Arm endpoint with # bytes t
-o transfer
562 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase
- of device request
563 3
564 3 return( FALSE ); // no error; command handled OK
565 3 break;
566 3 }
567 2 case VX_D1:
568 2 { // setup GPIF transaction count
569 3 xfrvia_TD_Poll = 1;
570 3 in_token_event=0;
571 3 //ledX_rdvar = LED0_ON; // LED0 is ON: GPIF triggered in TD
-_POll
572 3 *EP0BUF = 0xD1;
573 3 EP0BCH = 0;
574 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
575 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
576 3 break;
577 3 }
578 2 case VX_D2:
579 2 {
580 3 xfrvia_TD_Poll = 0;
581 3 in_token_event=1;
582 3 //ledX_rdvar = LED0_OFF; // LED0 is OFF: GPIF not triggered
-in TD_Poll
583 3 *EP0BUF = 0xD2;
584 3 EP0BCH = 0;
585 3 EP0BCL = 1; // Arm endpoint with # bytes to
-transfer
586 3 EP0CS |= bmHSNAK; // Acknowledge handshake phase o
-f device request
587 3 break;
C51 COMPILER V6.10 GPIFLONGXFR 07/07/2005 13:31:08 PAGE 12
588 3 }
589 2 case VX_E0://握手
590 2 {
591 3 *EP0BUF=VX_E0;
592 3 break;
593 3 }
594 2 case VX_E1://电子开关 EP0BUF[1]=0x00关闭,EP0BUF【1】=0x01打开
595 2 {
596 3 if(EP0BUF[1]&0x01)
597 3 IOA &=0xF7;//IOA.3=0
598 3 else
599 3 IOA |=0x08;//IOA.3=1
600 3 *EP0BUF=VX_E1;
601 3 break;
602 3 }
603 2 case VX_E2:
604 2 //电机行进,四个字节命令,EP0BUF【0】为原始命令,EP0BUF【1】存储设
-置信息,
605 2 //EP0BUF【2】控制电机速度(延时参数),EP0BUF【3】为行进步数
606 2 //EP0BUF【1】.0设置方向O_DIR,EP0BUF【1】。1设置电子开关O_SWITCH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -