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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sndsiic.c

?? 4510b的vxworks的BSP
?? C
字號(hào):
/* 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)));
	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品一品道一区| 91影院在线免费观看| 亚洲一区免费观看| 亚洲综合清纯丝袜自拍| 玉足女爽爽91| 亚洲自拍偷拍av| 午夜精品123| 麻豆国产欧美一区二区三区| 男女性色大片免费观看一区二区| 免费高清在线一区| 国产伦精品一区二区三区在线观看| 免播放器亚洲一区| 国产成人免费在线视频| 粉嫩av一区二区三区在线播放| 国产91综合网| 91国产视频在线观看| 欧美精品一级二级三级| 欧美电影免费观看高清完整版在| 日韩欧美第一区| 国产蜜臀97一区二区三区| 国产精品天天摸av网| 伊人夜夜躁av伊人久久| 日韩国产欧美在线视频| 国产精品一区二区在线观看网站| 成人爱爱电影网址| 欧美性感一区二区三区| 91精品国产综合久久精品app | 国产精品亚洲成人| 成人激情文学综合网| 欧美日韩一本到| 国产视频亚洲色图| 午夜影院久久久| 国产精品1024| 777久久久精品| 国产精品少妇自拍| 午夜在线成人av| 99精品视频在线观看免费| 51精品国自产在线| 国产精品午夜电影| 久久国产婷婷国产香蕉| 色视频一区二区| 国产日产欧美一区二区视频| 亚洲黄网站在线观看| 国产美女久久久久| 欧美日韩在线播放三区| 欧美国产精品一区二区| 日本怡春院一区二区| 91免费看片在线观看| 精品欧美乱码久久久久久1区2区| 亚洲精品国产一区二区三区四区在线 | 色综合久久久久网| 久久精品一区二区三区不卡| 三级成人在线视频| 日本电影欧美片| 欧美激情一区二区三区在线| 日韩精品一二三| 在线影院国内精品| 综合av第一页| 成人国产在线观看| 精品久久一区二区三区| 日韩成人伦理电影在线观看| 色婷婷综合久久久中文字幕| 国产精品丝袜91| 国产精品1区二区.| 久久久午夜精品理论片中文字幕| 日韩高清在线观看| 欧美男生操女生| 日韩电影在线免费观看| 欧美午夜视频网站| 亚洲一区视频在线| 欧美日韩五月天| 亚洲成人高清在线| 欧美日韩久久一区| 日日嗨av一区二区三区四区| 91免费国产在线| 一区二区三区四区中文字幕| 91毛片在线观看| 1区2区3区欧美| 在线观看网站黄不卡| 亚洲精品国产视频| 欧美伊人精品成人久久综合97| 亚洲女与黑人做爰| 欧美日韩一区二区三区四区 | 日韩午夜精品电影| 免费在线观看成人| 2023国产精华国产精品| 国产一区二区三区在线观看免费视频| 精品剧情在线观看| 国产不卡视频一区二区三区| 中文字幕在线观看不卡视频| 色婷婷久久99综合精品jk白丝 | 欧美情侣在线播放| 久久66热偷产精品| 国产欧美一区二区在线观看| 成人av网在线| 午夜欧美大尺度福利影院在线看| 91麻豆精品91久久久久同性| 国产毛片精品视频| 一区二区三区精品| 精品成人在线观看| 91蜜桃网址入口| 日韩高清一区二区| 国产色91在线| 欧美三级视频在线播放| 国产一区福利在线| 亚洲伊人色欲综合网| 亚洲精品在线一区二区| 97久久精品人人做人人爽50路| 午夜视频在线观看一区| 久久天天做天天爱综合色| 一本到一区二区三区| 狠狠久久亚洲欧美| 亚洲国产精品视频| 久久综合久久综合久久| 91黄色免费版| 丁香婷婷深情五月亚洲| 日韩不卡一区二区三区| 国产精品久久久久久久浪潮网站| 欧美性xxxxxx少妇| 成人av在线资源| 久久99蜜桃精品| 天堂va蜜桃一区二区三区| 国产精品三级电影| 精品国精品国产尤物美女| 色乱码一区二区三区88| 成人午夜激情视频| 黑人巨大精品欧美黑白配亚洲| 一区二区三区**美女毛片| 中国av一区二区三区| 精品卡一卡二卡三卡四在线| 欧美视频一区二| 在线免费观看日韩欧美| 丁香激情综合五月| 国产一区二区三区免费播放| 爽爽淫人综合网网站| 亚洲一区二区成人在线观看| 1区2区3区精品视频| 日本一区二区三区国色天香 | 国产精品久久久久久久久免费樱桃 | 69堂国产成人免费视频| 在线视频综合导航| 一本色道**综合亚洲精品蜜桃冫| 国产成人小视频| 国产a区久久久| 国产激情一区二区三区四区| 麻豆精品一二三| 美女脱光内衣内裤视频久久网站 | 日韩精品中文字幕一区二区三区| 欧美日本在线一区| 欧美亚洲综合网| 欧美亚洲一区二区在线观看| 一道本成人在线| 在线视频国内一区二区| 日本高清不卡aⅴ免费网站| 在线亚洲高清视频| 欧美日韩国产高清一区| 欧美日韩国产综合草草| 欧美日韩国产精品成人| 欧美一区二区三区影视| 日韩一级完整毛片| 精品国产一区久久| 精品国产三级a在线观看| 久久久精品免费免费| 欧美激情资源网| 亚洲视频在线观看三级| 亚洲国产成人av| 久久精品国产秦先生| 国产精品18久久久| 91丝袜呻吟高潮美腿白嫩在线观看| 色哟哟一区二区三区| 欧美三级视频在线播放| 欧美大片在线观看一区| 国产精品系列在线| 亚洲h精品动漫在线观看| 另类欧美日韩国产在线| 国产精品一线二线三线精华| 99视频有精品| 欧美一区二区三区在线视频| 久久综合中文字幕| 一区二区三区在线视频观看 | 国产一本一道久久香蕉| 成人网页在线观看| 欧美日韩高清一区二区不卡| 久久久综合视频| 免费亚洲电影在线| 国产一区二区三区美女| 一本久道久久综合中文字幕| 欧美年轻男男videosbes| www久久精品| 一区二区在线看| 国产麻豆精品一区二区| 91黄色免费网站| 久久久99精品免费观看不卡| 一区二区三区四区五区视频在线观看| 日韩av一区二区在线影视| 成人激情电影免费在线观看| 欧美一二三四区在线| 国产午夜亚洲精品羞羞网站| 亚洲成人综合在线| 99精品视频一区二区|