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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 學習USB2.0驅動程序設計源碼
?? C
字號:
#include "testheader.h"
#define ALLOCATE_EXTERN    
#include "testregs.h"
#include <stdio.h>

// Constants
#define DELAY_COUNT   0x9248*8L  
#define _IFREQ  48000            
#define _CFREQ  48000            

// Random Macros
#define   min(a,b) (((a)<(b))?(a):(b))
#define   max(a,b) (((a)>(b))?(a):(b))

#include "testdly.h"

// Global Variables
volatile BOOL   GotSUD;
BOOL      Rwuen;
BOOL      Selfpwr;
volatile BOOL   Sleep;     

WORD   pDeviceDscr;   
WORD   pDeviceQualDscr;
WORD   pHighSpeedConfigDscr;
WORD   pFullSpeedConfigDscr;   
WORD   pConfigDscr;
WORD   pOtherConfigDscr;   
WORD   pStringDscr;   

// Prototypes
void ParseControlTransfer(void);
void TD_Init(void);
void TD_Poll(void);
BOOL TD_Suspend(void);
BOOL TD_Resume(void);

BOOL DR_GetDescriptor(void);
BOOL DR_SetConfiguration(void);
BOOL DR_GetConfiguration(void);
BOOL DR_SetInterface(void);
BOOL DR_GetInterface(void);
BOOL DR_GetStatus(void);
BOOL DR_ClearFeature(void);
BOOL DR_SetFeature(void);
BOOL DR_VendorCmnd(void);

void UsbDisconnect(BOOL renum);
void EZUSB_Delay(WORD ms);
extern void EZUSB_DELAY1MS(void); 
extern void EZUSB_Susp(void);  
void EZUSB_Resume(void);
STRINGDSCR xdata *	EZUSB_GetStringDscr(BYTE StrIdx);

const char code  EPCS_Offset_Lookup_Table[] =
{
   0,    
   1,    
   2,    
   2,    
   3,    
   3,    
   4,    
   4,    
   5,    
   5,    
};

#define epcs(EP) (EPCS_Offset_Lookup_Table[(EP & 0x7E) | (EP > 128)] + 0xE6A1)

void main(void)
{
   DWORD   i;
   WORD   offset;
   DWORD   DevDescrLen;
   DWORD   j=0;
   WORD   IntDescrAddr;
   WORD   ExtDescrAddr;

   Sleep = FALSE;         
   Rwuen = FALSE;         
   Selfpwr = FALSE;       
   GotSUD = FALSE;        

   TD_Init();

   pDeviceDscr = (WORD)&DeviceDscr;
   pDeviceQualDscr = (WORD)&DeviceQualDscr;
   pHighSpeedConfigDscr = (WORD)&HighSpeedConfigDscr;
   pFullSpeedConfigDscr = (WORD)&FullSpeedConfigDscr;
   pStringDscr = (WORD)&StringDscr;

   if ((WORD)&DeviceDscr & 0xe000)
   {
      IntDescrAddr = INTERNAL_DSCR_ADDR;
      ExtDescrAddr = (WORD)&DeviceDscr;
      DevDescrLen = (WORD)&UserDscr - (WORD)&DeviceDscr + 2;
      for (i = 0; i < DevDescrLen; i++)
         *((BYTE xdata *)IntDescrAddr+i) = 0xCD;
      for (i = 0; i < DevDescrLen; i++)
         *((BYTE xdata *)IntDescrAddr+i) = *((BYTE xdata *)ExtDescrAddr+i);
      pDeviceDscr = IntDescrAddr;
      offset = (WORD)&DeviceDscr - INTERNAL_DSCR_ADDR;
      pDeviceQualDscr -= offset;
      pConfigDscr -= offset;
      pOtherConfigDscr -= offset;
      pHighSpeedConfigDscr -= offset;
      pFullSpeedConfigDscr -= offset;
      pStringDscr -= offset;
   }

   EZUSB_IRQ_ENABLE();           
   EZUSB_ENABLE_RSMIRQ();        

   INTSETUP |= (bmAV2EN | bmAV4EN);  

   USBIE |= bmSUDAV | bmSUTOK | bmSUSP | bmURES | bmHSGRANT;  
   EA = 1;     

#ifndef NO_RENUM
   if(!(USBCS & bmRENUM))
   {
       UsbDisconnect(TRUE); 
   }
#endif

   USBCS &=~bmDISCON;

   CKCON = (CKCON&(~bmSTRETCH)) | FW_STRETCH_VALUE; 

   Sleep = FALSE;

   while(TRUE)             
   {
      if(GotSUD)           
      {
         ParseControlTransfer();    
           GotSUD = FALSE;          
      }

      if (Sleep)
          {
          if(TD_Suspend())
              { 
              Sleep = FALSE;   
              do
                  {
                    EZUSB_Susp(); 
                  }
                while(!Rwuen && EZUSB_EXTWAKEUP());

             EZUSB_Resume();  
             TD_Resume();
              }   
          }
      TD_Poll();
   }
}

void ParseControlTransfer(void)
{
   void   *dscr_ptr;

   switch(SETUPDAT[1])
   {
      case SC_GET_DESCRIPTOR:  
         if(DR_GetDescriptor())
            switch(SETUPDAT[3])         
            {
               case GD_DEVICE: 
                  SUDPTRH = MSB(pDeviceDscr);
                  SUDPTRL = LSB(pDeviceDscr);
                  break;
               case GD_DEVICE_QUALIFIER:   
                  SUDPTRH = MSB(pDeviceQualDscr);
                  SUDPTRL = LSB(pDeviceQualDscr);
                  break;
               case GD_CONFIGURATION:      
                  SUDPTRH = MSB(pConfigDscr);
                  SUDPTRL = LSB(pConfigDscr);
                  break;
               case GD_OTHER_SPEED_CONFIGURATION: 
                  SUDPTRH = MSB(pOtherConfigDscr);
                  SUDPTRL = LSB(pOtherConfigDscr);
                  break;
               case GD_STRING:      
                  if(dscr_ptr = (void *)EZUSB_GetStringDscr(SETUPDAT[2]))
                  {
                     SUDPTRH = MSB(dscr_ptr);
                     SUDPTRL = LSB(dscr_ptr);
                  }
                  else 
                     EZUSB_STALL_EP0(); 
                  break;
               default:       
                  EZUSB_STALL_EP0();    
            }
         break;
      case SC_GET_INTERFACE:            
         DR_GetInterface();
         break;
      case SC_SET_INTERFACE:            
         DR_SetInterface();
         break;
      case SC_SET_CONFIGURATION:        
         DR_SetConfiguration();
         break;
      case SC_GET_CONFIGURATION:        
         DR_GetConfiguration();
         break;
      case SC_GET_STATUS:               
         if(DR_GetStatus())
            switch(SETUPDAT[0])
            {
               case GS_DEVICE:          
                  EP0BUF[0] = ((BYTE)Rwuen << 1) | (BYTE)Selfpwr;
                  EP0BUF[1] = 0;
                  EP0BCH = 0;
                  EP0BCL = 2;
                  break;
               case GS_INTERFACE:       
                  EP0BUF[0] = 0;
                  EP0BUF[1] = 0;
                  EP0BCH = 0;
                  EP0BCL = 2;
                  break;
               case GS_ENDPOINT:        
                  EP0BUF[0] = *(BYTE xdata *) epcs(SETUPDAT[4]) & bmEPSTALL;
                  EP0BUF[1] = 0;
                  EP0BCH = 0;
                  EP0BCL = 2;
                  break;
               default:       
                  EZUSB_STALL_EP0();  
            }
         break;
      case SC_CLEAR_FEATURE:          
         if(DR_ClearFeature())
            switch(SETUPDAT[0])
            {
               case FT_DEVICE:        
                  if(SETUPDAT[2] == 1)
                     Rwuen = FALSE;   
                  else
                     EZUSB_STALL_EP0(); 
                  break;
               case FT_ENDPOINT:        
                  if(SETUPDAT[2] == 0)
                  {
                     *(BYTE xdata *) epcs(SETUPDAT[4]) &= ~bmEPSTALL;
                     EZUSB_RESET_DATA_TOGGLE( SETUPDAT[4] );
                  }
                  else
                     EZUSB_STALL_EP0(); 
                  break;
            }
         break;
      case SC_SET_FEATURE:              
         if(DR_SetFeature())
            switch(SETUPDAT[0])
            {
               case FT_DEVICE:          
                  if(SETUPDAT[2] == 1)
                     Rwuen = TRUE;      
                  else if(SETUPDAT[2] == 2)
                     break;
                  else
                     EZUSB_STALL_EP0();  
                  break;
               case FT_ENDPOINT:         
                  *(BYTE xdata *) epcs(SETUPDAT[4]) |= bmEPSTALL;
                  break;
            }
         break;
      default:                 
         if(DR_VendorCmnd())
            EZUSB_STALL_EP0(); 
   }

   EP0CS |= bmHSNAK;
}

void UsbDisconnect(BOOL renum)
{
   if(renum)                              
      USBCS |= (bmDISCON | bmRENUM);      
   else
      USBCS |= bmDISCON;    
		
   EZUSB_Delay(1500);    

   USBIRQ = 0xff;        
   EPIRQ = 0xff;
   EZUSB_IRQ_CLEAR();

   USBCS &=~bmDISCON;    
}

void EZUSB_Delay(WORD ms)
{
   if ((CPUCS & bmCLKSPD) == 0)          
      ms = (ms + 1) / 2;                 
   else if ((CPUCS & bmCLKSPD) == bmCLKSPD1) 
      ms = ms * 2;

	while(ms--) ;
		EZUSB_DELAY1MS();
}

STRINGDSCR xdata * EZUSB_GetStringDscr(BYTE StrIdx)
{
	STRINGDSCR xdata *	dscr;

	dscr = (STRINGDSCR xdata *) pStringDscr;

	while(dscr->type == STRING_DSCR)
	{
		if(!StrIdx--)
			return(dscr);
		dscr = (STRINGDSCR xdata *)((WORD)dscr + dscr->length);
	}

	return(NULL);
}

void EZUSB_Resume(void)
{
	if( ((WAKEUPCS & bmWUEN)&&(WAKEUPCS & bmWU)) ||  
		((WAKEUPCS & bmWU2EN)&&(WAKEUPCS & bmWU2)) )
	{
		USBCS |= bmSIGRESUME;
		EZUSB_Delay(20);
		USBCS &= ~bmSIGRESUME;
	}
}

void resume_isr(void) interrupt WKUP_VECT
{
   EZUSB_CLEAR_RSMIRQ();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩久久久久久| 亚洲欧美另类久久久精品 | 久久奇米777| 国产视频一区二区三区在线观看| 久久精品亚洲麻豆av一区二区| 精品成人免费观看| 久久综合给合久久狠狠狠97色69| 国产人成一区二区三区影院| 国产精品国产精品国产专区不片| 中文字幕在线一区二区三区| 亚洲成人精品在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国产一区二区三区四区在线观看| 成人污污视频在线观看| 欧美精品在线观看一区二区| 久久蜜桃av一区精品变态类天堂| 综合久久给合久久狠狠狠97色 | 国产精品久久久久aaaa| 亚洲h动漫在线| 丁香五精品蜜臀久久久久99网站 | 午夜久久福利影院| 成人av动漫在线| 欧美一区二区三区视频免费| 中文无字幕一区二区三区| 亚洲成人av福利| 成人国产精品免费观看动漫| 日韩欧美成人一区| 亚洲尤物视频在线| 不卡一区二区三区四区| 日韩女优av电影在线观看| 亚洲精品日韩专区silk| 国产福利一区二区三区视频| 欧美一区二区三区四区久久| 亚洲国产日韩一级| 色婷婷综合视频在线观看| 国产三级精品三级在线专区| 久久精品国产精品青草| 欧美肥妇free| 日韩电影一区二区三区四区| 欧美在线视频你懂得| 亚洲人成网站精品片在线观看| 成人黄色免费短视频| 国产调教视频一区| 成人免费视频一区二区| 欧美韩日一区二区三区四区| 国产一区二区女| 国产亚洲婷婷免费| 成人在线视频一区| 最新热久久免费视频| 色呦呦网站一区| 亚洲午夜久久久久久久久久久| 日本精品一区二区三区四区的功能| 亚洲六月丁香色婷婷综合久久| 97久久精品人人澡人人爽| 亚洲三级电影全部在线观看高清| 色综合久久中文综合久久97| 久久精品国产第一区二区三区| 亚洲成人一区二区| 一区二区免费看| 中文无字幕一区二区三区| 精品福利一区二区三区免费视频| 亚洲欧美福利一区二区| 色婷婷久久久亚洲一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 毛片av一区二区| 亚洲色图欧美在线| 精品国产91亚洲一区二区三区婷婷 | 成人国产一区二区三区精品| 亚洲午夜电影在线观看| 国产欧美视频在线观看| 欧美色老头old∨ideo| 成人高清免费观看| 琪琪久久久久日韩精品| 亚洲老司机在线| 久久久久国产精品厨房| 欧美精品xxxxbbbb| 欧美三区在线视频| 国产成人精品免费| 国产亚洲综合色| 色综合天天综合给合国产| 天堂蜜桃91精品| 欧美成人女星排名| 94-欧美-setu| 亚洲午夜视频在线| 国产精品入口麻豆九色| 欧美日韩在线免费视频| 久久99九九99精品| 亚洲成在线观看| 亚洲二区在线视频| 一区二区三区在线免费| 欧美韩日一区二区三区| 欧美刺激脚交jootjob| 欧美性色综合网| 99热这里都是精品| 国产一区91精品张津瑜| 蜜臀久久99精品久久久画质超高清 | www.亚洲色图.com| 成人免费视频国产在线观看| 国产麻豆精品在线| 国产伦精品一区二区三区免费迷| 日本中文字幕一区二区视频 | 99久久免费精品| 成人动漫在线一区| 国产91清纯白嫩初高中在线观看| 国产精品一区二区久激情瑜伽| 久久丁香综合五月国产三级网站| 奇米一区二区三区| 国产成人啪午夜精品网站男同| 国产一区在线精品| 高清成人免费视频| 色婷婷狠狠综合| 91精品福利在线一区二区三区 | 久久免费的精品国产v∧| 国产欧美视频在线观看| 亚洲精品中文在线影院| 亚洲韩国一区二区三区| 久久99久久久久久久久久久| 狠狠久久亚洲欧美| 色爱区综合激月婷婷| 欧美精品一级二级| 久久精品亚洲乱码伦伦中文 | 一区二区在线观看免费| 日韩在线一区二区三区| 国产乱码字幕精品高清av| 91在线看国产| 2020日本不卡一区二区视频| 欧美国产精品一区二区三区| 亚洲精品国久久99热| 久久激情综合网| 99精品国产视频| 日韩女优毛片在线| 亚洲精品成人少妇| 久久国产日韩欧美精品| 色哟哟国产精品免费观看| 久久嫩草精品久久久精品一| 婷婷综合另类小说色区| 一本色道久久加勒比精品 | 亚洲色图制服诱惑| 国产在线精品免费av| 欧美美女bb生活片| 成人免费一区二区三区在线观看| 日韩中文欧美在线| 欧洲国内综合视频| 亚洲欧美在线视频| 不卡视频一二三四| 国产欧美日韩在线观看| 精品一区二区日韩| 欧美日韩国产区一| 午夜伊人狠狠久久| 欧美主播一区二区三区美女| 亚洲免费成人av| 一本到不卡免费一区二区| 日本一二三四高清不卡| 国产制服丝袜一区| 日韩欧美一二区| 国产真实乱对白精彩久久| 制服丝袜成人动漫| 日一区二区三区| 精品少妇一区二区三区视频免付费| 日精品一区二区三区| 日本高清不卡视频| 天堂成人免费av电影一区| 欧美日韩三级视频| 蜜臀国产一区二区三区在线播放| 精品久久久久99| 91在线免费视频观看| 亚洲在线中文字幕| 欧美日韩亚洲综合在线| 色婷婷亚洲精品| 午夜精品福利一区二区三区蜜桃| 日韩美女视频在线| 成人精品免费网站| 亚洲国产视频网站| 欧美一卡二卡在线| 国产高清不卡二三区| 一区二区三区久久| 日韩欧美国产wwwww| 91在线观看一区二区| 三级欧美韩日大片在线看| 亚洲精品一线二线三线无人区| a在线播放不卡| 日本不卡一二三| 国产精品久久久久久久久免费樱桃 | 一区二区免费看| 国产午夜精品久久久久久久| 欧美亚洲愉拍一区二区| 国产伦精品一区二区三区视频青涩| 国产精品久久国产精麻豆99网站| 在线观看不卡一区| 国产成a人亚洲精| 日日夜夜免费精品视频| 亚洲欧洲国产日本综合| 久久久久久影视| 日韩免费成人网| 欧美在线999| 99re视频精品| 成人av在线播放网址| 国产成人欧美日韩在线电影| 精品一二三四在线| 免费人成精品欧美精品|