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

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

?? fx2hid.c.bak

?? 開發EZUSB的FX2的固件程序的源代碼
?? BAK
字號:
#pragma NOIV               // Do not generate interrupt vectors
/*
-----------------------------------------------------------------------------
   File:      usbhidio_fx2.c
   Contents:   Hooks required to implement USB peripheral function.

   This is an adaptation of the Cypress example FX2_Hid_Keyboard.c,
   which was in turn adapted from Cypress's bulkloop.c 
   (and is available on request from Cypress).

   The application communicates with the usbhdio host applications available from:
 
   www.Lvr.com/hidpage.htm

   This code requires the full (not evaluation) version of the Keil compiler.
   Additions to the keyboard code are labeled with "usbhidio start" and "usbhidio end"
   Unneeded keyboard code is commented out.
  
   Copyright (c) 2000 Cypress Semiconductor All rights reserved
   with some changes by Jan Axelson (jan@Lvr.com) 
-----------------------------------------------------------------------------
*/

#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;

#define	min(a,b) (((a)<(b))?(a):(b))

#define GD_HID	0x21
#define GD_REPORT	0x22
#define CR_SET_REPORT 0x09
#define HID_OUTPUT_REPORT 2

#define BTN_ADDR		0x41
#define LED_ADDR		0x42

#define PF_IDLE			0
#define PF_GETKEYS		1

#define KEY_WAKEUP		0
#define KEY_F1			1
#define KEY_F2			2
#define KEY_F3			3

WORD	pHIDDscr;
WORD	pReportDscr;
WORD	pReportDscrEnd;
extern code HIDDscr;
extern code REPORTDSCR ReportDscr; 
extern code ReportDscrEnd;

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

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

BYTE buttons;
BYTE oldbuttons;
BYTE leds = 0xFF;

BYTE read_buttons (void);
void write_leds (BYTE d);

#define VR_NAKALL_ON    0xD0
#define VR_NAKALL_OFF   0xD1
//-----------------------------------------------------------------------------
// Task Dispatcher hooks
//   The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------

// read_buttons and write_leds are unused by usbhidio
/*
BYTE read_buttons (void)
{
	BYTE d;

	while (I2CS & 0x40);	//Wait for stop to be done
	I2CS = 0x80;			//Set start condition
	I2DAT = BTN_ADDR;		//Write button address
	while (!(I2CS & 0x01));	//Wait for done
	I2CS = 0x20;			//Set last read
	d = I2DAT;				//Dummy read
	while (!(I2CS & 0x01));	//Wait for done
	I2CS = 0x40;			//Set stop bit
	return(I2DAT);			//Read the data
}


void write_leds (BYTE d)
{
	while (I2CS & 0x40);	//Wait for stop to be done
	I2CS = 0x80;			//Set start condition
	I2DAT = LED_ADDR;		//Write led address
	while (!(I2CS & 0x01));	//Wait for done
	I2DAT = d;				//Write data
	while (!(I2CS & 0x01));	//Wait for done
	I2CS = 0x40;			//Set stop bit
}
*/


void TD_Init(void)             // Called once at startup
{
   // set the CPU clock to 48MHz
   CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;

   // set the slave FIFO interface to 48MHz
   IFCONFIG |= 0x40;

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

  // default: all endpoints have their VALID bit set
  // default: TYPE1 = 1 and TYPE0 = 0 --> BULK  
  // default: EP2 and EP4 DIR bits are 0 (OUT direction)
  // default: EP6 and EP8 DIR bits are 1 (IN direction)
  // default: EP2, EP4, EP6, and EP8 are double buffered

  // we are just using the default values, yes this is not necessary...
  EP1OUTCFG = 0xA0;
  EP1INCFG = 0xA0;
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA2;
  SYNCDELAY;                    
  EP4CFG = 0xA0;
  SYNCDELAY;                    
  EP6CFG = 0xE2;
  SYNCDELAY;                    
  EP8CFG = 0xE0;

  // out endpoints do not come up armed
  
  // since the defaults are double buffered we must write dummy byte counts twice
  SYNCDELAY;                    
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP2BCL = 0x80;
  SYNCDELAY;                    
  EP4BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP4BCL = 0x80;    

  // enable dual autopointer feature
  AUTOPTRSETUP |= 0x01;

  Rwuen = TRUE;                 // Enable remote-wakeup

}


void TD_Poll(void)              // Called repeatedly while the device is idle
{
	if( !(EP1INCS & 0x02) )	// Is the EP1INBUF available,
	{

//		This keyboard code is unneeded
/*	
	buttons = read_buttons();
		if (buttons == read_buttons())	//Debounce
		{
			buttons &= 0x0F;
			if ((oldbuttons - buttons) != 0)	//Change in button state
			{
				if (buttons & 1)	//Shift
					EP1INBUF[0] = 0;
				else
					EP1INBUF[0] = 2;
				if (buttons & 2)	//a
					EP1INBUF[2] = 0;
				else
					EP1INBUF[2] = 4;
				if (buttons & 4)	//b
					EP1INBUF[3] = 0;
				else
					EP1INBUF[3] = 5;
				if (buttons & 8)	//c
					EP1INBUF[4] = 0;
				else
					EP1INBUF[4] = 6;
				EP1INBUF[1] = 0;
				EP1INBC = 5;
			}
			oldbuttons = buttons;
		}
*/
	}
	if( !(EP1OUTCS & 0x02) )	// Is there something available in EP1OUTBUF
	{

//		This keyboard code is unneeded by usbhidio
/*
		leds = 0xFF;	//Turn all off
		if (EP1OUTBUF[0] & 0x02)	//Caps
			leds &= 0xBF;
		if (EP1OUTBUF[0] & 0x01)	//Scroll
			leds &= 0xF7;
		if (EP1OUTBUF[0] & 0x04)	//Num
			leds &= 0xFE;
		write_leds (leds);
*/

// usbhidio code start

// Copy bytes received on the OUT endpoint to the IN endpoint. 
		EP1INBUF[0] = EP1OUTBUF[0];
		EP1INBUF[1] = EP1OUTBUF[1];

// Rearm the IN endpoint buffer to enable sending a report.
// The value equals the report size.
		EP1INBC = 2;			

// usbhidiocode end

		EP1OUTBC = 0;				//Rearm the OUT endpoint buffer to enable receiving a report.

	} 
}

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
{
   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;
   EP0BCH = 0;
   EP0BCL = 1;
   return(TRUE);            // Handled by user code
}

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);
}

//-----------------------------------------------------------------------------
// 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
{
   // whenever we get a USB reset, we should revert to full speed mode
   pConfigDscr = pFullSpeedConfigDscr;
   ((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
   pOtherConfigDscr = pHighSpeedConfigDscr;
   ((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;

   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;
      ((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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男女性色大片免费观看一区二区 | 久久电影网站中文字幕| 亚洲精品一区在线观看| 色欧美乱欧美15图片| 精品一区二区日韩| 一区二区欧美国产| 国产精品污www在线观看| 日韩一区二区三区电影在线观看| 久久在线观看免费| 在线国产亚洲欧美| 成人综合激情网| 免费精品视频在线| 一区二区三区在线视频播放| 国产日产欧美一区二区三区 | 欧美久久一二区| 99麻豆久久久国产精品免费优播| 日本在线不卡视频| 一区二区三区免费网站| 国产人妖乱国产精品人妖| 日韩无一区二区| 欧美四级电影在线观看| 一本到不卡精品视频在线观看| 国产一区二区精品在线观看| 青青草成人在线观看| 亚洲va中文字幕| 亚洲欧美激情小说另类| 国产精品女人毛片| 国产午夜亚洲精品理论片色戒| 欧美一区二区三区白人| 欧美日韩成人综合天天影院| 欧美亚洲一区二区三区四区| 91香蕉视频污在线| 成+人+亚洲+综合天堂| 国模冰冰炮一区二区| 久久国产精品99精品国产| 日韩专区中文字幕一区二区| 日韩影院在线观看| 亚洲高清免费观看| 99这里都是精品| 成人免费毛片片v| 成人av网站在线观看| 成人综合在线视频| 高清beeg欧美| 99久久精品免费| 不卡在线观看av| 97se亚洲国产综合自在线不卡 | 91精品国产一区二区| 91精品国产91久久久久久最新毛片| 色婷婷久久综合| 在线精品视频小说1| 欧美日韩中文国产| 91精品婷婷国产综合久久| 欧美一二三区在线观看| 久久综合狠狠综合久久激情 | 中文字幕一区二区三区在线播放| 国产清纯美女被跳蛋高潮一区二区久久w | 91美女蜜桃在线| 色拍拍在线精品视频8848| 国产精品免费视频一区| 综合欧美亚洲日本| 伊人色综合久久天天人手人婷| 亚洲国产一区二区三区| 亚洲福中文字幕伊人影院| 日韩电影在线看| 韩国午夜理伦三级不卡影院| 国产69精品久久99不卡| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品国产免费一区二区三区香蕉| 久久精品一区八戒影视| 国产精品久久免费看| 亚洲夂夂婷婷色拍ww47| 免费成人性网站| 成人免费视频视频在线观看免费| 在线看日韩精品电影| 精品久久一区二区| 国产精品国产自产拍高清av| 亚洲va欧美va人人爽| 国产一区中文字幕| 色嗨嗨av一区二区三区| 精品国产精品一区二区夜夜嗨| 国产精品素人视频| 肉丝袜脚交视频一区二区| 国产.精品.日韩.另类.中文.在线.播放| av福利精品导航| 91麻豆精品91久久久久同性| 国产精品美女久久久久高潮| 视频一区二区不卡| 高清av一区二区| 日韩一级完整毛片| 亚洲特级片在线| 久久99精品久久久久久久久久久久| 99视频精品全部免费在线| 欧美一区日韩一区| 亚洲欧美激情插| 国产精品影视网| 欧美精品电影在线播放| 国产精品国产三级国产普通话蜜臀| 香蕉成人伊视频在线观看| 国产成人高清在线| 337p亚洲精品色噜噜狠狠| 国产精品区一区二区三| 日韩电影免费在线看| 91麻豆产精品久久久久久| 欧美精品一区二区三区蜜桃视频| 久久人人97超碰com| 麻豆成人免费电影| 亚洲视频一二三| 美日韩一区二区三区| 色先锋资源久久综合| 久久综合九色综合欧美98| 国产宾馆实践打屁股91| 欧美日韩aaa| 国产精品欧美综合在线| 久久 天天综合| 欧美精品一级二级三级| 国产精品久久久久久久久果冻传媒 | 99九九99九九九视频精品| 在线观看亚洲成人| 欧美国产日产图区| 国产在线精品免费av| 欧美色欧美亚洲另类二区| 国产女人18毛片水真多成人如厕 | 7777精品伊人久久久大香线蕉| 中文字幕中文乱码欧美一区二区 | 欧美日韩国产在线播放网站| 亚洲美女视频在线| 粉嫩欧美一区二区三区高清影视 | 中文字幕亚洲一区二区va在线| 午夜精品福利一区二区蜜股av| 91丝袜高跟美女视频| 久久免费电影网| 国产精品综合av一区二区国产馆| 欧美成人三级在线| 狠狠v欧美v日韩v亚洲ⅴ| 91精品国产综合久久久久| 天堂成人免费av电影一区| 欧美日韩一区小说| 首页国产欧美久久| 亚洲另类色综合网站| 色诱视频网站一区| 亚洲综合免费观看高清在线观看| 色婷婷精品久久二区二区蜜臂av| 亚洲欧美日韩精品久久久久| 成人动漫av在线| 国产精品久久久久毛片软件| 不卡一区在线观看| 亚洲视频图片小说| 99国产精品久久久久久久久久| 精品粉嫩超白一线天av| 久久99热这里只有精品| 精品三级在线看| 国产精品99久久久久久久vr| 国产女人18毛片水真多成人如厕 | 不卡免费追剧大全电视剧网站| 国产精品久久99| 91美女片黄在线观看| 一二三区精品视频| 欧美日韩小视频| 亚洲第一成人在线| 欧美一级黄色录像| 国产精品中文字幕一区二区三区| 国产精品国产三级国产有无不卡| 91免费看`日韩一区二区| 18成人在线视频| 91蝌蚪porny| 婷婷综合另类小说色区| 91精品国产综合久久精品app| 精品一区二区免费在线观看| 国产精品每日更新| 日本精品裸体写真集在线观看 | 国产精品传媒入口麻豆| 色先锋aa成人| 亚洲.国产.中文慕字在线| 欧美亚洲国产一区在线观看网站| 欧美视频一二三区| 亚洲午夜精品在线| 精品福利在线导航| 国产a精品视频| 亚洲一区二区三区四区不卡| 日韩精品影音先锋| 国产综合一区二区| 亚洲永久免费av| 日韩一区和二区| 国产成人高清在线| 日韩在线播放一区二区| 国产欧美精品区一区二区三区| 在线一区二区观看| 日韩av在线发布| 亚洲欧美在线另类| 日韩一区二区精品| 97精品国产97久久久久久久久久久久 | 91在线免费视频观看| 日韩制服丝袜先锋影音| 久久麻豆一区二区| 欧美久久免费观看| 国产精品一区二区久久精品爱涩| 一区二区在线看| 久久久久久久久一| 在线观看国产91| 丁香亚洲综合激情啪啪综合|