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

📄 edgepf.c

📁 ez-usb fx2编程实例编程实例编程实例
💻 C
📖 第 1 页 / 共 2 页
字号:
      break;
    }
    case VX_BB:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      INPKTEND = 0x06;          // commit in pkt, new way.. w/skip=0
      SYNCDELAY;                
#else
      SYNCDELAY;                
      INPKTEND = 0x06;          // commit in pkt, old way.. 
      SYNCDELAY;                
#endif      
      *EP0BUF = VX_BB;
      break;
    }
    case VX_BC:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      INPKTEND = 0x86;          // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
#endif      
      *EP0BUF = VX_BC;
      break;
    }
    case VX_BD:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      EP2BCH = 0x00;
      SYNCDELAY;                
      EP2BCL = 0x20;            // cpu change len out pkt
      SYNCDELAY;                
#else
#endif      
      *EP0BUF = VX_BD;
      break;
    }
    case VX_BE:
    {                           
#ifdef REV_CTL    
      if( ( EP68FIFOFLGS & 0x02 ) /* || zerolenpkt */ )
      { 
        // EP6EF=1, when fifo "empty"...
        *EP0BUF = 0xFF;
      }
      else
      {
        // EP6EF=0 when fifo is "not empty"...
        // ...at this point the pkt. is in the peripheral/cpu domain
      
        SYNCDELAY;                
        ledX_rdvar = LED0_ON;   // debug visual, stuck "ON" to warn developer...
        EP6BCH = 0x00;
        SYNCDELAY;                
        EP6BCL = 0x20;          // cpu change len in pkt
        SYNCDELAY;                
        *EP0BUF = VX_BE;
      
        // ...at this point the pkt. is in the host domain
      }
#else
      if( ( EP68FIFOFLGS & 0x02 ) /* || zerolenpkt */ )
      { 
        // EP6EF=1, when fifo "empty"...
        *EP0BUF = 0xFF;
      }
      else
      {
        // EP6EF=0 when fifo is "not empty"...
        // ...at this point the pkt. is in the peripheral/cpu domain
      
        SYNCDELAY;                
        ledX_rdvar = LED1_ON;   // debug visual, stuck "ON" to warn developer...
        EP6BCH = 0x00;
        SYNCDELAY;                
        EP6BCL = 0x20;          // cpu change len in pkt
        SYNCDELAY;                
        *EP0BUF = VX_BE;
      
        // ...at this point the pkt. is in the host domain
      }
#endif      
      break;
    }
    case VX_BF:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      OUTPKTEND = 0x82;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
#endif      
      *EP0BUF = VX_BF;
      break;
    }
    case VX_C2:
    { // cpu source out data
#ifdef REV_CTL
      if( EP24FIFOFLGS & 0x02 )
      {
        SYNCDELAY;              // 
        FIFORESET = 0x80;       // nak all OUT pkts. from host
        SYNCDELAY;              // 
        FIFORESET = 0x02;       // advance all EP2 buffers to cpu domain
        SYNCDELAY;              // 
        EP2FIFOBUF[0] = 0xAA;   // create newly source pkt. data
        SYNCDELAY;              // 
        EP2BCH = 0x00;
        SYNCDELAY;              // 
        EP2BCL = 0x01;          // commit newly sourced pkt. to interface fifo
      
        // beware of "left over" uncommitted buffers
                                
        SYNCDELAY;              // 
        OUTPKTEND = 0x82;       // skip uncommitted pkt. (second pkt.)
        SYNCDELAY;              // 
        OUTPKTEND = 0x82;       // skip uncommitted pkt. (third pkt.)
        SYNCDELAY;              // 
        OUTPKTEND = 0x82;       // skip uncommitted pkt. (fourth pkt.)
        // note: core will not allow pkts. to get out of sequence
        SYNCDELAY;              // 
        FIFORESET = 0x00;       // release "nak all"
      
        *EP0BUF = VX_C2;
      }
      else
      {
        *EP0BUF = 0xFF;
      }
#else
        *EP0BUF = 0xFF;
#endif
    
      break;
    }
    case VX_C6:
    { 
      REVCTL = 0x03;            // use enh pkt handling and dynamic out
      SYNCDELAY;                // 
      
      *EP0BUF = VX_C6;
      break;
    }
    case VX_C7:
    { 
      SYNCDELAY;                // 
      EP2FIFOCFG = 0x10;        // AUTOOUT=1
      SYNCDELAY;                // 
      EP4FIFOCFG = 0x10;        // AUTOOUT=1
      SYNCDELAY;                // 
      EP6FIFOCFG = 0x10;        // AUTOOUT=1
      SYNCDELAY;                // 
      EP8FIFOCFG = 0x10;        // AUTOOUT=1
      *EP0BUF = VX_C7;
      break;
    }
    case VX_C8:
    { 
      SYNCDELAY;                // 
      EP2FIFOCFG = 0x00;        // AUTOOUT=0
      SYNCDELAY;                // 
      EP4FIFOCFG = 0x00;        // AUTOOUT=0
      SYNCDELAY;                // 
      EP6FIFOCFG = 0x00;        // AUTOOUT=0
      SYNCDELAY;                // 
      EP8FIFOCFG = 0x00;        // AUTOOUT=0
      *EP0BUF = VX_C8;
      break;
    }
    case VX_C9:
    { 
      SYNCDELAY;                // 
      FIFORESET = 0x80;         // activate NAK-ALL to avoid race conditions
      SYNCDELAY;                // 
      FIFORESET = 0x02;         // reset, FIFO 2
      SYNCDELAY;                // 
      FIFORESET = 0x04;         // reset, FIFO 4
      SYNCDELAY;                // 
      FIFORESET = 0x06;         // reset, FIFO 6
      SYNCDELAY;                // 
      FIFORESET = 0x08;         // reset, FIFO 8
      SYNCDELAY;                // 
      FIFORESET = 0x00;         // deactivate NAK-ALL
      
      // NOTE: see TD_Init( ); for proper FIFORESET sequence

      *EP0BUF = VX_C9;
      break;
    }
    case VX_CA:
    { 
      REVCTL = 0x00;            // don't use enh pkt handling and dynamic out
      SYNCDELAY;                // 
      
      *EP0BUF = VX_CA;
      break;
    }
    case VX_D2:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      OUTPKTEND = 0x82;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
      SYNCDELAY;                
      EP2BCL = 0x80;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#endif      
      *EP0BUF = VX_D2;
      break;
    }
    case VX_D4:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      OUTPKTEND = 0x84;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
      SYNCDELAY;                
      EP4BCL = 0x80;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#endif      
      *EP0BUF = VX_D4;
      break;
    }
    case VX_D6:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      OUTPKTEND = 0x86;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
      SYNCDELAY;                
      EP6BCL = 0x80;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#endif      
      *EP0BUF = VX_D2;
      break;
    }
    case VX_D8:
    {                           
#ifdef REV_CTL    
      SYNCDELAY;                
      OUTPKTEND = 0x88;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#else
      SYNCDELAY;                
      EP8BCL = 0x80;         // skip in pkt, new way.. w/skip=1
      SYNCDELAY;                
#endif      
      *EP0BUF = VX_D8;
      break;
    }
    default:
    {
      ledX_rdvar = LED3_ON;     // debug visual, stuck "ON" to warn developer...
	    return( FALSE );          // no error; command handled OK
    }
	}
  
  EP0BCH = 0;
  EP0BCL = 1;                   // Arm endpoint with # bytes to transfer
  EP0CS |= bmHSNAK;             // Acknowledge handshake phase of device request
  
	return( FALSE );              // no error; command handled OK
}

//-----------------------------------------------------------------------------
// 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
{
   if ( EZUSB_HIGHSPEED( ) )
   {
      pConfigDscr = pHighSpeedConfigDscr;
      pOtherConfigDscr = pFullSpeedConfigDscr;
   }
   else
   {
      pConfigDscr = pFullSpeedConfigDscr;
      pOtherConfigDscr = pHighSpeedConfigDscr;
   }
   
   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;
      pOtherConfigDscr = pFullSpeedConfigDscr;
   }
   else
   {
      pConfigDscr = pFullSpeedConfigDscr;
      pOtherConfigDscr = pHighSpeedConfigDscr;
   }

   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
{
  ledX_rdvar = LED0_ON;         // visual
  SYNCDELAY;
	EXIF &=  ~0x40;
  SYNCDELAY;
  INT4CLR = 0xFF;               // automatically enabled at POR
  SYNCDELAY;
}
void ISR_Ep4pflag( void ) interrupt 0
{
  ledX_rdvar = LED1_ON;         // visual
  SYNCDELAY;
	EXIF &=  ~0x40;
  SYNCDELAY;
  INT4CLR = 0xFF;               // automatically enabled at POR
  SYNCDELAY;
}
void ISR_Ep6pflag( void ) interrupt 0
{
  ledX_rdvar = LED2_ON;         // visual
  SYNCDELAY;
	EXIF &=  ~0x40;
  SYNCDELAY;
  INT4CLR = 0xFF;               // automatically enabled at POR
  SYNCDELAY;
}
void ISR_Ep8pflag( void ) interrupt 0
{
  ledX_rdvar = LED3_ON;         // visual
  SYNCDELAY;
	EXIF &=  ~0x40;
  SYNCDELAY;
  INT4CLR = 0xFF;               // automatically enabled at POR
  SYNCDELAY;
}
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 + -