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

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

?? lpc_canall.c

?? LPC2294 測試程序 YL_LPC229X_Test_Data的目錄說明
?? C
字號:
/**************************************************************************
MODULE:    LPC_CANAll
CONTAINS:  Philips LPC2000 CAN interface driver.
		   This driver shows how the CAN interface of the Philips LPC2000
		   can be used to receive ALL messages on the CANbus.
		   All incoming messages are copied into a receive queue.
		   NOTE: This example does not implement any queue overrun handling
			   Compiled and Tested with Keil Tools www.keil.com
COPYRIGHT: Embedded Systems Academy, Inc. 2004.
LICENSE:   THIS VERSION CREATED FOR FREE DISTRIBUTION
			   FOR PHILIPS SEMICONDUCTORS www.philipsmcu.com
		   FOR KEIL SOFTWARE www.keil.com
VERSION:   1.00, Pf 14-JUL-04, First published release
---------------------------------------------------------------------------
HISTORY:   1.00, Pf 14-JUL-04, First published release
***************************************************************************/ 

#include "utils.h"
#include "LPC2294.h"
#include "LPC_CANAll.h"

/**************************************************************************
GLOBAL VARIABLES
***************************************************************************/ 

// Receive Queue: one queue for each CAN port
CANALL_MSG mRxCAN[MAX_CANPORTS][MAX_QUEUE];

// Queue IN pointer
short mRxIN[MAX_CANPORTS];

// Queue OUT pointer
short mRxOUT[MAX_CANPORTS];

/**************************************************************************
PUBLIC FUNCTIONS
***************************************************************************/ 

/**************************************************************************
Initialization of a CAN interface
as described in LPC_CANAll.h
***************************************************************************/ 
short CANAll_Init( unsigned short can_port , // CAN interface to use
  unsigned short can_isrvect , // interrupt vector number to use for Rx ISR (0-15)
  unsigned int can_btr  	  // CAN BTR value used to set CAN baud rate
)
{
	unsigned int * pSFR; // pointer into SFR space
	unsigned int * pSFR2; // pointer into SFR space
	unsigned int offset; // offset added to pSFR

	// Double check can_isrvect value
	if ( can_isrvect > 15 )
	{
		// Illegal value for can_isrvect
		return 0;
	}

	// Double check can_port value
	if ( ( can_port < 1 ) || ( can_port > MAX_CANPORTS ) )
	{
		// Illegal value for can_port
		return 0;
	}

	// Reset IN and OUT pointer
	mRxIN[can_port - 1] = 0;
	mRxOUT[can_port - 1] = 0;

	// Enable pins for selected CAN interface
	switch ( can_port )
	{
		case 1:
			PINSEL1 |= 0x00040000L; // Set bit 18
			offset = 0x00000000L; // Use 1st set of CAN registers
			break;
#if (MAX_CANPORTS > 1)
		case 2:
			PINSEL1 |= 0x00014000L; // Set bits 14 and 16
			offset = 0x00001000L; // Use 2nd set of CAN registers
			break;
#endif
#if (MAX_CANPORTS > 2)
		case 3:
			PINSEL1 |= 0x00001800L; // Set bits 11 and 12
			offset = 0x00002000L; // Use 3rd set of CAN registers
			break;
#endif
#if (MAX_CANPORTS > 3)
		case 4:
			PINSEL0 |= 0x0F000000L; // Set bits 24 to 27
			offset = 0x00003000L; // Use 4th set of CAN registers
			break;
#endif
		default:
			return 0; // illegal value used
	}

	// Acceptance Filter Mode Register = filter off, receive all
	CANAFMR = 0x00000002L;

	pSFR = ( unsigned int * ) &CAN1MOD + offset; // Select Mode register
	*pSFR = 1; // Go into Reset mode
	#if( CAN_DEBUG )
		//printf( "CAN%dMOD address is 0x%x\n", can_port, pSFR ) ;
	#endif

	pSFR = ( unsigned int * ) &CAN1IER + offset; // Select Interrupt Enable Register
	*pSFR = 0;// Disable All Interrupts

	pSFR = ( unsigned int * ) &CAN1GSR + offset; // Select Status Register
	*pSFR = 0; // Clear Status register

	pSFR = ( unsigned int * ) &CAN1BTR + offset; // Select BTR Register
	*pSFR = can_btr; // Set bit timing

	// Set and enable receive interrupt
	pSFR = ( unsigned int * ) &VICVectAddr0 ;
	pSFR += can_isrvect; // Set to desired interrupt vector

	pSFR2 = ( unsigned int * ) &VICVectCntl0 ;
	pSFR2 += can_isrvect; // Set to desired interrupt control

	switch ( can_port )
	{
		case 1:
			// Set interrupt vector
			*pSFR = ( unsigned long ) CANAll_CANISR_Rx1; 
			// Use this Interrupt for CAN Rx1 Interrupt
			*pSFR2 = 0x20 | 26;
			// Enable CAN Rx1 Interrupt
			VICIntEnable = 0x04000000L ;  
			break;
#if (MAX_CANPORTS > 1)
		case 2:
			// Set interrupt vector
			*pSFR = ( unsigned long ) CANAll_CANISR_Rx2; 
			// Use this Interrupt for CAN Rx2 Interrupt
			*pSFR2 = 0x20 | 27;
			// Enable CAN Rx2 Interrupt
			VICIntEnable = 0x08000000L ;  
			break;
#endif
#if (MAX_CANPORTS > 2)
		case 3:
			// Set interrupt vector
			*pSFR = ( unsigned long ) CANAll_CANISR_Rx3; 
			// Use this Interrupt for CAN Rx3 Interrupt
			*pSFR2 = 0x20 | 28;
			// Enable CAN Rx3 Interrupt
			VICIntEnable = 0x10000000L ;  
			break;
#endif
#if (MAX_CANPORTS > 3)
		case 4:
			// Set interrupt vector
			*pSFR = ( unsigned long ) CANAll_CANISR_Rx4; 
			// Use this Interrupt for CAN Rx4 Interrupt
			*pSFR2 = 0x20 | 29;
			// Enable CAN Rx4 Interrupt
			VICIntEnable = 0x20000000L;  
			break;
#endif
		default:
			return 0; // illegal value used
	}

	pSFR = ( unsigned int * ) &CAN1IER + offset; // Select Interrupt register
	*pSFR = 1; // Enable Receive Interrupt

	// Enter Normal Operating Mode
	pSFR = ( unsigned int * ) &CAN1MOD + offset; // Select Mode register
	//*pSFR = 0; // Operating Mode 
	*pSFR = 4; // selftest Mode 

	#if( CAN_DEBUG )
		printf( "CANAll Init is finished!\n" ) ;
	#endif

	return 1;
}


/**************************************************************************
Installing the CAN Err ISR
as described in LPC_CANAll.h
interrupt vector number to use for Err ISR (0-15)
***************************************************************************/ 
short CANAll_SetErrIRQ( unsigned short can_isrvect )
{
	unsigned int * pSFR; // pointer into SFR space

	// Double check can_isrvect value
	if ( can_isrvect > 15 )
	{
		// Illegal value for can_isrvect
		return 0;
	}

	// Set and enable err interrupt
	pSFR = ( unsigned int * ) &VICVectAddr0;
	pSFR += can_isrvect; // Set to desired interrupt vector
	// Set interrupt vector
	*pSFR = ( unsigned long ) CANAll_CANISR_Err; 

	pSFR = ( unsigned int * ) &VICVectCntl0;
	pSFR += can_isrvect; // Set to desired interrupt control
	*pSFR = 0x20 | 19;

	// Enable Interrupt source
	VICIntEnable = 0x00080000L;  

	#if( CAN_DEBUG )
		printf( "CAN Set Err IRQ!\n" ) ;
	#endif

	return 1;
}


/**************************************************************************
Transmitting a CAN message on a selected CAN interface
as described in LPC_CANAll.h
***************************************************************************/ 
short CANAll_PushMessage( unsigned short can_port , CANALL_MSG* pTransmitBuf )
{
	unsigned int * pAddr;  
	unsigned int * pCandata;
	unsigned int offset;
	unsigned char TXBufOffset;

	// Double check can_port value
	if ( ( can_port < 1 ) || ( can_port > MAX_CANPORTS ) )
	{
		#if( CAN_DEBUG )
			printf( "CAN Port is Illegal!\n" ) ;
		#endif
		return 0;
	}

	switch ( can_port )
	{
		case 1:
			offset = 0x00000000L; // Use 1st set of CAN registers
			break;
#if (MAX_CANPORTS > 1)
		case 2:
			offset = 0x00001000L; // Use 2nd set of CAN registers
			break;
#endif
#if (MAX_CANPORTS > 2)
		case 3:
			offset = 0x00002000L; // Use 3rd set of CAN registers
			break;
#endif
#if (MAX_CANPORTS > 3)
		case 4:
			offset = 0x00003000L; // Use 4th set of CAN registers
			break;
#endif
		default:
			return 0; // illegal value used
	}

	pAddr = ( unsigned int * ) &CAN1SR + offset; // CANSR
	#if( CAN_DEBUG )
	{
		//unsigned long temp ;
		//temp = (*((volatile unsigned long *) pAddr)) ;
		//printf( "CAN port is %d, offset is 0x%x, pAddr:0x%x = 0x%x\n", can_port, offset, pAddr, temp ) ;
	}
	#endif

	if ( !( *pAddr & 0x00000004L ) )
	{
		// Transmit Channel 1 is not available
		if ( !( *pAddr & 0x00000400L ) )
		{
			// Transmit Channel 2 is not available
			if ( !( *pAddr & 0x00040000L ) )
			{
				// Transmit Channel 3 is not available
				#if( CAN_DEBUG )
					printf( "No CAN channel available!\n" ) ;
				#endif
				return 0; // No channel available
			}
			else
			{
				TXBufOffset = 0x08;
			}
		}
		else
		{
			TXBufOffset = 0x04;
		}
	}
	else
	{
		TXBufOffset = 0x00;
	}   												   

	// Write DLC, RTR and FF
	pAddr = ( unsigned int * ) &CAN1TFI1 + offset + TXBufOffset;
	*pAddr = pTransmitBuf->Frame & 0xC00F0000L;  

	// Write CAN ID
	pAddr++;
	*pAddr = pTransmitBuf->MsgID;

	// Write first 4 data bytes 
	pCandata = ( unsigned int * ) &( pTransmitBuf->DatA );
	pAddr++;
	*pAddr = *pCandata;

	// Write second 4 data bytes 
	pCandata++;
	pAddr++;
	*pAddr = *pCandata;

	// Write transmission request
	pAddr = ( unsigned int * ) &CAN1CMR + offset;
	if ( TXBufOffset == 0x00 )
	{
		*pAddr = 0x21; // Transmission Request Buf 1
	}
	else if ( TXBufOffset == 0x04 )
	{
		*pAddr = 0x41; // Transmission Request Buf 2
	}
	else if ( TXBufOffset == 0x08 )
	{
		*pAddr = 0x81; // Transmission Request Buf 3
	}
	else
	{
		#if( CAN_DEBUG )
			printf( "CAN Transmission Request is err!\n" ) ;
		#endif
		return 0;
	}

	//#if( CAN_DEBUG )
		printf( "CAN %d Push Message is finished!\n", can_port ) ;
	//#endif

	return 1;
}


/**************************************************************************
Receiving a CAN message
as described in LPC_CANAll.h
***************************************************************************/ 
short CANAll_PullMessage( unsigned short can_port , CANALL_MSG* pReceiveBuf )
{
	unsigned int * pSrc; // Source pointer
	unsigned int * pDst; // Destination pointer

	// Double check can_port value
	if ( ( can_port < 1 ) || ( can_port > MAX_CANPORTS ) )
	{
		// Illegal value for can_port
		return 0;
	}
	
	#if( CAN_DEBUG )
		printf( "CAN1GSR = 0x%x\n", CAN1GSR ) ;
		printf( "CAN2GSR = 0x%x\n", CAN2GSR ) ;
	#endif
	
	if( CAN1GSR&0x01 )		CANAll_CANISR_Rx1() ;
	if( CAN2GSR&0x01 )		CANAll_CANISR_Rx2() ;
	
	can_port--; // Adjust to 0 - MAX_CANPORTS-1

	// Check if something is in RxQueue
	if ( ( mRxIN[can_port] ) == ( mRxOUT[can_port] ) )
	{
		// Queue is empty
		#if( CAN_DEBUG )
			printf( "CAN %d Queue is empty!\n", can_port ) ;
		#endif
		return 0;
	}
	// Pointers are different, so something is in queue

	// Initialize pointers
	pSrc = ( unsigned int * ) &( mRxCAN[can_port][mRxOUT[can_port]] );
	pDst = ( unsigned int * ) &( pReceiveBuf->Frame );
	*pDst = *pSrc; // Copy Frame

	pSrc++;
	pDst++;
	*pDst = *pSrc; // Copy MsgID

	pSrc++;
	pDst++;
	*pDst = *pSrc; // Copy DatA

	pSrc++;
	pDst++;
	*pDst = *pSrc; // Copy DatB

	// Adjust OUT pointer
	mRxOUT[can_port]++;
	if ( mRxOUT[can_port] >= MAX_QUEUE )
	{
		mRxOUT[can_port] = 0;
	}

	//#if( CAN_DEBUG )
		printf( "CAN %d Pull Message is finished!\n", can_port ) ;
	//#endif

	return 1;
}


/**************************************************************************
PRIVATE FUNCTIONS
***************************************************************************/ 

/**************************************************************************
DOES:    Interrupt Service Routine for CAN Errors
GLOBALS: none
RETURNS: nothing
***************************************************************************/ 
void CANAll_CANISR_Err( void )
{
	// DEBUG VERSION: do not return from Errors
	// Replace this with application specific error handling
	while ( 1 )
	{
	}
	VICVectAddr = 0xFFFFFFFFL; // acknowledge Interrupt
}


/**************************************************************************
DOES:    Interrupt Service Routine for CAN receive on CAN interface 1
GLOBALS: Copies the received message into the gRxCAN[0][] array
RETURNS: nothing
***************************************************************************/ 
void CANAll_CANISR_Rx1( void )
{
	unsigned int * pDest;

	// initialize destination pointer
	pDest = ( unsigned int * ) &( mRxCAN[0][mRxIN[0]] );
	*pDest = CAN1RFS;  // Frame

	pDest++;
	  *pDest = CAN1RID; // ID		//change by gongjun

	pDest++;
	*pDest = CAN1RDA; // Data A

	pDest++;
	*pDest = CAN1RDB; // Data B

	// Adjust IN pointer
	mRxIN[0]++;
	if ( mRxIN[0] >= MAX_QUEUE )
	{
		mRxIN[0] = 0;
	}

	CAN1CMR = 0x04; // release receive buffer
	VICVectAddr = 0xFFFFFFFFL; // acknowledge Interrupt
}


#if (MAX_CANPORTS > 1)
/**************************************************************************
DOES:    Interrupt Service Routine for CAN receive on CAN interface 2
GLOBALS: Copies the received message into the gRxCAN[1][] array
RETURNS: nothing
***************************************************************************/ 
void CANAll_CANISR_Rx2( void )
{
	unsigned int * pDest;

	// initialize destination pointer
	pDest = ( unsigned int * ) &( mRxCAN[1][mRxIN[1]] );
	*pDest = CAN2RFS;  // Frame

	pDest++;
	*pDest = CAN2RID; // ID		//change by gongjun

	pDest++;
	*pDest = CAN2RDA; // Data A

	pDest++;
	*pDest = CAN2RDB; // Data B

	// Adjust IN pointer
	mRxIN[1]++;
	if ( mRxIN[1] >= MAX_QUEUE )
	{
		mRxIN[1] = 0;
	}

	CAN2CMR = 0x04; // release receive buffer
	VICVectAddr = 0xFFFFFFFFL; // acknowledge Interrupt
}
#endif // MAX_CANPORTS > 1


#if (MAX_CANPORTS > 2)
/**************************************************************************
DOES:    Interrupt Service Routine for CAN receive on CAN interface 3
GLOBALS: Copies the received message into the gRxCAN[2][] array
RETURNS: nothing
***************************************************************************/ 
void CANAll_CANISR_Rx3( void )
{
	unsigned int * pDest;

	// initialize destination pointer
	pDest = ( unsigned int * ) &( mRxCAN[2][mRxIN[2]] );
	*pDest = C3RFS;  // Frame

	pDest++;
	*pDest = C3RID; // ID

	pDest++;
	*pDest = C3RDA; // Data A

	pDest++;
	*pDest = C3RDB; // Data B

	// Adjust IN pointer
	mRxIN[2]++;
	if ( mRxIN[2] >= MAX_QUEUE )
	{
		mRxIN[2] = 0;
	}

	C3CMR = 0x04; // release receive buffer
	VICVectAddr = 0xFFFFFFFFL; // acknowledge Interrupt
}
#endif // MAX_CANPORTS > 2


#if (MAX_CANPORTS > 3)
/**************************************************************************
DOES:    Interrupt Service Routine for CAN receive on CAN interface 4
GLOBALS: Copies the received message into the gRxCAN[3][] array
RETURNS: nothing
***************************************************************************/ 
void CANAll_CANISR_Rx4( void )
{
	unsigned int * pDest;

	// initialize destination pointer
	pDest = ( unsigned int * ) &( mRxCAN[3][mRxIN[3]] );
	*pDest = C4RFS;  // Frame

	pDest++;
	*pDest = C4RID; // ID

	pDest++;
	*pDest = C4RDA; // Data A

	pDest++;
	*pDest = C4RDB; // Data B

	// Adjust IN pointer
	mRxIN[3]++;
	if ( mRxIN[3] >= MAX_QUEUE )
	{
		mRxIN[3] = 0;
	}

	C4CMR = 0x04; // release receive buffer
	VICVectAddr = 0xFFFFFFFFL; // acknowledge Interrupt
}
#endif // MAX_CANPORTS > 4


/*----------------------- END OF FILE ----------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人精品二区三区99精品| 成人app网站| 亚洲成人av电影在线| 亚洲欧洲国产日本综合| 国产精品欧美久久久久无广告| 久久久精品国产免费观看同学| 久久综合中文字幕| 久久久91精品国产一区二区三区| 欧美精品一区二区三区蜜桃| 久久久久国产精品麻豆ai换脸| 国产欧美一区二区精品婷婷| 国产精品久久久久久久久久久免费看 | 亚洲电影在线播放| 亚洲图片有声小说| 日韩精品91亚洲二区在线观看| 日韩中文字幕一区二区三区| 老鸭窝一区二区久久精品| 激情综合五月天| 懂色av一区二区三区免费看| 色狠狠av一区二区三区| 欧美日韩成人一区二区| 日韩精品中文字幕一区| 中文字幕的久久| 一区二区三区蜜桃| 美国毛片一区二区| 成人免费av资源| 欧美日韩极品在线观看一区| 久久免费偷拍视频| 一区在线播放视频| 蜜臀av性久久久久蜜臀av麻豆| 国产91对白在线观看九色| 在线观看欧美精品| 久久青草欧美一区二区三区| 亚洲欧美日韩综合aⅴ视频| 日韩 欧美一区二区三区| 国产高清精品网站| 欧美久久一区二区| 亚洲欧洲av在线| 裸体歌舞表演一区二区| 在线观看亚洲一区| 中文字幕欧美国产| 美女爽到高潮91| 一本大道久久a久久综合| 精品国产乱码久久久久久久| 亚洲精品乱码久久久久久黑人 | 欧美一级搡bbbb搡bbbb| 国产精品护士白丝一区av| 日韩精品一级中文字幕精品视频免费观看 | 成人免费观看男女羞羞视频| 欧美日韩精品一区二区三区 | 欧美电影免费观看高清完整版在| ...av二区三区久久精品| 激情综合色综合久久综合| 欧美日韩一区不卡| 中文字幕一区二区不卡| 国产精品亚洲一区二区三区妖精| 777xxx欧美| 亚洲一区在线视频| 99re这里只有精品首页| 久久久久88色偷偷免费| 青草国产精品久久久久久| 欧美日韩国产经典色站一区二区三区 | 国产精品欧美久久久久无广告 | 久久福利视频一区二区| 欧美肥妇free| 亚洲成av人片在线观看无码| 91欧美一区二区| 国产精品久线观看视频| 成人妖精视频yjsp地址| 国产亚洲1区2区3区| 国产一区二区三区黄视频| 日韩欧美一区二区免费| 日韩电影在线一区二区三区| 91麻豆精品国产自产在线观看一区| 亚洲成人7777| 欧美一区二区三区色| 天天操天天干天天综合网| 欧美日韩在线观看一区二区 | 成人免费av资源| 欧美韩日一区二区三区四区| 成人美女在线视频| 中文字幕一区在线| 91麻豆swag| 亚洲一卡二卡三卡四卡无卡久久 | 日韩美女视频在线| 极品尤物av久久免费看| 国产亚洲成aⅴ人片在线观看| 国产成人av一区二区三区在线| 日本一二三四高清不卡| 99久久精品国产麻豆演员表| 亚洲视频在线一区二区| 欧美日韩国产高清一区二区三区| 美脚の诱脚舐め脚责91| 国产欧美精品日韩区二区麻豆天美| 成人激情电影免费在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 欧美午夜一区二区三区| 欧美aa在线视频| 国产精品久久免费看| 精品污污网站免费看| 精彩视频一区二区| 亚洲女与黑人做爰| 欧美一区二区三区免费| 懂色av一区二区三区免费观看| 亚洲激情校园春色| 日韩视频一区二区三区在线播放| 国产成人午夜99999| 亚洲一区在线观看视频| 久久精品人人做人人爽人人| 一本一道综合狠狠老| 免费精品视频最新在线| |精品福利一区二区三区| 日韩一级高清毛片| 94-欧美-setu| 国产一区二区三区av电影| 一区二区三区资源| 久久久久久久久伊人| 欧美综合一区二区| 成人小视频免费观看| 麻豆高清免费国产一区| 一区二区三区在线观看欧美| 欧美精品一区二区三区视频| 91国内精品野花午夜精品| 国产精品亚洲第一区在线暖暖韩国| 亚洲免费大片在线观看| 国产日韩精品久久久| 91精品国产aⅴ一区二区| 91蜜桃免费观看视频| 韩国三级中文字幕hd久久精品| 亚洲国产另类av| 亚洲女同女同女同女同女同69| 国产偷国产偷亚洲高清人白洁| 91精品免费在线| 在线免费观看视频一区| 成人一级黄色片| 国产一二精品视频| 久久精品国产**网站演员| 亚洲成va人在线观看| 夜夜嗨av一区二区三区网页| 国产精品久久久久久久蜜臀| 久久久美女毛片| 久久综合久久鬼色中文字| 91精品综合久久久久久| 欧美人xxxx| 欧美日韩免费一区二区三区视频| 一本在线高清不卡dvd| 99精品久久只有精品| 成人毛片视频在线观看| 国产91精品入口| 福利91精品一区二区三区| 国产精品99久久久久| 成人午夜视频在线观看| 成人看片黄a免费看在线| 粉嫩欧美一区二区三区高清影视| 国产福利一区二区三区视频| 国产精品2024| 不卡av电影在线播放| 成人午夜在线免费| 成人免费视频国产在线观看| 成人黄色电影在线| 91猫先生在线| 欧美视频自拍偷拍| 日韩视频免费直播| 久久久精品免费免费| 国产精品网站在线观看| 亚洲欧美日韩一区二区三区在线观看| 亚洲女性喷水在线观看一区| 亚洲综合激情另类小说区| 日韩在线卡一卡二| 国产一区二区免费看| 91美女视频网站| 欧美一级在线视频| 国产日产精品1区| 一区二区三区欧美亚洲| 日韩av电影免费观看高清完整版 | 色老汉一区二区三区| 欧美日韩在线三级| 精品国产91久久久久久久妲己| 国产视频在线观看一区二区三区| 国产精品久久久一本精品 | 精品电影一区二区| 中文字幕亚洲一区二区va在线| 亚洲国产日韩av| 首页欧美精品中文字幕| 国产在线国偷精品免费看| 99久久综合精品| 日韩一区二区三区视频| 中文字幕永久在线不卡| 日本一区中文字幕| 成人av电影在线播放| 欧美日韩午夜影院| 国产精品毛片a∨一区二区三区| 亚洲国产精品久久一线不卡| 国精品**一区二区三区在线蜜桃| 色综合亚洲欧洲| 久久久激情视频| 无吗不卡中文字幕| 91小视频在线| 久久久www成人免费无遮挡大片 | 欧美成人精品1314www|