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

📄 fx2hid.c

📁 Cypress EX-USB FX2步进电机控制
💻 C
字号:
#pragma NOIV              

#include "fx2.h"
#include "fx2regs.h"

extern BOOL   GotSUD;         
extern BOOL   Sleep;
extern BOOL   Rwuen;
extern BOOL   Selfpwr;

WORD	pHIDDscr;
WORD	pReportDscr;
WORD	pReportDscrEnd;

extern code HIDDscr;
extern code HIDReportDscr;
extern code HIDReportDscrEnd;

BYTE Configuration;      
BYTE AlternateSetting;   

int IsHigh,EOut0,EOut1,EIn0,EIn1,KTime,HTime,LTime;

//#define VR_NAKALL_ON           0xD0
//#define VR_NAKALL_OFF          0xD1

void TD_Init(void)
{
  CPUCS=((CPUCS&~bmCLKSPD)|bmCLKSPD1);
  EP1OUTCFG = 0xA0;
  EP1INCFG = 0xA0;
  EP2CFG = EP4CFG = EP6CFG = EP8CFG = 0;  
  RCAP2H=0;
  RCAP2L=0;
  //T2M=0;
  TCLK=0;
  RCLK=0;
  C_T2=0;
  CP_RL2=0;
  TF2=0;
  TR2=0;
  PORTACFG = 0; 
  OEA = 0xFF; 
  PA0=0;
  PA1=0;
  HTime=45;
  LTime=46;
  KTime=0;
  Rwuen = TRUE;
}

void TD_Poll(void)
{
  if(!(EP1OUTCS&0x02))
  {
     EOut0=EP1OUTBUF[0];
     EOut1=EP1OUTBUF[1];
     EP1OUTBUF[0]=0;
	 EP1OUTBUF[1]=0;
	 EP1OUTBC=0;
	 switch(EOut0)
     {   
        case 200:
	    {
			 KTime=0;
			 TR2=1;
             if(EOut1>=1)		
    	        PA1=1;
		     else
		        PA1=0;
	         break;
	    }
	    case 210:
	    {
		     TF2=0;
			 TR2=0;
			 KTime=0;
			 PA0=0;
		     PA1=0;
	         break;
	    }
		case 220:
		{
		     EIn0=220;
			 if(TR2==0)
  			 {
			    EIn1=0;
			 }
			 else
			 {
			    if(PA1==0)		
    	           EIn1=1;
		        else
		           EIn1=11;
			 }
	         break;
        }
		case 230:
		{
		     EIn0=230;
			 EIn1=HTime;
			 break;
		}
		case 240:
		{
		     EIn0=240;
			 EIn1=LTime;
			 break;
		}
		case 250:
		{
		     EIn0=250;
			 EIn1=IsHigh;
			 break;
		}
		default:
	    { 
		     if(EOut0>=2&&EOut1>=2)
			 {
			    HTime=EOut0;
     	        LTime=EOut1;
			 }
	    }
     }
  }
  EP1INBUF[0]=EIn0;
  EP1INBUF[1]=EIn1;
  EP1INBC=2;
  if(TF2==1) 
  {
	 TF2=0;
	 KTime++;
  }
  if(KTime>=HTime&&PA0==1)
  {   
	 KTime=0;
	 PA0=0;
  }
  if(KTime>=LTime&&PA0==0)
  {   
	 KTime=0;
	 PA0=1;
  }
  BREAKPT &= ~bmBPEN; 		   
}

BOOL TD_Suspend(void)
{
  return(TRUE);
}
BOOL TD_Resume(void)
{
  return(TRUE);
}

BOOL DR_GetDescriptor(void)
{
  BYTE length,i;
  pHIDDscr = (WORD)&HIDDscr;
  pReportDscr = (WORD)&HIDReportDscr;
  pReportDscrEnd = (WORD)&HIDReportDscrEnd;
  switch (SETUPDAT[3])
  {
     case GD_HID:				
	      SUDPTRH = MSB(pHIDDscr);
	      SUDPTRL = LSB(pHIDDscr);
	      return (FALSE);
	 case GD_REPORT:				
	      length = pReportDscrEnd - pReportDscr;
          AUTOPTR1H = MSB(pReportDscr);
          AUTOPTR1L = LSB(pReportDscr);
          for(i=0;i<length;i++)
              EP0BUF[i]=XAUTODAT1;
          EP0BCL = length;
          return (FALSE);
	default:
	      return(TRUE);
  }
}
BOOL DR_SetConfiguration(void)
{
  Configuration = SETUPDAT[2];
  return(TRUE);          
}
BOOL DR_GetConfiguration(void)  
{
  EP0BUF[0] = Configuration;
  EP0BCH = 0;
  EP0BCL = 1;
  return(TRUE);            
}
BOOL DR_SetInterface(void)       
{
  AlternateSetting = SETUPDAT[2];
  return(TRUE);          
}
BOOL DR_GetInterface(void)
{									
  EP0BUF[0]=AlternateSetting;
  EP0BCH=0;
  EP0BCL=1;
  return(TRUE);
}
BOOL DR_GetStatus(void)
{
  return(TRUE);
}
BOOL DR_ClearFeature(void)
{
  return(TRUE);
}
BOOL DR_SetFeature(void)
{
  return(TRUE);
}
BOOL DR_VendorCmnd(void)
{
  /* 
  BYTE tmp;
  switch(SETUPDAT[1])
  {
     case VR_NAKALL_ON:
	      tmp=FIFORESET;
		  tmp|=bmNAKALL;
		  SYNCDELAY;
		  FIFORESET=tmp;
		  break;
     case VR_NAKALL_OFF:
	      tmp=FIFORESET;
		  tmp &= ~bmNAKALL;
		  SYNCDELAY;
		  FIFORESET=tmp;
		  break;
	 default:
	      */
          return(TRUE);
		  /*
  }
  return(FALSE);
  */
}

void ISR_Sudav(void) interrupt 0
{
  GotSUD=TRUE;
  EZUSB_IRQ_CLEAR();
  USBIRQ=bmSUDAV;
}
void ISR_Sutok(void) interrupt 0
{
  EZUSB_IRQ_CLEAR();
  USBIRQ=bmSUTOK;
}
void ISR_Sof(void) interrupt 0
{
  EZUSB_IRQ_CLEAR();
  USBIRQ=bmSOF;

}
void ISR_Ures(void) interrupt 0
{
  pConfigDscr = pFullSpeedConfigDscr;
  ((CONFIGDSCR xdata *)pConfigDscr)->type = CONFIG_DSCR;
  pOtherConfigDscr = pHighSpeedConfigDscr;  
  ((CONFIGDSCR xdata *)pOtherConfigDscr)->type = OTHERSPEED_DSCR;
  EZUSB_IRQ_CLEAR();
  USBIRQ=bmURES;
}
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;
	 IsHigh=1;
  }
  else
  {
     IsHigh=0;
  }     
  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 + -