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

📄 fx2_full.c

📁 USB开发的一些代码!适用于EX-USBFX2平台!这些源码还是蛮不错的!
💻 C
📖 第 1 页 / 共 2 页
字号:
	  break;
    }
    case VX_B7: // read Speed
	{	  
      EP0BUF[0] = VX_B7;
	  SYNCDELAY;
	  EP0BUF[1] = EZUSB_HIGHSPEED( );
 	  SYNCDELAY;
	  EP0BUF[2] = enum_high_speed;
 	  SYNCDELAY;
  	  EP0BCH = 0;
	  EP0BCL = 3;
	  EP0CS |= bmHSNAK;
	  break;
    }
    case VX_B8: // read EP6 State
	{	  
      EP0BUF[0] = VX_B8;
	  SYNCDELAY;
	  EP0BUF[1] = EP6FIFOBCH;
 	  SYNCDELAY;
	  EP0BUF[2] = EP6FIFOBCL;
 	  SYNCDELAY;
	  EP0BUF[3] = EP6CS;
 	  SYNCDELAY;
	  EP0BUF[4] = EP6FIFOFLGS;
 	  SYNCDELAY;
	  EP0BUF[5] = EP6FIFOPFH;
 	  SYNCDELAY;
	  EP0BUF[6] = EP6FIFOPFL;
 	  SYNCDELAY;
  	  EP0BCH = 0;
	  EP0BCL = 7;
	  EP0CS |= bmHSNAK;
	  break;
    }
    case VX_B9: // read EP2 State
	{	  
      EP0BUF[0] = VX_B9;
	  SYNCDELAY;
	  EP0BUF[1] = EP2FIFOBCH;
 	  SYNCDELAY;
	  EP0BUF[2] = EP2FIFOBCL;
 	  SYNCDELAY;
	  EP0BUF[3] = EP2CS;
 	  SYNCDELAY;
	  EP0BUF[4] = EP2FIFOFLGS;
 	  SYNCDELAY;
	  EP0BUF[5] = EP2FIFOPFH;
 	  SYNCDELAY;
	  EP0BUF[6] = EP2FIFOPFL;
 	  SYNCDELAY;
  	  EP0BCH = 0;
	  EP0BCL = 7;
	  EP0CS |= bmHSNAK;
	  break;
    }
 
	case VX_BA:
	  
	  {

	  {//IOC.2: LATCH, IOC.0: CLK, IOC.1: DATA, IOC.3: Reset
	  int i;
	  int d;

	  d = SETUPDAT[2];
	  d <<= 6;
	
	  IOC |= 0xFC;

	  
	  for (i = 0; i < 8; i ++)
		;
	  IOC &= 0xFB;  //set LATCH low
	  for (i = 0; i < 10; i ++)
		{
		IOC &= 0xFE;  //set CLK low
	
		if (d & 0x8000) //set DATA
		  IOC |= 0x2;
		else
		  IOC &= 0xFD;
	
		IOC &= 0xFE;  //set CLK low
		IOC &= 0xFE;  //set CLK low
		IOC &= 0xFE;  //set CLK low
		IOC |= 0x1;   //set CLK high
		IOC |= 0x1;   //set CLK high
		IOC |= 0x1;   //set CLK high
	
		d <<= 1;
		}

	  IOC |= 0xFC;  //set LATCH high
	  }
	
	  EP0BUF[0] = VX_BA;
	  SYNCDELAY;
	  EP0BUF[1] = SETUPDAT[2];
 	  SYNCDELAY;
  	  EP0BCH = 0;
	  EP0BCL = 2;
	  EP0CS |= bmHSNAK;
	  break;
	  }


  	case VX_BB:
	  {
	  {//IOC.2: LATCH, IOC.0: CLK, IOC.1: DATA, IOC.4: Reset
	  int i;
	  int d;

	  d = 0x100 | SETUPDAT[2];
	  d <<= 6;
	
	  IOC |= 0xFC;
	  for (i = 0; i < 8; i ++)
		;
	  IOC &= 0xFB;  //set LATCH low
	  for (i = 0; i < 10; i ++)
		{
		IOC &= 0xFE;  //set CLK low
	
		if (d & 0x8000) //set DATA
		  IOC |= 0x2;
		else
		  IOC &= 0xFD;
	
		IOC &= 0xFE;  //set CLK low
		IOC &= 0xFE;  //set CLK low
		IOC &= 0xFE;  //set CLK low
		IOC |= 0x1;   //set CLK high
		IOC |= 0x1;   //set CLK high
		IOC |= 0x1;   //set CLK high
	
		d <<= 1;
		}
	  IOC |= 0xFC;  //set LATCH high
	  }
	
	  EP0BUF[0] = VX_BB;
	  SYNCDELAY;
	  EP0BUF[1] = SETUPDAT[2];
 	  SYNCDELAY;
  	  EP0BCH = 0;
	  EP0BCL = 2;
	  EP0CS |= bmHSNAK;
	  break;
	  }
	  
	  
	  //liuyunxiang
	  case VX_BE_CONF_START:
		{
			conf_start = TRUE;
			xfer_times = (SETUPDAT[2] << 8) + SETUPDAT[3];
			//xfer_times = 488;
			times_xfered = 0;
			
  		EP2FIFOCFG &= 0xE7;		//configure ep2fifo as manual mode                   
		  SYNCDELAY;                    
			
			*EP0BUF = CONF_START_SUCCESS;
	  	EP0BCH = 0;
	  	EP0BCL = 1;                   // Arm endpoint with # bytes to transfer
	  	EP0CS |= bmHSNAK;             // Acknowledge handshake phase of device request
			break;
		}

/*
      {
		OEC |= 0x0F;  //Enable the PC0/PC1(PC0:CLK   PC1:SDI)
		OEA &= 0xFB;  //Enable the PA2
//		IOA &= 0x00;  //
        
		///Followed codes testing the RESET function
//		IOC |= 0xF7;  // Enable reset
//		EZUSB_Delay(1);
//		IOC |= 0x08;  // Return reset to high
		///The codes above testing the RESET function

		///Followed codes testing the variable digital potentiometer
		IOC &= 0xFB;  //Enable CS(LOW, PC2) 0xFB=0x11111011

        IOC &= 0xFC;  //Clean
		IOC &= 0xFC;  //Set SDI A1=0 (Enable channel 2)(0x1111 1100)
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC |= 0x02;  //Set SDI A0=1 (Enable channel 2)
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D7=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC |= 0x02;  //Set SDI D6=1
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D5=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D4=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D3=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D2=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D1=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D0=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean 

		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)
		IOC |= 0x04;  //Return CS to High (to store the value in VR)













		IOC &= 0xFB;  //Enable CS(LOW, PC2) 0xFB=0x11111011
		IOC &= 0xFB;  //Enable CS(LOW, PC2) 0xFB=0x11111011
		IOC &= 0xFB;  //Enable CS(LOW, PC2) 0xFB=0x11111011
		IOC &= 0xFB;  //Enable CS(LOW, PC2) 0xFB=0x11111011

		IOC &= 0xFC;  //Clean
		IOC &= 0xFC;  //Set SDI A1=0 (Enable channel 1)(0x1111 1100)
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Clean
		IOC &= 0xFC;  //Set SDI A0=0 (Enable channel 1)(0x1111 1100)
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

 		IOC &= 0xFC;  //Set SDI D7=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean


		IOC &= 0xFC;  //Set SDI D6=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D5=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D4=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D3=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

        IOC |= 0x02;  //Set SDI D2=1
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC |= 0x02;  //Set SDI D1=1
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean

		IOC &= 0xFC;  //Set SDI D0=0
		IOC |= 0x01;  //CLK
		IOC |= 0x01;
		IOC &= 0xFC;  //Clean 

		IOC |= 0x04;  //Return CS to High (to store the value in VR)

        ///Show the feedback info
		EP0BUF[0] = VX_BA;
	    SYNCDELAY;
	    EP0BUF[1] = GPIFREADYSTAT;
 	    SYNCDELAY;
  	    EP0BCH = 0;
	    EP0BCL = 2;
	    EP0CS |= bmHSNAK;
	    break;
	}
*/		
     default:
        return(TRUE);
  }

  return(FALSE);
}

//-----------------------------------------------------------------------------
// USB Interrupt Handlers
//   The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------

// Setup Data Available Interrupt Handler
void ISR_Sudav(void) interrupt 0
{
   GotSUD = TRUE;            // Set flag
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUDAV;         // Clear SUDAV IRQ
}

// Setup Token Interrupt Handler
void ISR_Sutok(void) interrupt 0
{
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUTOK;         // Clear SUTOK IRQ
}

void ISR_Sof(void) interrupt 0
{
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSOF;            // Clear SOF IRQ
}

void ISR_Ures(void) interrupt 0
{
   // whenever we get a USB reset, we should revert to full speed mode
   pConfigDscr = pFullSpeedConfigDscr;
   ((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
   pOtherConfigDscr = pHighSpeedConfigDscr;
   ((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;

   EZUSB_IRQ_CLEAR();
   USBIRQ = bmURES;         // Clear URES IRQ
}

void ISR_Susp(void) interrupt 0
{
   Sleep = TRUE;
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUSP;
}

void ISR_Highspeed(void) interrupt 0
{
   if (EZUSB_HIGHSPEED())
   {
      pConfigDscr = pHighSpeedConfigDscr;
      ((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
      pOtherConfigDscr = pFullSpeedConfigDscr;
      ((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;
   }

   EZUSB_IRQ_CLEAR();
   USBIRQ = bmHSGRANT;
}
void ISR_Ep0ack(void) interrupt 0
{
}
void ISR_Stub(void) interrupt 0
{
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2inout(void) interrupt 0
{
}
void ISR_Ep4inout(void) interrupt 0
{
}
void ISR_Ep6inout(void) interrupt 0
{
}
void ISR_Ep8inout(void) interrupt 0
{
}
void ISR_Ibn(void) interrupt 0
{
}
void ISR_Ep0pingnak(void) interrupt 0
{
}
void ISR_Ep1pingnak(void) interrupt 0
{
}
void ISR_Ep2pingnak(void) interrupt 0
{
}
void ISR_Ep4pingnak(void) interrupt 0
{
}
void ISR_Ep6pingnak(void) interrupt 0
{
}
void ISR_Ep8pingnak(void) interrupt 0
{
}
void ISR_Errorlimit(void) interrupt 0
{
}
void ISR_Ep2piderror(void) interrupt 0
{
}
void ISR_Ep4piderror(void) interrupt 0
{
}
void ISR_Ep6piderror(void) interrupt 0
{
}
void ISR_Ep8piderror(void) interrupt 0
{
}
void ISR_Ep2pflag(void) interrupt 0
{
}
void ISR_Ep4pflag(void) interrupt 0
{
}
void ISR_Ep6pflag(void) interrupt 0
{
}
void ISR_Ep8pflag(void) interrupt 0
{
}
void ISR_Ep2eflag(void) interrupt 0
{
}
void ISR_Ep4eflag(void) interrupt 0
{
}
void ISR_Ep6eflag(void) interrupt 0
{
}
void ISR_Ep8eflag(void) interrupt 0
{
}
void ISR_Ep2fflag(void) interrupt 0
{
}
void ISR_Ep4fflag(void) interrupt 0
{
}
void ISR_Ep6fflag(void) interrupt 0
{
}
void ISR_Ep8fflag(void) interrupt 0
{
}
void ISR_GpifComplete(void) interrupt 0
{
}
void ISR_GpifWaveform(void) interrupt 0
{
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -