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

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

?? sndsiic.c

?? 三星公司出arm7內(nèi)核4510VXWORKS環(huán)境下驅(qū)動(dòng)開(kāi)發(fā)包
?? 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一区二区三区免费野_久草精品视频
欧美日韩一级二级| 久久久一区二区| 日韩一区二区在线免费观看| 精品国产乱码久久久久久牛牛| 日韩视频免费直播| 国产亚洲制服色| 一区二区高清在线| 精品一区免费av| 91视频www| 欧美精品一区二区三区在线播放| 国产人成一区二区三区影院| 亚洲欧美视频在线观看视频| 免费高清成人在线| 成人黄色片在线观看| 欧美日韩mp4| 国产精品久久看| 蜜桃av噜噜一区二区三区小说| 国产不卡免费视频| 欧美日韩国产美| 国产精品高潮久久久久无| 亚洲国产综合视频在线观看| 国产精品88888| 欧美一级黄色录像| 亚洲精品一区二区三区香蕉| 成人黄色综合网站| 日韩一区二区三免费高清| 亚洲精选一二三| 成人黄色片在线观看| 欧美国产97人人爽人人喊| 久久99精品国产麻豆婷婷| 欧美男女性生活在线直播观看| 综合网在线视频| 成人免费看视频| 中文字幕在线不卡一区二区三区| 激情图片小说一区| 国产亚洲欧美激情| 99久久久久免费精品国产| 综合电影一区二区三区| 91一区二区在线| 亚洲精品视频在线| 在线观看不卡一区| 日韩国产在线观看| 久久久一区二区三区| 成人av片在线观看| 亚洲乱码国产乱码精品精可以看| 91天堂素人约啪| 亚洲一区二区美女| 91麻豆精品国产91久久久更新时间| 午夜精品久久久| 久久久午夜精品理论片中文字幕| 国产福利一区二区三区视频在线 | 97se亚洲国产综合在线| 日韩伦理电影网| 欧美视频一区在线观看| 秋霞影院一区二区| 久久丝袜美腿综合| 97精品视频在线观看自产线路二| 亚洲午夜视频在线| 久久综合狠狠综合久久激情| gogo大胆日本视频一区| 亚洲高清免费观看高清完整版在线观看| 欧美一区二区视频在线观看2022 | 丝袜诱惑制服诱惑色一区在线观看| 日韩一区二区三区视频在线观看 | 日韩一区欧美二区| 国产人成一区二区三区影院| 在线一区二区观看| 国内精品在线播放| 一区二区三区成人在线视频| 日韩欧美在线123| 91在线视频在线| 欧美aaa在线| 亚洲少妇中出一区| 欧美成人激情免费网| 色网综合在线观看| 国产一区二区福利| 亚洲成人动漫一区| 欧美激情综合网| 日韩一区二区三区电影 | 欧美精品18+| av一区二区三区在线| 麻豆91精品视频| 一区二区三区四区不卡在线| 国产日韩成人精品| 欧美一区二区观看视频| 91蝌蚪国产九色| 国产电影一区二区三区| 午夜精品一区二区三区三上悠亚| 国产三级精品视频| 日韩欧美亚洲国产另类| 欧美性色黄大片| 91一区二区在线| 国产不卡高清在线观看视频| 蜜桃在线一区二区三区| 亚洲伦理在线免费看| 中文字幕欧美国产| 久久看人人爽人人| 久久综合九色欧美综合狠狠| 91精品国产综合久久精品app| 91香蕉视频污在线| 国产呦精品一区二区三区网站| 日韩有码一区二区三区| 亚洲电影第三页| 亚洲国产欧美一区二区三区丁香婷| 国产精品久久二区二区| 久久精品欧美一区二区三区麻豆| 欧美成人三级电影在线| 日韩三级伦理片妻子的秘密按摩| 欧美日韩在线观看一区二区 | 欧美天堂一区二区三区| 91麻豆swag| 91蜜桃网址入口| 97精品久久久久中文字幕| 成人av资源网站| 99麻豆久久久国产精品免费优播| 国产suv精品一区二区6| 国产精品一区二区不卡| 国产精品123| 成人在线一区二区三区| 成人高清视频在线观看| 99久精品国产| 91福利资源站| 91精品欧美久久久久久动漫| 欧美一区二区福利视频| 精品国产一区二区三区av性色| 日韩精品影音先锋| 国产丝袜在线精品| 亚洲欧美精品午睡沙发| 亚洲影院理伦片| 日韩电影在线一区二区| 狠狠色丁香久久婷婷综合丁香| 国产老妇另类xxxxx| 成人av综合在线| 欧美午夜精品久久久久久孕妇| 欧美三级电影一区| 日韩精品一区二区三区四区| 国产亚洲自拍一区| 亚洲卡通欧美制服中文| 日韩黄色小视频| 国产高清精品网站| 欧美制服丝袜第一页| 日韩美一区二区三区| 欧美韩国日本一区| 亚洲福利视频一区二区| 久久99蜜桃精品| 91丨九色丨蝌蚪丨老版| 91精品免费在线| 中文字幕成人在线观看| 亚洲成人第一页| 成人污污视频在线观看| 欧美日韩国产天堂| 中文字幕久久午夜不卡| 午夜欧美大尺度福利影院在线看| 激情综合网最新| 欧美优质美女网站| 久久人人97超碰com| 亚洲免费伊人电影| 激情深爱一区二区| 欧美日韩小视频| 中文字幕av一区二区三区高 | 日韩一区精品字幕| 99久久久久久| 日韩美女在线视频| 一区二区三区毛片| 国产高清亚洲一区| 欧美一区二区不卡视频| 亚洲男人天堂一区| 黑人巨大精品欧美黑白配亚洲| 色一情一乱一乱一91av| 国产日韩影视精品| 免费精品视频在线| 欧美图区在线视频| 亚洲三级小视频| 国产a精品视频| 精品国产一区二区三区四区四| 亚洲超碰精品一区二区| 色婷婷亚洲精品| 中文字幕一区二区三区色视频| 韩国一区二区视频| 欧美一个色资源| 日韩电影在线看| 欧美色爱综合网| 一区二区三区91| 一本色道久久加勒比精品| 国产精品视频一二| 国产传媒欧美日韩成人| 精品国免费一区二区三区| 蜜臀av亚洲一区中文字幕| 91精品国产高清一区二区三区| 夜夜夜精品看看| 日本丶国产丶欧美色综合| 亚洲免费观看高清完整版在线观看| 国产成a人无v码亚洲福利| 久久久精品免费免费| 国产精品99久久久久久似苏梦涵| 亚洲精品一区二区三区香蕉 | 久久爱www久久做| 日韩欧美一级特黄在线播放| 美女在线一区二区| 欧美一区二区美女|