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

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

?? at91twi.c

?? 包含makefile config.h rominit romstart userinit 等等文件
?? C
字號:
/* at91TWI.c - SNDS IIC driver */

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

/*
modification history
--------------------



INCLUDES:
at91TWI.h
*/

/* includes */

#include "vxWorks.h"
#include "types\vxTypesBase.h"
#include "types\vxTypes.h"
#include "iv.h"
#include "intLib.h"
#include "sysLib.h"
#include "taskLib.h"
#include "semLib.h"
#include "at91twi.h"

/* Local data structures */

LOCAL SNDS_IIC at91TWI;

/* forward static declarations */
LOCAL UINT32 setPreScaler(UINT32 sclk);
LOCAL void at91TWIWriteISR();
LOCAL void at91TWIReadISR();

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

	at91TWI.int_vec = INT_LVL_IIC;
	at91TWI.iiccon = (UINT32 *)SNDS_IICCON;
	at91TWI.iicbuf = (UINT32 *)SNDS_IICBUF;
	at91TWI.iicps = (UINT32 *)SNDS_IICPS;
	at91TWI.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);
	}

/*******************************************************************************
*
* at91TWIDevInit2 - 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 at91TWIDevInit2()
	{
	/* Create mutual semaphore to guard the global SNDS_IIC structure */
	at91TWI.IICSemID = semMCreate (SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE);
	
	/* Synchronisation semaphores */
	at91TWI.IIC_Txmit.endofWriteSemID = semBCreate (SEM_Q_FIFO, SEM_EMPTY); 
	at91TWI.IIC_Rcv.endofReadSemID = semBCreate (SEM_Q_FIFO, SEM_EMPTY); 
	}

/*******************************************************************************
*
* at91TWIWrite - 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 at91TWIWrite (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 (at91TWI.int_vec), at91TWIWriteISR, NULL) == ERROR)
		return(ERROR);
   	if (intEnable (at91TWI.int_vec) == ERROR) /*Enable the IIC bus interrupt */
		return(ERROR);

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

	/* semTake */
	if (semTake (at91TWI.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++)	
				at91TWI.IIC_Txmit.pageBuff[j] = *data++;
			at91TWI.IIC_Txmit.dataSize = sizeOfData;

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

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

				/* If (current write pointer address + no. of data) > max offset, 
				 *  omit out of range data 
				 */
				if ((at91TWI.IIC_Txmit.dataSize + pageAccessAddr) > EEPROM_MAX_SIZE)
					{
					at91TWI.IIC_Txmit.dataSize = (EEPROM_MAX_SIZE - pageAccessAddr);
					bEndWrite = 1;
					}
				}
			}
		at91TWI.IIC_Txmit.flag = 0x0;
		at91TWI.IIC_Txmit.byteWriteCount = 0;
		at91TWI.IIC_Txmit.writeAddrMSB = (UINT8)((pageAccessAddr>>8) & 0xff);
		at91TWI.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, (at91TWI.IIC_Txmit.slaveAddress & S_WRITE));

		/* Wait till one page of data is written */
		if (semTake (at91TWI.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 (at91TWI.int_vec) == ERROR) /*Enable the IIC bus interrupt */
		return(ERROR);

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

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

/*******************************************************************************
*
* at91TWIWriteISR() - 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 at91TWIWriteISR()
	{
	if (!(at91TWI.IIC_Txmit.flag & (UINT8)IIC_TX_BYTE_ADDR_MSB))
		{
		SNDS_IIC_REG_WRITE (iicbuf, at91TWI.IIC_Txmit.writeAddrMSB);
		at91TWI.IIC_Txmit.flag |= (UINT8)IIC_TX_BYTE_ADDR_MSB;
		}
	else if (!(at91TWI.IIC_Txmit.flag & (UINT8)IIC_TX_BYTE_ADDR_LSB))
		{
		SNDS_IIC_REG_WRITE (iicbuf, at91TWI.IIC_Txmit.writeAddrLSB);		
		at91TWI.IIC_Txmit.flag |= (UINT8) IIC_TX_BYTE_ADDR_LSB;
		}
	else if ((at91TWI.IIC_Txmit.byteWriteCount < (UINT32) at91TWI.IIC_Txmit.dataSize))
		{
		SNDS_IIC_REG_WRITE (iicbuf, at91TWI.IIC_Txmit.pageBuff[at91TWI.IIC_Txmit.byteWriteCount++]);
		at91TWI.IIC_Txmit.totalBytesWritten++;
		}
	else
		{
		SNDS_IIC_REG_WRITE (iiccon, SNDS_IIC_STOP);
		semGive (at91TWI.IIC_Txmit.endofWriteSemID);
		}
	}

/*******************************************************************************
*
* at91TWIRead - 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 at91TWIRead (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 (at91TWI.IICSemID, WAIT_FOREVER) == ERROR)
		return (ERROR);

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

	/* Initialising the IIC Rx Structure */
	at91TWI.IIC_Rcv.rxBuff = pBuff;
	at91TWI.IIC_Rcv.flag = 0x0;
	at91TWI.IIC_Rcv.byteReadCount = 0x0;
	at91TWI.IIC_Rcv.dataSize = sizeOfData;
	at91TWI.IIC_Rcv.slaveAddress = slaveAddr; 
	at91TWI.IIC_Rcv.readAddrMSB = (UINT8)((readAddr>>8) & 0xff);
	at91TWI.IIC_Rcv.readAddrLSB = (UINT8)(readAddr & 0xff);
	at91TWI.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, (at91TWI.IIC_Rcv.slaveAddress & S_WRITE));

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

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

   	return(at91TWI.IIC_Rcv.totalBytesRead); 
	}

/*******************************************************************************
*
* at91TWIReadISR() - 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 at91TWIReadISR()
	{
	/* Dummy write to send read address */
	if (!(at91TWI.IIC_Rcv.flag & (UINT8)IIC_RX_BYTE_ADDR_MSB))
		{
		/* Send read address MSB */
		SNDS_IIC_REG_WRITE (iicbuf, at91TWI.IIC_Rcv.readAddrMSB); 
		at91TWI.IIC_Rcv.flag |= (UINT8)IIC_RX_BYTE_ADDR_MSB; 
		}
	else if (!(at91TWI.IIC_Rcv.flag & (UINT8) IIC_RX_BYTE_ADDR_LSB))
		{
		/* Send read address LSB */
		SNDS_IIC_REG_WRITE (iicbuf, at91TWI.IIC_Rcv.readAddrLSB);
		at91TWI.IIC_Rcv.flag |= (UINT8) IIC_RX_BYTE_ADDR_LSB; 
		}
	else if (!(at91TWI.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, at91TWI.IIC_Rcv.slaveAddress | (UINT8)S_READ);

		at91TWI.IIC_Rcv.flag |= (UINT8) IIC_REPEAT_START;
		}
	else if (!(at91TWI.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(at91TWI.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));
			}
   		at91TWI.IIC_Rcv.flag |= (UINT8) IIC_MULTI_RCV;
		}

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

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

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

/*******************************************************************************
*
* at91TWIIoctl - 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 at91TWIIoctl(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)));
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美久久久| 亚洲成a人片在线观看中文| 国产精品乱码人人做人人爱| 一区二区三区不卡视频在线观看| 日韩国产欧美在线观看| 99视频超级精品| 国产欧美一二三区| 久久99国产精品麻豆| 欧美三级在线播放| 亚洲日韩欧美一区二区在线| 国产成人在线免费| 日韩亚洲欧美一区| 天天爽夜夜爽夜夜爽精品视频| 国产做a爰片久久毛片| 欧美一区二区成人| 亚洲第一电影网| 91国模大尺度私拍在线视频| 国产精品午夜免费| 国产精品羞羞答答xxdd| 欧美mv和日韩mv国产网站| 亚洲国产精品久久人人爱| 91成人在线精品| 一区二区三区四区不卡在线| 色综合久久中文综合久久97| 国产精品天干天干在观线| 国产精品综合一区二区三区| 亚洲精品一区二区三区99| 美腿丝袜亚洲一区| 欧美一区二视频| 日韩高清在线观看| 69av一区二区三区| 美腿丝袜亚洲三区| 久久亚洲欧美国产精品乐播| 日本中文字幕一区二区视频| 欧美女孩性生活视频| 肉色丝袜一区二区| 日韩视频在线永久播放| 日本一道高清亚洲日美韩| 欧美一区二区三区不卡| 免费看欧美女人艹b| 日韩一区二区视频在线观看| 久久9热精品视频| 久久先锋影音av鲁色资源网| 国产精品一二三四| 中文字幕在线一区二区三区| 99久久精品国产一区| 亚洲精品成人在线| 欧美电影影音先锋| 精品一区二区在线播放| 国产日韩欧美电影| 日本高清不卡一区| 免费看黄色91| 国产精品天干天干在线综合| 色婷婷激情久久| 日本伊人色综合网| 国产欧美日韩视频在线观看| av电影天堂一区二区在线观看| 亚洲精品免费看| 欧美一区二区三区喷汁尤物| 国产夫妻精品视频| 亚洲丝袜自拍清纯另类| 欧美日本国产一区| 国产精品一区二区男女羞羞无遮挡| 欧美韩日一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 男女男精品视频网| 亚洲欧洲一区二区三区| 欧美日韩一二三区| 国产伦精品一区二区三区免费| 18成人在线观看| 日韩一区二区三区电影在线观看| 国产美女精品在线| 亚洲精品一二三区| 日韩欧美中文一区| 色老头久久综合| 国产一区二三区| 亚洲电影你懂得| 欧美tk丨vk视频| 日本精品免费观看高清观看| 激情图片小说一区| 亚洲午夜精品一区二区三区他趣| 欧美精品一区男女天堂| 91麻豆福利精品推荐| 免费成人在线观看| 亚洲免费观看高清在线观看| 日韩欧美在线观看一区二区三区| 99久久国产综合精品女不卡| 国内欧美视频一区二区| 亚洲aⅴ怡春院| 国产婷婷色一区二区三区| 91精品国产麻豆国产自产在线| 成人久久久精品乱码一区二区三区| 日本亚洲免费观看| 亚洲一级二级三级| 欧美激情一区二区在线| 日韩亚洲欧美在线| 欧美区在线观看| 欧美中文字幕亚洲一区二区va在线| 国产精品一区二区果冻传媒| 日韩一区精品视频| 亚洲精品videosex极品| 久久免费的精品国产v∧| 欧美一区二区黄色| 欧美日韩高清一区二区不卡| 99久久综合99久久综合网站| 韩国成人精品a∨在线观看| 日本美女一区二区| 日韩黄色片在线观看| 亚洲综合免费观看高清在线观看| 亚洲欧洲美洲综合色网| 国产精品毛片大码女人| 久久久精品欧美丰满| 精品乱人伦一区二区三区| 欧美一区二区三区免费在线看 | 国产福利一区二区三区视频在线 | 亚洲影院久久精品| 亚洲女人的天堂| 亚洲欧美一区二区三区国产精品 | 欧美主播一区二区三区美女| 91丨porny丨户外露出| 91在线视频网址| 色噜噜狠狠成人网p站| 91久久精品一区二区三| 欧美三级电影一区| 欧美日韩另类国产亚洲欧美一级| 欧美三级电影在线观看| 91精品在线麻豆| 日韩免费看的电影| 久久日韩粉嫩一区二区三区| 久久精品无码一区二区三区| 国产精品沙发午睡系列990531| 国产精品人妖ts系列视频 | 国产女主播在线一区二区| 国产精品视频第一区| 亚洲精品免费播放| 天天综合色天天综合| 久久99蜜桃精品| 福利一区福利二区| 91麻豆国产在线观看| 4438亚洲最大| 久久精品亚洲乱码伦伦中文| 亚洲精品乱码久久久久久| 亚洲高清不卡在线观看| 久久爱www久久做| heyzo一本久久综合| 亚洲第一av色| 欧美综合在线视频| 欧美日韩午夜在线视频| 日韩欧美电影一区| 中文字幕一区二区三中文字幕 | 久久久噜噜噜久久人人看 | 91在线观看视频| 5566中文字幕一区二区电影 | 国产精品538一区二区在线| 91丝袜美女网| 欧美一区二区大片| 一色屋精品亚洲香蕉网站| 亚洲电影中文字幕在线观看| 国产精品一区二区久激情瑜伽| 一本到不卡精品视频在线观看| 3atv一区二区三区| 中文字幕制服丝袜一区二区三区| 亚洲国产另类av| 成人精品鲁一区一区二区| 欧美日韩三级视频| 国产精品免费免费| 麻豆精品精品国产自在97香蕉 | 91精品国产乱码久久蜜臀| 国产精品三级av| 国产综合色在线视频区| 欧美日韩免费观看一区二区三区| 日本一区二区动态图| 美女国产一区二区| 在线观看视频一区二区 | 精品sm在线观看| 天天色 色综合| 91麻豆精品一区二区三区| 国产片一区二区| 久久av老司机精品网站导航| 制服丝袜亚洲网站| 亚洲一区自拍偷拍| 91在线精品一区二区| 国产欧美视频一区二区三区| 日本亚洲电影天堂| 欧美日韩另类一区| 亚洲综合另类小说| 97精品国产露脸对白| 精品对白一区国产伦| 麻豆视频一区二区| 欧美日韩亚洲不卡| 亚洲一区二区高清| 一本大道av一区二区在线播放| 国产欧美视频在线观看| 国产福利91精品一区| 久久久美女毛片| 丁香六月综合激情| 国产欧美一区二区精品性色| 欧美成人精品1314www| 中文字幕一区二区三区视频| 国产99久久久久久免费看农村|