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

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

?? usb_main.c

?? USB CDC and HID composite unit.
?? C
字號(hào):
//-----------------------------------------------------------------------------
// USB_Main.c
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include "USB_Type.h"
#include "USB_Configuration.h"
#include "USB_Register.h"
#include "USB_Descriptor.h"
#include "USB_Standard_Requests.h"
#include "USB_ISR.h"
#include "USB_CDC_UART.h"
#include "FIFO_RW.h"
#include "USB_Main.h"

#if defined KEIL
#include <intrins.h>						// for _testbit_(), _nop_()
#endif // KEIL

//-----------------------------------------------------------------------------
// Definitions
//-----------------------------------------------------------------------------

#if defined C8051F320_H
	#define SYSCLK	24000000L				// SYSCLK frequency in Hz
#endif
#if defined C8051F340_H
	#define SYSCLK	48000000L				// SYSCLK frequency in Hz
#endif

//-----------------------------------------------------------------------------
// 16-bit SFR Definitions
//-----------------------------------------------------------------------------

#if defined KEIL

sfr16 TMR2RL	= 0xca;					// Timer2 reload value
sfr16 TMR2		= 0xcc;					// Timer2 counter

#endif // KEIL

//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------

// port assignment

#if defined KEIL

sbit Sw1  = P2^0;
sbit Sw2  = P2^1;
sbit Led1 = P2^2;							// LED='1' means ON
sbit Led2 = P2^3;

#endif // KEIL

#if defined SDCC

#define Sw1		P2_0
#define Sw2		P2_1
#define Led1	P2_2						// LED='1' means ON
#define Led2	P2_3

#endif // SDCC

static bit Switch1State = FALSE;			// Indicate status of switch
static bit Switch2State = FALSE;			// starting at 0 == off

static bit Toggle1 = FALSE;					// Variable to make sure each button
static bit Toggle2 = FALSE;					// press and release toggles switch

volatile bit switch_changed = FALSE;

// HID loopback support
BYTE xdata HID_InOut_Packet[ HID_IN_REPORT_SIZE ];	// Last packet received from host

//-----------------------------------------------------------------------------
// Static variables in this file
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Local Prototypes
//-----------------------------------------------------------------------------

// Initialization Routines
void Sysclk_Init(void);						// Initialize the system clock
void Port_Init(void);						// Configure ports
void Timer_Init(void);						// Timer 2 for use by ADC and swtiches

//-----------------------------------------------------------------------------
// ISR prototype
//-----------------------------------------------------------------------------
#if defined SDCC

extern void Usb_ISR(void) interrupt 8;
extern void Timer2_ISR(void) interrupt 5;

#endif	// SDCC

//------------------------------------------------------------------------
// startup routine
//------------------------------------------------------------------------

#if defined SDCC

unsigned char _sdcc_external_startup ( void )
{
   PCA0MD &= ~0x40;							// Disable Watchdog timer
   return 0;
}

#endif	// SDCC


//-----------------------------------------------------------------------------
// Main Routine
//-----------------------------------------------------------------------------
void main(void)
{
#if defined KEIL
	PCA0MD &= ~0x40;						// Disable Watchdog timer temporarily
#endif // KEIL
	Sysclk_Init();							// Initialize oscillator
	Port_Init();							// Initialize crossbar and GPIO
	Timer_Init();							// Initialize timer2
	Flush_COMbuffers();						// Initialize COM ring buffer
	Led1 = FALSE;
	Led2 = FALSE;
	Usb0_Init();							// Initialize USB0 - at the end of initizaliation

	EIE1	|= 0x02;						// Enable USB0 interrupt
	IE		|= 0xA0;						// Enable Timer2 and Global Interrupt enable


	while ( 1 ) {							// main loop

		{									// task1 - CDC support
			BYTE dt;
			BYTE line_state;

			CDC_Handle_Bulk_IN();				// Poll IN/OUT EP2 and handle transaction
			CDC_Handle_Bulk_OUT();

			if ( switch_changed )				// Reflect the switch status to DSR and CTS signaling
			{
				switch_changed = FALSE;

				line_state = 0;
				if ( Switch1State ) line_state |= CDC_DSR;
//				if ( Switch2State ) line_state |= CDC_CTS;		// CTS is not supported in generic CDC
				Update_Line_State( line_state );
			}

			while (TXReady && RXReady)			// loop back TX to RX
			{
				dt = COMGetByte();
				COMPutByte( dt );
			}

			Led1 = uart_DTR;					// output line status
			Led2 = uart_RTS;
		}
		{									// task2: USB EP3 handling - HID support
												// loopback from OUT to IN
			unsigned char EUSB0_save;

			if (   (Ep_StatusOUT3 != EP_HALT) && OUT3_FIFO_loaded
				&& (Ep_StatusIN3  != EP_HALT) && IN3_FIFO_empty   ) {
												// To prevent conflict with USB interrupt
				EUSB0_save = EIE1 & 0x02;		//   save USB interrupt enable bit
				EIE1 &= ~0x02;					//   disable USB interrupt temporarily

				OUT3_FIFO_loaded = FALSE;
				IN3_FIFO_empty = FALSE;

				POLL_WRITE_BYTE( INDEX, 3 );	// loop back the data from OUT EP to IN EP
												// unload packet from OUT FIFO
				FIFO_Read_xdata( FIFO_EP3, HID_IN_REPORT_SIZE, HID_InOut_Packet );
				POLL_WRITE_BYTE( EOUTCSRL, 0 );				// Clear Out Packet ready bit
															// load packet to IN FIFO
				FIFO_Write_xdata( FIFO_EP3, HID_OUT_REPORT_SIZE, HID_InOut_Packet );
				POLL_WRITE_BYTE( EINCSRL, rbInINPRDY );		// set FIFO ready flag

				EIE1 |= EUSB0_save;							// restore USB interrupt
			}
		}
	}
}

//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Sysclk_Init
//-----------------------------------------------------------------------------
//
// Initialize the system clock and USB clock
//
//-----------------------------------------------------------------------------

#if defined KEIL
#include <intrins.h>
#endif

static void Sysclk_Init(void)
{
	CLKSEL  =  0x00;					// Set SYSCLK to 12 / 8 MHz
	OSCICN &= ~0x03;
	CLKMUL	=  0x00;					// Select internal oscillator as
										// input to clock multiplier
	CLKMUL |=  0x80;					// Enable clock multiplier
										// delay about 5 us (8 clock)
#if defined KEIL
	_nop_();	_nop_();	_nop_();	_nop_();
	_nop_();	_nop_();	_nop_();	_nop_();
#endif

#if defined SDCC
	_asm
		DIV AB
	_endasm;
#endif

	CLKMUL |=  0xC0;					// Initialize the clock multiplier
	while(!(CLKMUL & 0x20));			// Wait for multiplier to lock

#if defined C8051F320_H
	CLKSEL	= USB_4X_CLOCK | SYS_4X_DIV_2;	// Select system clock and USB clock
#endif // C8051F320_H

#if defined C8051F340_H
	FLSCL  |= 0x10;						// set FLRT for 48MHz SYSCLK
	CLKSEL	= USB_4X_CLOCK | SYS_4X;	// Select system clock and USB clock
#endif // C8051F340_H

}

//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// This function configures the crossbar and GPIO ports.
//
// F320DB
//  P1.7		analog					Potentiometer
//  P2.2		digital	push-pull		LED
//  P2.3		digital	push-pull		LED
//
// F340DB
//  P2.2		digital push-pull		LED
//  P2.3		digital push-pull		LED
//  P2.5		analog					Potentiometer
//-----------------------------------------------------------------------------
static void Port_Init(void)
{

#if defined C8051F320_H
	P1MDIN	 = 0x7F;					// Port 1 pin 7 set as analog input
	P0MDOUT |= 0x0F;					// Port 0 pins 0-3 set push-pull
	P1MDOUT |= 0x0F;					// Port 1 pins 0-3 set push-pull
	P2MDOUT |= 0x0C;					// P2.2 and P2.3 set to push-pull
	P1SKIP	 = 0x80;					// Port 1 pin 7 skipped by crossbar
	XBR0	 = 0x00;
	XBR1	 = 0x40;					// Enable Crossbar
#endif // C8051F320_H

#if defined C8051F340_H
	P2MDIN   = ~(0x20);					// Port 2 pin 5 set as analog input
	P0MDOUT |= 0x0F;					// Port 0 pins 0-3 set high impedence
	P1MDOUT |= 0x0F;					// Port 1 pins 0-3 set high impedence
	P2MDOUT |= 0x0C;					// Port 2 pins 0,1 set high empedence
	P2SKIP   = 0x20;					// Port 2 pin 5 skipped by crossbar
	XBR0     = 0x00;
	XBR1     = 0x40;					// Enable Crossbar
#endif // C8051F340_H

}

//-----------------------------------------------------------------------------
// Usb_Suspend
//-----------------------------------------------------------------------------
//
// Enter suspend mode after suspend signalling is present on the bus
//		- called from USB ISR
//
//-----------------------------------------------------------------------------

//---------------------------
// SDCC suport
//---------------------------
#if defined SDCC
#pragma save
#pragma nooverlay
#endif // SDCC

#ifdef ENABLE_SUSPEND_RESUME

void Usb_Suspend(void)
{			
	// Put the device in a low power configuration
	P0MDIN	= 0x00;						// Port 0 configured as analog input
	P1MDIN	= 0x00;						// Port 1 configured as analog input
	P2MDIN	= 0x00;						// Port 2 configured as analog input
	P3MDIN	= 0x00;						// Port 3 configured as analog input

//	ADC0CN &= ~0x80;					// Disable ADC0
//	REF0CN	= 0x00;						// Disable voltage reference

	OSCICN |= 0x20;						// Put oscillator to suspend

	// When the device receives a non-idle USB event, it will resume execution
	// on the instruction that follows OSCICN |= 0x20.		

	// Re-enable everything that was disabled when going into Suspend
#if defined C8051F320_H
	P0MDIN	= 0xFF;						// Port 0 configured as diital input
	P1MDIN	= 0x7F;						// Port 1 pin 7 set as analog input
	P2MDIN	= 0xFF;						// Port 2 configured as diital input
	P3MDIN	= 0xFF;						// Port 3 configured as diital input
#endif // C8051F320_H

#if defined C8051F340_H
	P0MDIN	= 0xFF;						// Port 0 configured as diital input
	P1MDIN	= 0xFF;						// Port 1 configured as diital input
	P2MDIN  = ~(0x20);					// Port 2 pin 5 set as analog input
	P3MDIN	= 0xFF;						// Port 3 configured as diital input
#endif // C8051F340_H


//	REF0CN	= 0x0E;						// Enable voltage reference VREF
//	ADC0CN |= 0x80;						// Re-enable ADC

}

#endif	// ENABLE_SUSPEND_RESUME

//---------------------------
// SDCC suport
//---------------------------
#if defined SDCC
#pragma restore
#endif // SDCC

//-----------------------------------------------------------------------------
// Usb_Resume
//-----------------------------------------------------------------------------
//
// Resume normal USB operation
//		- called from USB ISR
//
//-----------------------------------------------------------------------------

//---------------------------
// SDCC suport
//---------------------------
#if defined SDCC
#pragma save
#pragma nooverlay
#endif // SDCC

#ifdef ENABLE_SUSPEND_RESUME

// In this implementation, suspend/resume is supported by the oscillator suspend (OSCICN.5)
// Then, the resume process is also coded in Usb_Suspend(), just after "OSCICN |= 0x20"
/*
void Usb_Resume(void)
{
}
*/
#endif	// ENABLE_SUSPEND_RESUME

//---------------------------
// SDCC suport
//---------------------------
#if defined SDCC
#pragma restore
#endif // SDCC

//-----------------------------------------------------------------------------
// Timer_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters	: None
// 
// Timer 2 reload, used to check if switch pressed on overflow and
// used for ADC continuous conversion
//-----------------------------------------------------------------------------

void Timer_Init(void)
{
	TMR2CN	 = 0x00;					// Stop Timer2; Clear TF2;

	CKCON	&= ~0xF0;					// Timer2 clocked based on T2XCLK;
	TMR2RL	 = 0;						// Initialize reload value
	TMR2	 = 0xffff;					// Set to reload immediately

	TR2		 = 1;						// Start Timer2
}

//-----------------------------------------------------------------------------
// Timer2_ISR
//-----------------------------------------------------------------------------
//
// Called when timer 2 overflows, check to see if switch is pressed,
// then watch for release.
//
//-----------------------------------------------------------------------------

void Timer2_ISR(void) interrupt 5
{
	TF2H = 0;							// Clear Timer2 interrupt flag

	if ( !Sw1 )							// Check for switch #1 pressed
	{
		if ( !Toggle1 )					// Toggle is used to debounce switch
		{								// so that one press and release will
			Switch1State = !Switch1State; // toggle the state of the switch sent
			Toggle1 = TRUE;				// to the host
			switch_changed = TRUE;
		}
	}
	else Toggle1 = FALSE;				// Reset toggle variable

	if ( !Sw2 )							// Same as above, but Switch2
	{
		if ( !Toggle2 )
		{
			Switch2State = !Switch2State;
			Toggle2 = TRUE;
			switch_changed = TRUE;
		}
	}
	else Toggle2 = FALSE;
}


//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级精品电影久久久| 国产在线精品免费| 欧美色精品天天在线观看视频| 亚洲精品高清在线| 欧美日韩一区在线| 青青青爽久久午夜综合久久午夜| 日韩欧美123| 国产精品1区2区3区| 国产精品网站在线播放| 99精品视频免费在线观看| 亚洲综合色自拍一区| 欧美精品久久一区二区三区 | 亚洲三级在线看| 色8久久精品久久久久久蜜| 亚洲国产成人高清精品| 日韩三级.com| av在线播放成人| 亚洲成人激情社区| 久久精品亚洲一区二区三区浴池| 成人禁用看黄a在线| 亚洲一区二区中文在线| 精品国产乱码久久久久久浪潮| 国产成+人+日韩+欧美+亚洲| 一区二区三区在线观看欧美| 欧美一区二区在线视频| 成人免费视频播放| 日韩一区精品字幕| 国产精品女主播在线观看| 欧美三日本三级三级在线播放| 国产在线日韩欧美| 亚洲在线中文字幕| 国产拍揄自揄精品视频麻豆| 欧美视频一区二| 国产传媒久久文化传媒| 亚洲第一成年网| 国产精品国产三级国产普通话三级 | 久久久久久久久伊人| 色丁香久综合在线久综合在线观看| 日韩电影在线免费观看| 亚洲三级在线免费| 久久久久久久久一| 欧美放荡的少妇| 色屁屁一区二区| 国产成+人+日韩+欧美+亚洲| 日日骚欧美日韩| 亚洲精品第1页| 国产精品亲子乱子伦xxxx裸| 欧美电视剧免费全集观看| 欧美特级限制片免费在线观看| 国产精品自在在线| 免播放器亚洲一区| 亚洲电影在线播放| 亚洲美腿欧美偷拍| 国产目拍亚洲精品99久久精品| 欧美一区二区私人影院日本| 91激情在线视频| 成人激情综合网站| 国产91色综合久久免费分享| 日韩福利视频网| 天天亚洲美女在线视频| 亚洲已满18点击进入久久| 中文字幕一区av| 国产精品黄色在线观看| 国产日韩欧美激情| 久久这里只有精品首页| 日韩欧美的一区| 日韩三区在线观看| 欧美一区二区三区喷汁尤物| 欧美日韩精品一区二区天天拍小说| 91麻豆自制传媒国产之光| jlzzjlzz欧美大全| 成人久久18免费网站麻豆 | 成人激情动漫在线观看| 国产99久久久国产精品潘金| 狠狠色丁香久久婷婷综| 国产在线视频一区二区三区| 国产精品一二三四五| 国产精品资源站在线| 国产成人自拍高清视频在线免费播放| 经典三级视频一区| 精品一区二区三区在线观看国产 | 国产网红主播福利一区二区| 久久久久国色av免费看影院| 国产视频一区在线播放| 欧美韩日一区二区三区四区| 中文字幕在线观看不卡| 亚洲猫色日本管| 亚洲国产日韩在线一区模特| 日本午夜精品视频在线观看 | 九一九一国产精品| 精品一区二区av| 成人丝袜18视频在线观看| 91丨九色丨尤物| 欧美日本国产一区| 久久人人爽爽爽人久久久| 中文欧美字幕免费| 国产精品第13页| 午夜精品久久久久久久久久| 免费久久99精品国产| 国产丶欧美丶日本不卡视频| 91视频91自| 91精品国产色综合久久久蜜香臀| 日韩欧美国产午夜精品| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品免费久久久久| 亚洲国产人成综合网站| 久久国产精品无码网站| 99视频超级精品| 欧美一级欧美一级在线播放| 久久女同性恋中文字幕| 悠悠色在线精品| 另类小说色综合网站| 972aa.com艺术欧美| 91精品欧美福利在线观看| 欧美激情在线免费观看| 午夜视频在线观看一区| 久久99精品久久只有精品| 91在线免费看| 欧美一级高清大全免费观看| 国产精品乱子久久久久| 天堂精品中文字幕在线| 国产毛片精品视频| 在线观看www91| 日本一区二区视频在线| 五月婷婷综合在线| 丰满白嫩尤物一区二区| 欧美肥大bbwbbw高潮| 最新成人av在线| 国产真实乱子伦精品视频| 欧美日韩一级大片网址| 中文字幕一区二区三区av| 久久99精品久久久久婷婷| 欧美亚洲综合一区| 国产精品对白交换视频 | 三级久久三级久久久| 99这里只有精品| 欧美精品一区男女天堂| 午夜精品久久久久久久久久| aaa欧美日韩| 欧美国产成人在线| 美国毛片一区二区三区| 欧美日韩亚洲综合| 亚洲欧美日韩在线播放| 国产精品一区在线观看乱码| 日韩欧美一级二级三级| 午夜免费久久看| 在线观看av不卡| 亚洲视频一区在线观看| 国产91精品精华液一区二区三区| 日韩欧美中文一区二区| 亚洲一区二区三区免费视频| 91浏览器在线视频| 中文字幕免费在线观看视频一区| 精品一区二区影视| 精品少妇一区二区| 久久国产精品第一页| 欧美日韩国产天堂| 亚洲一区二区在线播放相泽 | voyeur盗摄精品| 国产精品日韩成人| 成人妖精视频yjsp地址| 久久伊99综合婷婷久久伊| 老司机免费视频一区二区| 51久久夜色精品国产麻豆| 午夜精品久久久久久久99水蜜桃| 日本福利一区二区| 亚洲国产一区二区三区青草影视| 91免费在线播放| 亚洲精品中文在线影院| 91久久国产最好的精华液| 亚洲四区在线观看| 色就色 综合激情| 亚洲成av人片一区二区三区| 欧美人与禽zozo性伦| 三级一区在线视频先锋| 欧美福利视频一区| 久久www免费人成看片高清| 久久综合色鬼综合色| 国产精品1区2区| 国产精品国产三级国产| 色诱视频网站一区| 视频一区免费在线观看| 日韩美一区二区三区| 国产98色在线|日韩| 亚洲少妇30p| 欧美色大人视频| 免费在线观看日韩欧美| 久久久91精品国产一区二区精品 | 日韩一区二区三区视频在线观看| 久久精品国产精品青草| 欧美激情一区二区三区全黄| 91麻豆.com| 老司机精品视频一区二区三区| 国产日韩av一区二区| 欧洲激情一区二区| 黑人精品欧美一区二区蜜桃| 国产精品麻豆久久久| 51精品国自产在线| 国产99一区视频免费| 亚洲成人综合在线|