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

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

?? sndsiic.c

?? 三星官方基于VXWORKS的S3C2510的BSP
?? C
字號:
/* sndsIIC.c - SNDS IIC driver */

/* Copyright 1984-1997 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01a,20dec99,ka  written
*/

/*
DESCRIPTION

This module implements the IIC driver for Samsung SNDS100 Ver 1.0 Evaluation 
Board for their KS32C50100 microcontroller.

KS32C50100 is an ARM based processor with several integrated peripherals.
It has an interrupt controller, two 32-bit timers, one Ethernet controller,
two HDLC controllers, one IIC controller, general purpose I/O ports, and a 
2-channel DMA controller.

The built-in IIC controller supports master mode only.  The SNDS100 board has
only serial EEPROM on the IIC bus.  Hence this driver is used for accessing
the serial EEPROM. The slave address of the EEPROM is 0xA0.

The driver uses two binary semaphores, one for transmit and one for receive
operations.  The interrupt service routines give the semaphores and the main
routines take the semaphores.  A mutual exclusion semaphore is used to avoid
multiple entries to the driver routines.

BOARD LAYOUT
This device is on-chip.  No jumpering diagram is necessary.

EXTERNAL INTERFACE
sndsIICDevInit() function is called from syHwInit() function.  At this time
VxWorks kernel is not initialized.  Hence creation of semaphores cannot be done
at this time.  Accordingly, sndsIICDevInit2() function has to be called from 
sysHwInt2()function.

sndsIICWrite() and sndsIICRead() functions are called for write and read
operations respectively.  sndsIICIoctl() function can be called to change the
IIC prescaler value.

SYSTEM RESOURCE USAGE
When implemented, this driver requires the following system resources:

    - one mutual exclusion semaphore
    - two binary semaphores
	- one interrupt vector and two interrupt service routines

No dynamic memory allocation is done by this driver.

INCLUDES:
sndsIIC.h
*/

/* includes */

#include "sndsIIC.h"

/* Local data structures */

LOCAL SNDS_IIC sndsIIC;

/* forward static declarations */
LOCAL UINT32 setPreScaler(UINT32 sclk);
LOCAL void sndsIICWriteISR();
LOCAL void sndsIICReadISR();

/*******************************************************************************
*
* sndsIICDevInit - initialize the IIC driver
*
* This routine initializes the IIC driver and the device to the operational state.
*
* RETURNS: N/A
*/
void sndsIICDevInit()
	{
	UINT32 nPreScaleValue;

	sndsIIC.int_vec = INT_LVL_IIC;
	sndsIIC.iiccon = (UINT32 *)SNDS_IICCON;
	sndsIIC.iicbuf = (UINT32 *)SNDS_IICBUF;
	sndsIIC.iicps = (UINT32 *)SNDS_IICPS;
	sndsIIC.iiccnt = (UINT32 *)SNDS_IICCNT;

	/* Reset the IICCON Registers */
	SNDS_IIC_REG_WRITE (iiccon, SNDS_IIC_RESET_IICCON);

	/* Set the Prescaler value */
	nPreScaleValue = setPreScaler(SCLK);
	SNDS_IIC_REG_WRITE (iicps, nPreScaleValue);
	}

/*******************************************************************************
*
* sndsIICDevInit2 - Initialize the semaphores used by IIC driver
*
* This routine creates the semaphores used by the IIC driver.  This function can
* be called only after the kernel is initialized, preferrably from sysHwInit2()
*
* RETURNS: N/A
*/
void sndsIICDevInit2()
	{
	/* Create mutual semaphore to guard the global SNDS_IIC structure */
	sndsIIC.IICSemID = semMCreate (SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE);
	
	/* Synchronisation semaphores */
	sndsIIC.IIC_Txmit.endofWriteSemID = semBCreate (SEM_Q_FIFO, SEM_EMPTY); 
	sndsIIC.IIC_Rcv.endofReadSemID = semBCreate (SEM_Q_FIFO, SEM_EMPTY); 
	}

/*******************************************************************************
*
* sndsIICWrite - Write data into the IIC device
*
* This routine writes the data given by the application into the IIC device.
*
* RETURNS: OK if write is successful, else ERROR
*/
STATUS sndsIICWrite (UINT8 slaveAddr, UINT16 writeAddr, UINT8 *data, UINT32 sizeOfData)
	{
	UINT32 page = 0;
	UINT32 numPages = 0;
	UINT32 remain_byte = 0;
	UINT16 pageAccessAddr = 0;
	UINT8 bEndWrite = 0;
	UINT32 status;
	STATUS nRetVal = OK;
	UINT32 j=0;

	/* Validation of Input Parameters */
	if (slaveAddr != EEPROM_SLAVE_ADDR)	/* At present, only EEPROM is supported on IIC bus on SNDS board */
		return(ERROR);
	if (writeAddr >= EEPROM_MAX_SIZE)
		return(ERROR);
	if (data == NULL)		
		return(ERROR);
	
	/* Connect the IIC Bus interrupt to WriteISR */
   	if (intConnect (INUM_TO_IVEC (sndsIIC.int_vec), sndsIICWriteISR, NULL) == ERROR)
		return(ERROR);
   	if (intEnable (sndsIIC.int_vec) == ERROR) /*Enable the IIC bus interrupt */
		return(ERROR);

	pageAccessAddr = writeAddr;
	sndsIIC.IIC_Txmit.slaveAddress = slaveAddr;
	sndsIIC.IIC_Txmit.totalBytesWritten = 0;

	/* semTake */
	if (semTake (sndsIIC.IICSemID, WAIT_FOREVER) == ERROR)
		return(ERROR);

	if ((sizeOfData % EEPROM_PAGE_SIZE) != 0)				/* Calculate no of page write operations */
		numPages = (sizeOfData / EEPROM_PAGE_SIZE) + 1;
	else
		numPages = sizeOfData / EEPROM_PAGE_SIZE;

	remain_byte = (UINT32)(sizeOfData % EEPROM_PAGE_SIZE); /* Calculate size of data in last page */
	if (!remain_byte)
		remain_byte = EEPROM_PAGE_SIZE;

	/* write the data page by page with 20ms delay provided for internal write operation by 
	 * the slave device after each page
	 */
	for (page = 1; (page <= numPages) && (bEndWrite == 0); page++)
		{
		if (pageAccessAddr > EEPROM_MAX_SIZE)
			{
			break;
			}

		if (sizeOfData < EEPROM_PAGE_SIZE) /* if only one page to be written */
			{
			for(j = 0; j < sizeOfData; j++)	
				sndsIIC.IIC_Txmit.pageBuff[j] = *data++;
			sndsIIC.IIC_Txmit.dataSize = sizeOfData;

			/* If (current write pointer address + no. of data) > max offset, 
			 * omit out of range data 
			 */
			if ((sndsIIC.IIC_Txmit.dataSize + pageAccessAddr) > EEPROM_MAX_SIZE)
				{
				sndsIIC.IIC_Txmit.dataSize = (EEPROM_MAX_SIZE - pageAccessAddr);
				bEndWrite = 1;
				}
			}
		else 
			{
			/* if last page */
			if(page == numPages)
				{
				for(j=0; j < remain_byte; j++)
					{
					sndsIIC.IIC_Txmit.pageBuff[j] = *data++;
					}
				sndsIIC.IIC_Txmit.dataSize = remain_byte;

				/* If (current write pointer address + no. of data) > max offset, 
			  	 *  omit out of range data 
				 */
				if ((sndsIIC.IIC_Txmit.dataSize + pageAccessAddr) > EEPROM_MAX_SIZE)
					{
					sndsIIC.IIC_Txmit.dataSize = (EEPROM_MAX_SIZE - pageAccessAddr);
					bEndWrite = 1;
					}
				}
			/* if still more pages */
			else 
				{
				for(j = 0; j < EEPROM_PAGE_SIZE; j++)
					sndsIIC.IIC_Txmit.pageBuff[j] = *data++;
				sndsIIC.IIC_Txmit.dataSize = EEPROM_PAGE_SIZE;

				/* If (current write pointer address + no. of data) > max offset, 
				 *  omit out of range data 
				 */
				if ((sndsIIC.IIC_Txmit.dataSize + pageAccessAddr) > EEPROM_MAX_SIZE)
					{
					sndsIIC.IIC_Txmit.dataSize = (EEPROM_MAX_SIZE - pageAccessAddr);
					bEndWrite = 1;
					}
				}
			}
		sndsIIC.IIC_Txmit.flag = 0x0;
		sndsIIC.IIC_Txmit.byteWriteCount = 0;
		sndsIIC.IIC_Txmit.writeAddrMSB = (UINT8)((pageAccessAddr>>8) & 0xff);
		sndsIIC.IIC_Txmit.writeAddrLSB = (UINT8)(pageAccessAddr & 0xff);
		do 
			{
			SNDS_IIC_REG_READ (iiccon, status);
			} while (status & (UINT8)SNDS_IIC_ISBUSY); /* Wait until the bus is busy */

		/* Send Start  bit. Enable the interrupt mode and Enable Ack */
		SNDS_IIC_REG_WRITE (iiccon, (SNDS_IIC_START | SNDS_IIC_ACK | SNDS_IIC_IEN));

		/* Send the slave address */
		SNDS_IIC_REG_WRITE (iicbuf, (sndsIIC.IIC_Txmit.slaveAddress & S_WRITE));

		/* Wait till one page of data is written */
		if (semTake (sndsIIC.IIC_Txmit.endofWriteSemID, WAIT_FOREVER) == ERROR)
			{
			nRetVal = ERROR;
			break;
			}

		if (taskDelay(sysClkRateGet() / 50 ) == ERROR) /* to give 5ms delay used for internal write operation */
			{
			nRetVal = ERROR;
			break;
			}
		pageAccessAddr += EEPROM_PAGE_SIZE;
		}

	if (intDisable (sndsIIC.int_vec) == ERROR) /*Enable the IIC bus interrupt */
		return(ERROR);

	/* semGive */
	if (semGive (sndsIIC.IICSemID) == ERROR)
		return(ERROR);

	if (nRetVal == ERROR)
		return(ERROR);
	else
		return (sndsIIC.IIC_Txmit.totalBytesWritten);
	}

/*******************************************************************************
*
* sndsIICWriteISR() - Handle IIC write interrupt
*
* This ISR writes one page of data (32 bytes) into the serial EEPROM.  After the 
* write of a page is complete, the ISR gives the semaphore.
*
* RETURNS: N/A
*/
LOCAL void sndsIICWriteISR()
	{
	if (!(sndsIIC.IIC_Txmit.flag & (UINT8)IIC_TX_BYTE_ADDR_MSB))
		{
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Txmit.writeAddrMSB);
		sndsIIC.IIC_Txmit.flag |= (UINT8)IIC_TX_BYTE_ADDR_MSB;
		}
	else if (!(sndsIIC.IIC_Txmit.flag & (UINT8)IIC_TX_BYTE_ADDR_LSB))
		{
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Txmit.writeAddrLSB);		
		sndsIIC.IIC_Txmit.flag |= (UINT8) IIC_TX_BYTE_ADDR_LSB;
		}
	else if ((sndsIIC.IIC_Txmit.byteWriteCount < (UINT32) sndsIIC.IIC_Txmit.dataSize))
		{
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Txmit.pageBuff[sndsIIC.IIC_Txmit.byteWriteCount++]);
		sndsIIC.IIC_Txmit.totalBytesWritten++;
		}
	else
		{
		SNDS_IIC_REG_WRITE (iiccon, SNDS_IIC_STOP);
		semGive (sndsIIC.IIC_Txmit.endofWriteSemID);
		}
	}

/*******************************************************************************
*
* sndsIICRead - Read data from the IIC device
*
* This routine reads the required amount of data requested by the application from 
* the IIC device.  The data is copied into the buffer provided by the application
*
* RETURNS: OK if read is successful, else ERROR
*/
STATUS sndsIICRead (UINT8 slaveAddr, UINT16 readAddr, UINT8 *pBuff, UINT32 sizeOfData)
	{
	UINT32 status = 0;

	/* Validation of Input Parameters */
	if (slaveAddr != EEPROM_SLAVE_ADDR)	/* Only EEPROM supported on IIC bus on SNDS board */
		return (ERROR);
	if (readAddr >= EEPROM_MAX_SIZE)
		return (ERROR);
	if (pBuff == NULL)		
		return (ERROR);
	
	if ((readAddr + sizeOfData) >= EEPROM_MAX_SIZE)
		sizeOfData = EEPROM_MAX_SIZE - readAddr;

	/* semTake */
	if (semTake (sndsIIC.IICSemID, WAIT_FOREVER) == ERROR)
		return (ERROR);

    /* Connecting the IIC bus interrupt to Read ISR */
	if (intConnect (INUM_TO_IVEC(sndsIIC.int_vec), sndsIICReadISR, NULL) == ERROR)
		return(ERROR);
	if (intEnable (sndsIIC.int_vec) == ERROR)
		return(ERROR);

	/* Initialising the IIC Rx Structure */
	sndsIIC.IIC_Rcv.rxBuff = pBuff;
	sndsIIC.IIC_Rcv.flag = 0x0;
	sndsIIC.IIC_Rcv.byteReadCount = 0x0;
	sndsIIC.IIC_Rcv.dataSize = sizeOfData;
	sndsIIC.IIC_Rcv.slaveAddress = slaveAddr; 
	sndsIIC.IIC_Rcv.readAddrMSB = (UINT8)((readAddr>>8) & 0xff);
	sndsIIC.IIC_Rcv.readAddrLSB = (UINT8)(readAddr & 0xff);
	sndsIIC.IIC_Rcv.totalBytesRead = 0;
	do 
		{
		SNDS_IIC_REG_READ(iiccon, status);
		} while (status & SNDS_IIC_ISBUSY); /* Wait! the iic bus is busy */

	/* Dummy Write */
	SNDS_IIC_REG_WRITE (iiccon, (SNDS_IIC_START|SNDS_IIC_ACK | SNDS_IIC_IEN));
	SNDS_IIC_REG_WRITE (iicbuf, (sndsIIC.IIC_Rcv.slaveAddress & S_WRITE));

	/* Wait till read operation is finished in ISR*/
	semTake (sndsIIC.IIC_Rcv.endofReadSemID, WAIT_FOREVER);

   	if (intDisable (sndsIIC.int_vec) == ERROR) /*Disable the IIC bus interrupt */
		return(ERROR);
	/* semGive */
	if (semGive (sndsIIC.IICSemID) == ERROR)
		return(ERROR);

   	return(sndsIIC.IIC_Rcv.totalBytesRead); 
	}

/*******************************************************************************
*
* sndsIICReadISR() - Handle IIC read interrupt
*
* This ISR reads the required number of bytes from the serial EEPROM.  After the 
* reading is complete, the ISR gives the semaphore.
*
* RETURNS: N/A
*/
LOCAL void sndsIICReadISR()
	{
	/* Dummy write to send read address */
	if (!(sndsIIC.IIC_Rcv.flag & (UINT8)IIC_RX_BYTE_ADDR_MSB))
		{
		/* Send read address MSB */
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Rcv.readAddrMSB); 
		sndsIIC.IIC_Rcv.flag |= (UINT8)IIC_RX_BYTE_ADDR_MSB; 
		}
	else if (!(sndsIIC.IIC_Rcv.flag & (UINT8) IIC_RX_BYTE_ADDR_LSB))
		{
		/* Send read address LSB */
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Rcv.readAddrLSB);
		sndsIIC.IIC_Rcv.flag |= (UINT8) IIC_RX_BYTE_ADDR_LSB; 
		}
	else if (!(sndsIIC.IIC_Rcv.flag & (UINT8) IIC_REPEAT_START))
		{
		/* Repeat Start */
		SNDS_IIC_REG_WRITE (iiccon,  SNDS_IIC_REPEAT_START);	

		/* Set IIC master in receiver mode */
		SNDS_IIC_REG_WRITE (iiccon,  (SNDS_IIC_START | SNDS_IIC_ACK | SNDS_IIC_IEN));
		SNDS_IIC_REG_WRITE (iicbuf, sndsIIC.IIC_Rcv.slaveAddress | (UINT8)S_READ);

		sndsIIC.IIC_Rcv.flag |= (UINT8) IIC_REPEAT_START;
		}
	else if (!(sndsIIC.IIC_Rcv.flag & (UINT8)IIC_MULTI_RCV))
		{
		/* This block is used to skip the interrupt raised immediately after writing 
	       slave address. No useful data is available by this time. But this block is used
		   for setting the IIC master in NOACK or ACK mode depending on the condition that
		   only single byte is to be read or Multiple bytes */

		if(sndsIIC.IIC_Rcv.dataSize == 1)
			{
			/* Single byte read. Set to NOACK mode  */
			SNDS_IIC_REG_WRITE(iiccon,  (SNDS_IIC_NOACK | SNDS_IIC_IEN));
			}
		else
			{
			/* Multi bytes read.Send ACK after every byte */
		   	SNDS_IIC_REG_WRITE(iiccon,  (SNDS_IIC_ACK | SNDS_IIC_IEN));
			}
   		sndsIIC.IIC_Rcv.flag |= (UINT8) IIC_MULTI_RCV;
		}

	/* for multibyte read operation.. */
	else if (sndsIIC.IIC_Rcv.byteReadCount < (sndsIIC.IIC_Rcv.dataSize - 1))
		{
		 /* Read a byte to RxBuff till last but one character */
		SNDS_IIC_REG_READ (iicbuf,  sndsIIC.IIC_Rcv.rxBuff[sndsIIC.IIC_Rcv.byteReadCount++]);
		sndsIIC.IIC_Rcv.totalBytesRead++;

		/* if only last byte is remaining, set NOACK mode so that no ACK is sent after 
		 * last byte 
		 */
		if (sndsIIC.IIC_Rcv.byteReadCount == (sndsIIC.IIC_Rcv.dataSize - 1))
			{
			SNDS_IIC_REG_WRITE (iiccon, (SNDS_IIC_NOACK | SNDS_IIC_IEN));
			}
		}
	else
		{  
		/* Receive last data */
		SNDS_IIC_REG_READ (iicbuf, sndsIIC.IIC_Rcv.rxBuff[sndsIIC.IIC_Rcv.byteReadCount]);
		sndsIIC.IIC_Rcv.totalBytesRead++;

        /* STOP IIC Controller */
		SNDS_IIC_REG_WRITE (iiccon, (SNDS_IIC_STOP));
		semGive (sndsIIC.IIC_Rcv.endofReadSemID);
		}
	}

/*******************************************************************************
*
* sndsIICIoctl - Control the IIC device
*
* This routine can be used by the application to set the prescaler value of the 
* IIC device.
*
* RETURNS: OK if successful, else ERROR
*/
STATUS sndsIICIoctl(UINT32 cmd, void* arg)
	{
	UINT32 *pSClk; 
	UINT32 nPreScaleValue;

	pSClk = (UINT32 *) arg;

	if (cmd == SET_PRE_SCALER)
		{
		SNDS_IIC_REG_WRITE(iiccon, SNDS_IIC_RESET_IICCON);
		nPreScaleValue = setPreScaler (*pSClk);
		SNDS_IIC_REG_WRITE (iicps, nPreScaleValue);
		return (OK);
		}
	else
		return (ERROR);
	}

/*******************************************************************************
*
* setPreScaler - Calculate the IIC prescaler value for the given clock speed
*
* RETURNS: Prescaler value
*/
LOCAL UINT32 setPreScaler(UINT32 sclk)
	{
	return ((UINT32) ((((fMCLK_MHz / sclk) - 3) / 16)));
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久夜色精品一区| 激情六月婷婷综合| 亚洲国产综合在线| 日韩av在线发布| 国产精品一品二品| 在线观看视频一区二区| 日韩欧美中文字幕公布| 国产精品美日韩| 日韩国产欧美三级| 欧美va亚洲va| 天天综合色天天| 91免费看片在线观看| 日韩视频免费观看高清完整版 | 国产mv日韩mv欧美| 欧美日韩极品在线观看一区| 国产三级精品视频| 青青草国产成人av片免费| 色婷婷激情综合| 国产校园另类小说区| 免费高清在线视频一区·| 精品国产一区二区三区av性色| 亚洲图片自拍偷拍| 欧美成人精品福利| 波多野结衣精品在线| 精品免费日韩av| 91猫先生在线| 狠狠色伊人亚洲综合成人| 亚洲私人影院在线观看| 国产成人鲁色资源国产91色综| 日韩欧美综合一区| 国产99精品国产| 日韩精品成人一区二区三区 | 欧美三区在线观看| 亚洲三级免费电影| 欧美一卡二卡三卡四卡| 亚洲国产精品影院| 国产亚洲精品aa午夜观看| 欧美三级中文字| 懂色av中文一区二区三区| 亚洲va国产天堂va久久en| 欧美日韩综合不卡| 国产成人免费av在线| 日韩电影在线一区| 日韩久久一区二区| 久久久久久免费网| 成人性色生活片| 亚洲欧美视频在线观看视频| 成人高清视频免费观看| 亚洲欧洲国产日本综合| 成人黄色网址在线观看| 蜜臀91精品一区二区三区| 日韩美女在线视频 | 国产亚洲精品久| 777色狠狠一区二区三区| 蜜桃精品视频在线观看| 亚洲国产wwwccc36天堂| 中文字幕一区二区三区不卡| 亚洲精品一区二区三区蜜桃下载| 欧美日韩国产大片| 91福利国产精品| 久久国内精品自在自线400部| 久久久久久久综合狠狠综合| 欧美一区二区三区免费观看视频| 欧美午夜一区二区三区| 久久精品国产亚洲高清剧情介绍| 亚洲国产精品久久人人爱| 亚洲欧美日韩久久| 一区二区中文字幕在线| 综合分类小说区另类春色亚洲小说欧美| 精品福利视频一区二区三区| 欧美一区二区成人| 日韩一区二区在线看| 在线不卡a资源高清| 国产成人精品亚洲日本在线桃色| 麻豆精品国产传媒mv男同| 日韩精品一卡二卡三卡四卡无卡| 亚洲成a人在线观看| 无吗不卡中文字幕| 琪琪一区二区三区| 久久精品国产精品青草| 精品影院一区二区久久久| 椎名由奈av一区二区三区| 国产精品久久久久影院色老大| 欧美久久一区二区| 欧美一区二区三区免费在线看| 91麻豆精品国产91久久久久久久久| 欧美精品一二三四| 欧美大片一区二区三区| 久久亚洲一区二区三区四区| 久久久久久久久97黄色工厂| 国产欧美一区二区精品婷婷| 国产精品久久久久影院老司| 亚洲精品国久久99热| 精品国产欧美一区二区| 久久亚洲影视婷婷| 亚洲色图在线视频| 香蕉久久一区二区不卡无毒影院| 久久精品久久99精品久久| 国产一二精品视频| 青青青伊人色综合久久| 国产最新精品精品你懂的| proumb性欧美在线观看| 欧洲人成人精品| 欧美大片免费久久精品三p | 日韩毛片精品高清免费| 亚洲国产视频一区二区| 麻豆精品在线看| 成人国产亚洲欧美成人综合网| 色婷婷av一区二区三区软件| 欧美一区二区三区免费视频| 国产日产欧美一区二区视频| 亚洲色图20p| 麻豆成人免费电影| 99vv1com这只有精品| 成+人+亚洲+综合天堂| 欧美中文字幕久久| 国产婷婷精品av在线| 一区二区三区四区亚洲| 一区二区三区鲁丝不卡| 黄色日韩网站视频| 91蝌蚪porny| 精品福利av导航| 亚洲成人午夜电影| av亚洲精华国产精华| 欧美一区二区三区人| 中文字幕视频一区| 久久97超碰国产精品超碰| 在线观看区一区二| 中文字幕欧美激情一区| 国产日本欧美一区二区| 亚洲成av人综合在线观看| 成人午夜av影视| 欧美va亚洲va在线观看蝴蝶网| 一区二区三区在线视频观看| 国产精品亚洲综合一区在线观看| 91.xcao| 成人欧美一区二区三区黑人麻豆| 久久精品国产免费看久久精品| 日本黄色一区二区| 国产精品久久久久久久久久免费看| 精品一区二区av| 欧美高清视频不卡网| 亚洲欧美日韩综合aⅴ视频| 国产一区二区成人久久免费影院| 欧美一级xxx| 水野朝阳av一区二区三区| 色婷婷一区二区| 亚洲欧洲成人自拍| 国产传媒久久文化传媒| 精品少妇一区二区三区在线播放| 亚洲一区二区视频在线| 蜜桃传媒麻豆第一区在线观看| 欧美亚洲一区二区在线| 日韩美女视频一区| 99re免费视频精品全部| 国产精品少妇自拍| 国产91精品欧美| 欧美国产日韩a欧美在线观看| 久久99精品国产.久久久久| 日韩限制级电影在线观看| 丝袜诱惑制服诱惑色一区在线观看| 欧美午夜精品一区二区三区| 亚洲国产综合色| 欧美午夜精品免费| 亚洲高清不卡在线观看| 欧美日韩中文另类| 午夜精品久久久久久久蜜桃app| 欧美最新大片在线看| 亚洲va国产va欧美va观看| 91麻豆精品国产91久久久久久 | 亚洲视频你懂的| 成人在线视频一区二区| 国产人久久人人人人爽| 国产激情偷乱视频一区二区三区 | 6080国产精品一区二区| 日本中文一区二区三区| 日韩久久久精品| 国产福利一区二区三区在线视频| 久久久久久夜精品精品免费| 风间由美一区二区三区在线观看| 国产精品久久久久桃色tv| 91在线观看成人| 午夜影院久久久| 欧美变态tickle挠乳网站| 国产精品一卡二卡| 国产精品激情偷乱一区二区∴| 91电影在线观看| 蜜桃精品视频在线| 国产精品久久久久久妇女6080| 91麻豆蜜桃一区二区三区| 五月婷婷久久丁香| 久久综合九色综合欧美亚洲| 成人动漫一区二区| 亚洲成人av电影在线| 精品欧美一区二区久久| 91污片在线观看| 久久精品噜噜噜成人88aⅴ| 国产精品成人一区二区艾草 | 久久精品一区二区三区四区| 99久久综合精品|