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

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

?? fx2hid.c

?? 開發EZUSB的FX2的固件程序的源代碼
?? C
字號:
#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		0x71
#define LED_ADDR		0x72

#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; 
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
   
   ((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一区二区三区免费野_久草精品视频
www.亚洲色图| 欧美一区二区网站| 欧美一级片免费看| 中文欧美字幕免费| 日本午夜一本久久久综合| 成人免费视频一区二区| 欧美一区二区在线播放| 一区二区三区视频在线看| 高清在线不卡av| 日韩一级在线观看| 伊人夜夜躁av伊人久久| 国产a视频精品免费观看| 欧美一区二区在线视频| 亚洲午夜久久久久久久久久久| 国产在线一区二区| 91精品国产91综合久久蜜臀| 国产精品久久久久久一区二区三区| 蜜臀a∨国产成人精品| 欧美伊人久久久久久久久影院| 国产精品麻豆视频| 国产主播一区二区三区| 欧美成人午夜电影| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲国产精品久久人人爱| 国产盗摄视频一区二区三区| 日韩欧美色电影| 石原莉奈一区二区三区在线观看| 色综合中文字幕| 福利一区在线观看| 久久这里只有精品6| 日本欧美一区二区| 91精品婷婷国产综合久久竹菊| 亚洲综合小说图片| 欧洲av在线精品| 亚洲宅男天堂在线观看无病毒| 91亚洲精华国产精华精华液| 中文字幕一区二区三区蜜月| caoporn国产精品| 国产精品美女久久久久av爽李琼| 成人av在线播放网址| 欧美国产1区2区| 99精品在线免费| 一区二区三区免费| 欧美日产国产精品| 日本网站在线观看一区二区三区| 日韩美女一区二区三区| 国产自产高清不卡| 综合激情网...| 欧美午夜电影网| 日本中文字幕不卡| 国产亚洲一区二区三区四区 | 97精品国产97久久久久久久久久久久| 国产欧美日韩综合| 欧美顶级少妇做爰| 国产麻豆精品在线观看| 综合婷婷亚洲小说| 91麻豆精品91久久久久同性| 国产一区二区主播在线| 亚洲欧洲精品一区二区三区 | 日本精品一区二区三区四区的功能| 一区二区三区在线视频免费| 5858s免费视频成人| 国产一区二区三区| 一区二区三区国产精华| 欧美一区2区视频在线观看| 国产福利91精品| 亚洲18女电影在线观看| 国产亚洲精品精华液| 欧美午夜精品一区| 国产精品一二三区| 无吗不卡中文字幕| 亚洲国产精品激情在线观看| 欧美理论电影在线| 粗大黑人巨茎大战欧美成人| 亚洲成人福利片| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品乱码妇女bbbb| 欧美精品色一区二区三区| 丁香六月综合激情| 日韩精品乱码av一区二区| 国产精品人成在线观看免费| 5566中文字幕一区二区电影 | 国产精品99久久久久久久女警| 一区二区三区自拍| 久久久久97国产精华液好用吗| 欧美网站一区二区| 成人蜜臀av电影| 久久99国产精品尤物| 亚洲一区在线视频| 亚洲欧美在线另类| 久久奇米777| 日韩欧美美女一区二区三区| 在线观看免费亚洲| 91免费观看视频| 粉嫩av一区二区三区在线播放| 毛片一区二区三区| 日韩精品亚洲专区| 五月天激情小说综合| 亚洲激情在线播放| 亚洲色图视频网| 亚洲国产成人自拍| 欧美激情一区二区三区全黄 | 韩国成人精品a∨在线观看| 三级欧美在线一区| 亚洲福利视频三区| 亚洲国产成人高清精品| 亚洲女人****多毛耸耸8| 最近中文字幕一区二区三区| 日本一区二区视频在线观看| 欧美www视频| 欧美一级片在线| 日韩欧美高清dvd碟片| 欧美一级淫片007| 制服丝袜国产精品| 在线电影国产精品| 欧美一区二区性放荡片| 777精品伊人久久久久大香线蕉| 欧美日韩国产首页在线观看| 欧美精品aⅴ在线视频| 欧美巨大另类极品videosbest | 国产麻豆视频精品| 国产精品一区二区在线看| 国产精品一区二区三区乱码| 国产九色精品成人porny| 国产乱码精品一品二品| 成人午夜伦理影院| 91影院在线观看| 欧洲视频一区二区| 欧美浪妇xxxx高跟鞋交| 欧美一级欧美一级在线播放| 日韩女优视频免费观看| 国产欧美视频一区二区三区| 最新国产の精品合集bt伙计| 亚洲成a人在线观看| 美女视频一区二区| 国产精品亚洲午夜一区二区三区 | 最好看的中文字幕久久| 亚洲综合丁香婷婷六月香| 日本美女视频一区二区| 久久成人18免费观看| 国产成人夜色高潮福利影视| 91丨九色丨蝌蚪丨老版| 欧美日韩精品一区二区三区四区| 日韩精品一区二区三区四区| 久久久久九九视频| 亚洲精品美腿丝袜| 美女在线视频一区| 成人激情电影免费在线观看| 欧美性xxxxxxxx| 久久综合九色综合97_久久久| 国产精品毛片高清在线完整版| 亚洲第一av色| 成人av网站在线| 欧美美女bb生活片| 国产精品无遮挡| 婷婷久久综合九色国产成人| 国产乱人伦偷精品视频不卡| 色婷婷av一区| 久久久精品国产免费观看同学| 亚洲青青青在线视频| 久久国产精品99精品国产| 成人av免费在线| 日韩精品最新网址| 亚洲免费av在线| 国产成人综合网站| 欧美一区二区三区小说| 亚洲欧美日韩国产中文在线| 国产中文字幕精品| 欧美久久一二三四区| 亚洲欧洲中文日韩久久av乱码| 久久国产精品第一页| 欧美日韩成人一区| 亚洲精品成人a在线观看| 国产精品自拍在线| 日韩午夜中文字幕| 亚洲一二三四在线| 成人免费看片app下载| 久久免费偷拍视频| 日韩中文字幕区一区有砖一区| 一本大道久久精品懂色aⅴ| 久久久久国产成人精品亚洲午夜| 日韩成人免费在线| 欧美性受极品xxxx喷水| 中文字幕在线不卡| 国产精品一区免费视频| 精品国产免费一区二区三区四区| 丝袜诱惑亚洲看片| 欧美三级欧美一级| 亚洲综合免费观看高清在线观看| 99精品一区二区| 欧美韩国一区二区| 国产乱码精品一区二区三 | 91精品国产欧美一区二区18| 一区二区三区四区不卡在线| 91丨九色丨国产丨porny| 国产精品国产三级国产aⅴ无密码| 国产一区二区女| 国产亚洲短视频| 国产麻豆精品在线| 欧美国产精品一区二区三区|