⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpiflongxfr.lst

📁 本人自己编的usb数据采集固件,对四路信号进行采集
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -