亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? srcout_m.c

?? FX2開發(fā)板程序下載A
?? C
?? 第 1 頁 / 共 2 頁
字號:
#pragma NOIV                    // Do not generate interrupt vectors
//-----------------------------------------------------------------------------
//   File:      srcout_m.c
//   Contents:  Hooks required to implement USB peripheral function.
//              Code written for EZUSB FX2 128-pin REVE...
//              Firmware tested on EZUSB FX2 128-pin (CY3681 DK)
//   Copyright (c) 2001 Cypress Semiconductor All rights reserved
//-----------------------------------------------------------------------------
#include "fx2.h"
#include "fx2regs.h"
#include "fx2sdly.h"            // SYNCDELAY macro

extern BOOL GotSUD;             // Received setup data flag
extern BOOL Sleep;
extern BOOL Rwuen;
extern BOOL Selfpwr;

BYTE Configuration;             // Current configuration
BYTE AlternateSetting;          // Alternate settings

// proto's from "gpif.c"
void GpifInit( void );

  // ...debug LEDs: accessed via movx reads only ( through CPLD )
xdata volatile const BYTE LED0_ON  _at_ 0x8000;
xdata volatile const BYTE LED0_OFF _at_ 0x8100;
xdata volatile const BYTE LED1_ON  _at_ 0x9000;
xdata volatile const BYTE LED1_OFF _at_ 0x9100;
xdata volatile const BYTE LED2_ON  _at_ 0xA000;
xdata volatile const BYTE LED2_OFF _at_ 0xA100;
xdata volatile const BYTE LED3_ON  _at_ 0xB000;
xdata volatile const BYTE LED3_OFF _at_ 0xB100;
  // it may be worth noting here that the default monitor loads at 0xC000

  // use this global variable when (de)asserting debug LEDs...
BYTE ledX_rdvar = 0x00;

// 512 for high speed, 64 for full speed
static WORD enum_pkt_size = 0x0000;    

// when set firmware running in TD_Poll( ); handles data transfers
BOOL td_poll_handles_transfers = 0;

//-----------------------------------------------------------------------------
// Task Dispatcher hooks
//   The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------
void TD_Init( void )
{ // Called once at startup

  CPUCS = 0x10;                 // CLKSPD[1:0]=10, for 48MHz operation
                                // CLKOE=0, don't drive CLKOUT
  
  GpifInit( );                  // init GPIF engine via GPIFTool output file

  // Registers which require a synchronization delay, see section 15.14
  // FIFORESET        FIFOPINPOLAR
  // INPKTEND         OUTPKTEND
  // EPxBCH:L         REVCTL
  // GPIFTCB3         GPIFTCB2
  // GPIFTCB1         GPIFTCB0
  // EPxFIFOPFH:L     EPxAUTOINLENH:L
  // EPxFIFOCFG       EPxGPIFFLGSEL
  // PINFLAGSxx       EPxFIFOIRQ
  // EPxFIFOIE        GPIFIRQ
  // GPIFIE           GPIFADRH:L
  // UDMACRCH:L       EPxGPIFTRIG
  // GPIFTRIG
  
  // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
  //      ...these have been replaced by GPIFTC[B3:B0] registers
  
  SYNCDELAY;                    // see TRM section 15.14
  REVCTL = 0x01;                // use enhanced packet handling
  
  // NOTEME: explain what all happens when REVCTL.0=1
  
  // EP2 512 BULK OUT 4x
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA0;                // BUF[1:0]=00 for 4x buffering
  
  // EP6 512 BULK IN 4x
  SYNCDELAY;                    // 
  EP6CFG = 0xE0;                // BUF[1:0]=00 for 4x buffering
  
  // EP4 and EP8 are not used in this implementation...
  SYNCDELAY;                    // 
  EP4CFG = 0x20;                // clear valid bit
  SYNCDELAY;                    // 
  EP8CFG = 0x60;                // clear valid bit

  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

  // 8-bit bus (WORDWIDE=0)...
  SYNCDELAY;                    // 
  EP2FIFOCFG = 0x00;
  SYNCDELAY;                    // 
  EP6FIFOCFG = 0x04;
  
  // OUT endp's come up "unarmed" in the cpu domain
  // ...to "arm" the endp's when AUTOOUT=0 the cpu write's OUTPKTEND w/skip=1 (N times)
  SYNCDELAY;                    // 
  OUTPKTEND = 0x82;             // arm first buffer
  SYNCDELAY;                    // 
  OUTPKTEND = 0x82;             // arm second buffer
  SYNCDELAY;                    // 
  OUTPKTEND = 0x82;             // arm third buffer
  SYNCDELAY;                    // 
  OUTPKTEND = 0x82;             // arm fourth buffer
  SYNCDELAY;                    // 
  
  // IN endp's come up in the cpu/peripheral domain
  
  // setup INT4 as internal source for GPIF interrupts
  // using INT4CLR (SFR), automatically enabled
  INTSETUP |= 0x03;   // Enable INT4 FIFO/GPIF Autovectoring
  SYNCDELAY;          // used here as "delay"
	EXIF &=  ~0x40;     // just in case one was pending...
  SYNCDELAY;          // used here as "delay"
  GPIFIRQ = 0x02;
  SYNCDELAY;          // 
  GPIFIE = 0x02;      // Enable GPIFWF interrupt
  SYNCDELAY;          // 
  EIE |= 0x04;        // Enable INT4 ISR, EIE.2(EIEX4=1)
  
  // turn debug LED[3:0] off...
  ledX_rdvar = LED0_OFF;
  ledX_rdvar = LED1_OFF;
  ledX_rdvar = LED2_OFF;
  ledX_rdvar = LED3_OFF;
}

#define GPIFTRIGWR 0
#define GPIFTRIGRD 4

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

void TD_Poll( void )
{ // Called repeatedly while the device is idle
  static WORD xFIFOTC_OUT = 0x0000;
  
  // Registers which require a synchronization delay, see section 15.14
  // FIFORESET        FIFOPINPOLAR
  // INPKTEND         OUTPKTEND
  // EPxBCH:L         REVCTL
  // GPIFTCB3         GPIFTCB2
  // GPIFTCB1         GPIFTCB0
  // EPxFIFOPFH:L     EPxAUTOINLENH:L
  // EPxFIFOCFG       EPxGPIFFLGSEL
  // PINFLAGSxx       EPxFIFOIRQ
  // EPxFIFOIE        GPIFIRQ
  // GPIFIE           GPIFADRH:L
  // UDMACRCH:L       EPxGPIFTRIG
  // GPIFTRIG
  
  // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
  //      ...these have been replaced by GPIFTC[B3:B0] registers


  if( td_poll_handles_transfers )
  {
  
    // Handle OUT data...
  

    // is the host sending data...
    if( !( EP2468STAT & 0x01 ) )
    { 
      // EP2EF=0, when endp buffer "not" empty
    
      // ...at this point the pkt. switched from the usb domain to the cpu domain
    
      // if the host sent a pkt... then a buffer was available
      // AUTOOUT=0, so pass pkt. to peripheral domain - (GPIF)
      SYNCDELAY;
      OUTPKTEND = 0x02;         // w/skip=0
    
    }
    else
    { 
      // host is "not" sending data...
    }    
  
    // is the peripheral interface idle...
    if( GPIFTRIG & 0x80 )
    { 
      // DONE=1, when GPIF is "idle"
  
      // check if there's a pkt in the peripheral domain...
      if( EP24FIFOFLGS & 0x02 )
      { 
        // ...EF=1 when buffer "empty", no more data to xfr.
      }    
      else
      { 
        // EF=0, when slave fifo is "not empty"
        // ...the cpu passed the pkt. to the peripheral domain
    
        // check if peripheral "not full"...
        if( GPIFREADYSTAT & 0x02 )
        { 
          // RDY1=1, when peripheral is "not" FULL (tied to peripheral "full" flag)
    
          xFIFOTC_OUT = ( ( EP2FIFOBCH << 8 ) + EP2FIFOBCL );
      
          // setup GPIF transaction count
          SYNCDELAY;
          EP2GPIFTCH = EP2FIFOBCH;
          SYNCDELAY;
          EP2GPIFTCL = EP2FIFOBCL;  
        
          // trigger FIFO write transaction(s), using SFR
          // R/W=0, EP[1:0]=00 for EP2 write(s)
          SYNCDELAY;
          GPIFTRIG = GPIFTRIGWR | GPIF_EP2;  
      
          // NOTE: 512 bytes transfers in ~75usec on 8-bit async bus 
          // ...once master (GPIF) drains OUT pkt, it (re)arms to usb domain
        
          if( xFIFOTC_OUT < enum_pkt_size )
          { 
            // handle short pkt. to peripheral

            // wait for the transaction to terminate naturally...
            while( !( GPIFTRIG & 0x80 ) )
            { 
                // should take <75usec @ 8-bit async.
              ; // poll GPIFTRIG.7, DONE bit...
            }
          
            // signal "shortpkt" to peripheral peripheral here...
          }
          else
          { 
            // was max. pkt. size...
            // ...let transaction terminate naturally...
          }
        }
        else
        { 
          // RDY1=0, when peripheral is FULL
        }
      }
    }  
    else
    { 
      // DONE=0 when GPIF is "not" IDLE...
    }
  

    // Handle IN data...
  
  
    // is the peripheral interface idle...
    if( GPIFTRIG & 0x80 )
    { 
      // check if peripheral "not empty"...
      if( GPIFREADYSTAT & 0x01 )
      { 
        // RDY0=1, when peripheral "not" empty...
      
        if( EP68FIFOFLGS & 0x01 )
        { 
          // EP6FF=1, when fifo "full"
        }
        else
        { 
          // EP6FF=0, when fifo "not full", buffer available...
      
          // setup GPIF transaction count
          SYNCDELAY;
          EP6GPIFTCH = 0x02;    
          SYNCDELAY;
          EP6GPIFTCL = 0x00;    
          SYNCDELAY;
          
          // trigger FIFO read transaction(s), using SFR
          // R/W=1, EP[1:0]=FIFO_EpNum for EPx read(s)
          GPIFTRIG = GPIFTRIGRD | GPIF_EP6; 
        
          // NOTE: 512 bytes transfers in ~75usec on 8-bit async bus 
          // NOTE: 64 bytes transfers in ~10usec on 8-bit async bus 
        
          // wait for the transaction to terminate naturally...
          SYNCDELAY;                // 
          while( !( GPIFTRIG & 0x80 ) )
          { 
              // should take <75usec @ 8-bit async.
            ; // poll GPIFTRIG.7, DONE bit...
          }
        
         // AUTOIN=0, so 8051 pass pkt. to host...
          SYNCDELAY;              // 
          INPKTEND = 0x06;        // w/skip=0;.commit however many bytes in pkt.
          SYNCDELAY;              // 
                                  // ...NOTE: this also handles "shortpkt"
        
        }
      }
      else
      { 
        // master has all the data the peripheral sent...
      }
    }
    else
    { 
      // peripheral interface busy...
    }
  }
  else
  { 
    // handle data transfers via vend_ax cmnds...
  }
  
}

BOOL TD_Suspend( void )          
{ // Called before the device goes into suspend mode
   return( TRUE );
}

BOOL TD_Resume( void )          
{ // Called after the device resumes
   return( TRUE );
}

//-----------------------------------------------------------------------------
// Device Request hooks
//   The following hooks are called by the end point 0 device request parser.
//-----------------------------------------------------------------------------
BOOL DR_GetDescriptor( void )
{
   return( TRUE );
}

BOOL DR_SetConfiguration( void )   
{ // Called when a Set Configuration command is received
  
  if( EZUSB_HIGHSPEED( ) )
  { // ...FX2 in high speed mode
    SYNCDELAY;                  // 
    EP6AUTOINLENH = 0x02;       // set core AUTO commit len = 512 bytes
    SYNCDELAY;                  // 
    EP6AUTOINLENL = 0x00;
    SYNCDELAY;                  // 
    enum_pkt_size = 512;        // max. pkt. size = 512 bytes
  }
  else
  { // ...FX2 in full speed mode
    SYNCDELAY;                  // 
    EP6AUTOINLENH = 0x00;       // set core AUTO commit len = 64 bytes
    SYNCDELAY;                  // 
    EP6AUTOINLENL = 0x40;
    SYNCDELAY;                  // 
    enum_pkt_size = 64;         // max. pkt. size = 64 bytes
  }
      
  Configuration = SETUPDAT[ 2 ];
  return( TRUE );        // Handled by user code
}

BOOL DR_GetConfiguration( void )   
{ // Called when a Get Configuration command is received
   EP0BUF[ 0 ] = Configuration;
   EP0BCH = 0;
   EP0BCL = 1;
   return(TRUE);          // Handled by user code
}

BOOL DR_SetInterface( void )       
{ // Called when a Set Interface command is received
   AlternateSetting = SETUPDAT[ 2 ];
   return( TRUE );        // Handled by user code
}

BOOL DR_GetInterface( void )       
{ // Called when a Set Interface command is received
   EP0BUF[ 0 ] = AlternateSetting;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产传媒一区在线| 久久成人免费网站| 555www色欧美视频| 国产美女主播视频一区| 2021国产精品久久精品| 国产999精品久久久久久绿帽| 亚洲精品国产精品乱码不99| 日韩一区二区免费高清| av网站免费线看精品| 日韩精品一级中文字幕精品视频免费观看 | 日本久久精品电影| 三级久久三级久久| 国产精品不卡一区二区三区| 精品视频1区2区3区| 国产精品中文字幕欧美| 亚洲午夜影视影院在线观看| 久久久久久毛片| 欧美唯美清纯偷拍| 丁香激情综合五月| 久久99精品国产91久久来源| 亚洲精品视频一区二区| 久久综合久久鬼色中文字| 欧美日韩在线综合| av成人免费在线| 精品一区二区三区在线观看国产| 亚洲欧美日韩人成在线播放| 亚洲精品一区二区三区精华液| 色综合一区二区三区| 欧美精品1区2区| 另类调教123区| 亚洲成人激情综合网| 国产精品三级视频| 26uuu亚洲综合色欧美| 成人黄色免费短视频| 激情五月婷婷综合网| 三级不卡在线观看| 亚洲精品老司机| 亚洲欧洲美洲综合色网| 国产亚洲精品超碰| 精品va天堂亚洲国产| 日韩免费视频一区| 欧美三级中文字幕| 91成人免费在线视频| 色综合视频一区二区三区高清| 国产成人综合在线观看| 激情图片小说一区| 天天综合色天天综合| 亚洲自拍偷拍麻豆| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲欧美日本韩国| 亚洲欧洲精品一区二区三区不卡| 国产人伦精品一区二区| 欧美精品一区二区精品网| 欧美va亚洲va在线观看蝴蝶网| 欧美日韩国产电影| 欧美日韩亚洲另类| 在线播放91灌醉迷j高跟美女 | 欧美视频一区二区三区在线观看 | 老司机精品视频线观看86| 亚洲bt欧美bt精品| 五月婷婷久久综合| 亚洲成a人在线观看| 日本成人在线不卡视频| 午夜视频一区在线观看| 天天亚洲美女在线视频| 日本vs亚洲vs韩国一区三区二区 | 国产精品传媒在线| 久久综合色综合88| 国产香蕉久久精品综合网| 国产拍欧美日韩视频二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲成av人片www| 天天色 色综合| 精品一区二区在线视频| 黑人巨大精品欧美一区| 成人免费视频视频在线观看免费 | 亚洲欧美日韩一区| 午夜视频在线观看一区二区| 久草中文综合在线| 国产麻豆视频一区二区| 国产精品亚洲专一区二区三区| 国产999精品久久久久久绿帽| 99久久99久久精品免费看蜜桃| www.欧美色图| 欧美性色欧美a在线播放| 欧美一区日韩一区| 欧美经典一区二区三区| 自拍偷拍欧美精品| 免费一区二区视频| 国产一区二区在线视频| 成人综合在线观看| 欧美中文字幕久久| 精品少妇一区二区三区日产乱码| 国产片一区二区三区| 亚洲一区二区在线播放相泽| 国产成人亚洲精品青草天美| 欧美理论片在线| 综合av第一页| 国产精品一区二区不卡| 在线播放国产精品二区一二区四区 | 91精品国产日韩91久久久久久| 国产精品家庭影院| 韩国女主播一区| 在线电影院国产精品| 亚洲男女毛片无遮挡| 国产精品亚洲午夜一区二区三区| 在线不卡的av| 亚洲一二三区不卡| 99精品视频一区二区三区| 久久精品综合网| 日本中文一区二区三区| 欧洲在线/亚洲| 中文字幕亚洲欧美在线不卡| 国内一区二区视频| 日韩精品中午字幕| 日日噜噜夜夜狠狠视频欧美人| 色综合激情五月| 国产精品不卡在线| 成人av免费网站| 欧美经典三级视频一区二区三区| 国模冰冰炮一区二区| 日韩女优电影在线观看| 奇米精品一区二区三区在线观看| 欧美日韩一区二区电影| 亚洲精品欧美专区| 一本色道久久综合精品竹菊| 亚洲国产精品成人久久综合一区| 国产一区二区三区四区在线观看| 欧美r级在线观看| 久久国产精品72免费观看| 日韩一区二区三区三四区视频在线观看 | 91视视频在线直接观看在线看网页在线看| 久久九九影视网| 国产成人综合在线| 中文字幕亚洲视频| 91美女在线看| 亚洲一区二区成人在线观看| 欧美三级中文字幕在线观看| 亚洲高清一区二区三区| 欧美一区二区视频在线观看2022| 男男成人高潮片免费网站| 日韩视频不卡中文| 韩国女主播成人在线| 国产丝袜欧美中文另类| 不卡的av在线| 一区二区三区中文字幕精品精品| 在线免费观看日本一区| 亚洲二区在线视频| 91麻豆精品国产自产在线观看一区| 日本不卡一区二区三区高清视频| 欧美电影免费观看完整版| 国产在线精品国自产拍免费| 久久久不卡网国产精品一区| 成人h动漫精品一区二| 亚洲最大成人网4388xx| 欧美一区2区视频在线观看| 精品在线亚洲视频| 国产精品伦一区| 欧美午夜精品久久久久久孕妇| 日韩在线一区二区三区| 久久久久久夜精品精品免费| 99综合影院在线| 日韩精品一级中文字幕精品视频免费观看| 日韩欧美在线123| 成人av在线电影| 图片区小说区国产精品视频| 精品国产乱码久久久久久久| 北岛玲一区二区三区四区| 性欧美疯狂xxxxbbbb| www一区二区| 色成年激情久久综合| 麻豆成人久久精品二区三区红| 久久一区二区视频| 色婷婷精品久久二区二区蜜臂av| 日韩综合小视频| 国产精品久久久久婷婷二区次| 在线亚洲精品福利网址导航| 国产自产2019最新不卡| 亚洲欧美日韩人成在线播放| 欧美xxx久久| 色系网站成人免费| 激情小说亚洲一区| 亚洲午夜激情网站| 国产亚洲制服色| 欧美日韩一区国产| 国产成人亚洲综合a∨猫咪| 亚洲成人先锋电影| 国产欧美日韩中文久久| 欧美日韩一区二区在线视频| 成人网在线播放| 日本美女一区二区三区视频| 18成人在线观看| 精品国产一区二区精华| 欧美在线免费观看亚洲| 成人免费电影视频| 精品一区二区在线播放| 婷婷成人综合网| 亚洲精品欧美激情| 欧美国产激情一区二区三区蜜月| 欧美人狂配大交3d怪物一区|