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

📄 function.c

📁 USB2.0原理与工程开发光盘(第二版)
💻 C
字号:
#pragma NOIV          

#include "testheader.h"
#include "testregs.h"
#include "testdly.h"

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

extern void EZUSB_Delay(WORD ms);

BYTE Configuration;          
BYTE AlternateSetting;         
BOOL in_enable = FALSE;            
BOOL enum_high_speed = FALSE;    

#define EXTFIFOHF  !(GPIFREADYSTAT & bmBIT1)
#define EXTFIFOEF  !(GPIFREADYSTAT & bmBIT0)

#define GPIFTRIGRD 4
#define GPIF_EP2 0
#define GPIF_EP4 1
#define GPIF_EP6 2
#define GPIF_EP8 3

#define VR_NAKALL_ON    0xD0
#define VR_NAKALL_OFF   0xD1

void GpifInit ();

void TD_Init(void)     
{
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
  SYNCDELAY; 
  EP2CFG = 0xE8;    
  SYNCDELAY;           
  EP4CFG = 0x00;    
  SYNCDELAY;                        
  EP6CFG = 0x00;    
  SYNCDELAY;              
  EP8CFG = 0x00;  
  SYNCDELAY;  
  
  FIFORESET = 0x80;  
  SYNCDELAY;
  FIFORESET = 0x02;  
  SYNCDELAY;
  FIFORESET = 0x00;  
  SYNCDELAY;

  EP2FIFOCFG = 0x09; 
  SYNCDELAY;
   
  GpifInit ();       

  OEA |= 0x40;    
  IOA |= 0x40;    
  IOA &= 0xBF;     
  EZUSB_Delay (1); 
  IOA |= 0x40;   
  
  OEA |= 0x3F;
  IOA &= 0xC0;    
}

void TD_Poll(void)         
{
   if(in_enable)                          
  {
    if ( GPIFTRIG & 0x80 )             
    { 
      if (EXTFIFOHF)                    
	  {
	    if ((EP24FIFOFLGS & 0x02 ) )      
		{      
          if(enum_high_speed)
		  {
	        SYNCDELAY;    
            GPIFTCB1 = 0x08;
            SYNCDELAY;
            GPIFTCB0 = 0x00;
            SYNCDELAY;
		  }
		  else
		  {
		    SYNCDELAY;
		    GPIFTCB1 = 0x00; 
            SYNCDELAY;
		    GPIFTCB0 = 0x20;
		    SYNCDELAY;
		  }          
 
          GPIFTRIG = GPIFTRIGRD | GPIF_EP2; 
	      SYNCDELAY;

	      while( !( GPIFTRIG & 0x80 ) )  
          {
            ;
          }    
	      SYNCDELAY;
		}
	  }
    }
  }
}

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

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

BOOL DR_GetDescriptor(void)
{
   return(TRUE);
}

BOOL DR_SetConfiguration(void)  
{
  if( EZUSB_HIGHSPEED( ) )
  { 
    SYNCDELAY;                 
    EP2AUTOINLENH = 0x04;      
    SYNCDELAY;    
    EP2AUTOINLENL = 0x00;
    SYNCDELAY;                  
    enum_high_speed = TRUE;
  }
  else
  {
    SYNCDELAY;                   
    EP2AUTOINLENH = 0x00;   
    SYNCDELAY;                   
    EP2AUTOINLENL = 0x40;
    SYNCDELAY;                  
    enum_high_speed = FALSE;
  }
  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);
}

#define VX_B5 0xB5 
#define VX_B6 0xB6 
BOOL DR_VendorCmnd(void)
{
  switch (SETUPDAT[1])
  {   
	case VX_B5: 
	{
      int i;
  
      OEA |= 0x40;   
      IOA |= 0x40;   
      IOA &= 0xBF;    
      EZUSB_Delay (1); 
      IOA |= 0x40;  

      FIFORESET = 0x80; 
      SYNCDELAY;
      FIFORESET = 0x02; 
      SYNCDELAY;
      FIFORESET = 0x00;  
      SYNCDELAY;

      OEA |= 0x3F;
      IOA &= 0xC0;    
   
      IOA |= 0x02;  
      IOA |= 0x04;    

      for(i=0;i<2;i++)  
      {
      IOA &=  0xFD; 
      IOA &=  0xFE; 
      IOA |=  0x02; 
      }

      for(i=0;i<3;i++)
      {
      IOA &=  0xFD; 
      IOA |=  0x01;  
      IOA |=  0x02;  
      }

      for(i=0;i<3;i++)
      {
      IOA &=  0xFD;  
      IOA &=  0xFE;  
      IOA |=  0x02; 
      }

      IOA &=  0xFE;
      EZUSB_Delay (1);       
      IOA |= 0x08;  
      in_enable = TRUE;

      *EP0BUF = VX_B5;
  	  EP0BCH = 0;
	  EP0BCL = 1;
	  EP0CS |= bmHSNAK;
	  break;
    }
    case VX_B6: 
	{
      IOA &= 0xF7; 
      in_enable = FALSE;

      *EP0BUF = VX_B6;
  	  EP0BCH = 0;
	  EP0BCL = 1;
	  EP0CS |= bmHSNAK;
	  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;
   }

   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 + -