《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 基于S3C2410的觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)
基于S3C2410的觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)
摘要: 在觸摸屏的設(shè)計(jì)中,抗干擾設(shè)計(jì)是難點(diǎn)和重點(diǎn),直接關(guān)系到觸摸屏的工作性能。實(shí)驗(yàn)發(fā)現(xiàn)坐標(biāo)采集時(shí),丟棄第一次采集值讀取的坐標(biāo)轉(zhuǎn)換值效果較好。本文所介紹的驅(qū)動(dòng)程序已經(jīng)在博創(chuàng)公司的教學(xué)實(shí)驗(yàn)設(shè)備UP-NETarm2410-S平臺(tái)上經(jīng)過實(shí)際驗(yàn)證,從數(shù)據(jù)穩(wěn)定性和系統(tǒng)負(fù)載的角度看,效果良好。同時(shí)通過修改程序內(nèi)部的定時(shí)器時(shí)鐘頻率可以改變筆在屏上移動(dòng)所產(chǎn)生的數(shù)據(jù)量。
Abstract:
Key words :

  引言

  隨著信息家電和通訊設(shè)備的普及,作為與用戶交互的終端媒介,觸摸屏在生活中得到廣泛的應(yīng)用。如何在系統(tǒng)中集成觸摸屏模塊以及在嵌入式操作系統(tǒng)中實(shí)現(xiàn)其驅(qū)動(dòng)程序,都成為嵌入式系統(tǒng)設(shè)計(jì)者需要考慮的問題。本文主要介紹在三星S3C2410X微處理器的硬件平臺(tái)上進(jìn)行基于嵌入式Linux的觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)。

  硬件實(shí)現(xiàn)方案

  SPI接口是Motorola推出的一種同步串行接口,采用全雙工、四線通信系統(tǒng),S3C2410X是三星推出的自帶觸摸屏接口的arm920T內(nèi)核芯片,ADS7843為Burr-Brown生產(chǎn)的一款性能優(yōu)異的觸摸屏控制器。本文采用SPI接口的觸摸屏控制器ADS7843外接四線電阻式觸摸屏,這種方式最顯著的特點(diǎn)是響應(yīng)速度更快、靈敏度更高,微處理器與觸摸屏控制器間的通訊時(shí)間大大減少,提高了微處理器的效率。ADS7843與S3C2410的硬件連接如圖1所示,鑒于ADS7843差分工作模式的優(yōu)點(diǎn),在硬件電路中將其配置為差分模式。


圖1 觸摸屏輸入系統(tǒng)示意圖

  嵌入式Linux系統(tǒng)下的驅(qū)動(dòng)程序

  設(shè)備驅(qū)動(dòng)程序是Linux內(nèi)核的重要組成部分,控制了操作系統(tǒng)和硬件設(shè)備之間的交互。Linux的設(shè)備管理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,成為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉、讀寫這些設(shè)備文件,對(duì)設(shè)備的操作就像操作普通的數(shù)據(jù)文件一樣簡(jiǎn)便。為開發(fā)便利、提高效率,本設(shè)計(jì)采用可安裝模塊方式開發(fā)調(diào)試觸摸屏驅(qū)動(dòng)程序。

  設(shè)備驅(qū)動(dòng)在加載時(shí)首先需要調(diào)用入口函數(shù)init_module(),該函數(shù)完成設(shè)備驅(qū)動(dòng)的初始化工作。其中最重要的工作就是向內(nèi)核注冊(cè)該設(shè)備,對(duì)于字符設(shè)備調(diào)用register_chrdev()完成注冊(cè),對(duì)于塊設(shè)備需要調(diào)用register_blkdev()完成注冊(cè)。注冊(cè)成功后,該設(shè)備獲得了系統(tǒng)分配的主設(shè)備號(hào)、自定義的次設(shè)備號(hào),并建立起與文件系統(tǒng)的關(guān)聯(lián)。字符設(shè)備驅(qū)動(dòng)程序向Linux內(nèi)核注冊(cè)登記時(shí),在字符設(shè)備向量表chrdevs中增加一個(gè)device_struct數(shù)據(jù)結(jié)構(gòu)條目,這個(gè)設(shè)備的主設(shè)備標(biāo)識(shí)符用作這個(gè)向量表的索引。向量表中的每一個(gè)條目,即一個(gè)device_struct數(shù)據(jù)結(jié)構(gòu)包括兩個(gè)元素:一個(gè)登記的設(shè)備驅(qū)動(dòng)程序的名稱的指針和一個(gè)指向一組文件操作的指針。這塊文件操作本身位于這個(gè)設(shè)備的字符設(shè)備驅(qū)動(dòng)程序中,每一個(gè)都處理特定的文件操作,比如打開、讀寫和關(guān)閉。所謂登記,就是將由模塊提供的file_operations結(jié)構(gòu)指針填入device_struct數(shù)據(jù)結(jié)構(gòu)數(shù)組的某個(gè)表項(xiàng)。登記以后,位于上層的模塊(內(nèi)核)可以“看見”這個(gè)模塊了。但是,應(yīng)用程序卻還不能“看見”它,因而還不能通過系統(tǒng)調(diào)用它。要使應(yīng)用程序能“看見”這個(gè)模塊或者它所驅(qū)動(dòng)的設(shè)備,就要在文件系統(tǒng)中為其創(chuàng)建一個(gè)代表它的節(jié)點(diǎn)。通過系統(tǒng)調(diào)用mknod()創(chuàng)建代表此項(xiàng)設(shè)備的文件節(jié)點(diǎn)——設(shè)備入口點(diǎn),就可使一項(xiàng)設(shè)備在系統(tǒng)中可見,成為應(yīng)用程序可以訪問的設(shè)備。另外,設(shè)備驅(qū)動(dòng)在卸載時(shí)需要回收相應(yīng)的資源,令設(shè)備的相應(yīng)寄存器值復(fù)位并從系統(tǒng)中注銷該設(shè)備。

  Linux操作系統(tǒng)通過系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制轉(zhuǎn)移。設(shè)備驅(qū)動(dòng)模塊的功能就是擴(kuò)展內(nèi)核的功能,主要完成兩部分任務(wù):一個(gè)是系統(tǒng)調(diào)用,另一個(gè)是處理中斷。圖2是一個(gè)設(shè)備驅(qū)動(dòng)模塊動(dòng)態(tài)掛接、卸載和系統(tǒng)調(diào)用的全過程。系統(tǒng)調(diào)用部分則是對(duì)設(shè)備的操作過程,比如open,read,write,ioctl等操作,設(shè)備驅(qū)動(dòng)程序所提供的這組入口點(diǎn)由幾個(gè)結(jié)構(gòu)向系統(tǒng)進(jìn)行說明,分別是file_operations數(shù)據(jù)結(jié)構(gòu)、inode數(shù)據(jù)結(jié)構(gòu)和file 數(shù)據(jù)結(jié)構(gòu)。內(nèi)核內(nèi)部通過file結(jié)構(gòu)識(shí)別設(shè)備,通過file_operations數(shù)據(jù)結(jié)構(gòu)提供文件系統(tǒng)的入口點(diǎn)函數(shù),也就是訪問設(shè)備驅(qū)動(dòng)的函數(shù),結(jié)構(gòu)中的每一個(gè)成員都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)用。在嵌入式系統(tǒng)的開發(fā)中,我們一般僅僅實(shí)現(xiàn)其中幾個(gè)接口函數(shù):read、write、open、ioctl及release就可以完成應(yīng)用系統(tǒng)需要的功能。寫驅(qū)動(dòng)程序的任務(wù)之一就是完成file_operations中的函數(shù)指針。

 

 

 

  觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)

  觸摸屏驅(qū)動(dòng)程序中重要數(shù)據(jù)結(jié)構(gòu)

  typedef struct {

  unsigned short pressure;

  unsigned short x;

  unsigned short y;

  unsigned short pad;

  } TS_RET;

  typedef struct {

  unsigned int PenStatus;

  TS_RET buf[MAX_TS_BUF];

  unsigned int head, tail;

  wait_queue_head_t wq;

  spinlock_t lock;

  } TS_DEV;

  static struct file_operations s3c2410_fops = {

  owner: THIS_MODULE,

  open: s3c2410_ts_open,

  read: s3c2410_ts_read,   release: s3c2410_ts_release,

  poll: s3c2410_ts_poll,    };

  在程序中有三個(gè)重要的數(shù)據(jù)結(jié)構(gòu):用于表示筆觸點(diǎn)數(shù)據(jù)信息的結(jié)構(gòu)TS_RET,表示ADS7843中有關(guān)觸摸屏控制器信息的結(jié)構(gòu)TS_DEV,以及驅(qū)動(dòng)程序與應(yīng)用程序的接口file_operations結(jié)構(gòu)的s3c2410_fops。

  TS_RET結(jié)構(gòu)體中的信息就是驅(qū)動(dòng)程序提供給上層應(yīng)用程序使用的信息,用來存儲(chǔ)觸摸屏的返回值。上層應(yīng)用程序通過讀接口,從底層驅(qū)動(dòng)中讀取信息,并根據(jù)得到的值進(jìn)行其他方面的操作。

  TS_DEV結(jié)構(gòu)用于記錄觸摸屏運(yùn)行的各種狀態(tài),PenStatus包括PEN_UP、PEN_DOWN和PEN_FLEETING。buf[MAX_TS_BUF]是用來存放數(shù)據(jù)信息的事件隊(duì)列,head、tail分別指向事件隊(duì)列的頭和尾。程序中的筆事件隊(duì)列是一個(gè)環(huán)形結(jié)構(gòu),當(dāng)有事件加入時(shí),隊(duì)列頭加一,當(dāng)有事件被取走時(shí),隊(duì)列尾加一,當(dāng)頭尾位置指針一致時(shí)讀取筆事件的信息,進(jìn)程會(huì)被安排進(jìn)入睡眠。wq等待隊(duì)列,包含一個(gè)鎖變量和一個(gè)正在睡眠進(jìn)程鏈表。當(dāng)有好幾個(gè)進(jìn)程都在等待某件事時(shí),Linux會(huì)把這些進(jìn)程記錄到這個(gè)等待隊(duì)列。它的作用是當(dāng)沒有筆觸事件發(fā)生時(shí),阻塞上層的讀操作,直到有筆觸事件發(fā)生。lock使用自旋鎖,自旋鎖是基于共享變量來工作的,函數(shù)可以通過給某個(gè)變量設(shè)置一個(gè)特殊值來獲得鎖。而其他需要鎖的函數(shù)則會(huì)循環(huán)查詢鎖是否可用。MAX_TS_BUF的值為16,即在沒有被讀取之前,系統(tǒng)緩沖區(qū)中最多可以存放16個(gè)筆觸數(shù)據(jù)信息。

  s3c2410_fops就是內(nèi)核對(duì)驅(qū)動(dòng)的調(diào)用接口,完成了將驅(qū)動(dòng)函數(shù)映射為標(biāo)準(zhǔn)接口。上面的這種特殊表示方法不是標(biāo)準(zhǔn)C的語法,而是GNU編譯器的一種特殊擴(kuò)展,它使用名字進(jìn)行結(jié)構(gòu)字段的初始化,它的好處體現(xiàn)在結(jié)構(gòu)清晰,易于理解,并且避免了結(jié)構(gòu)發(fā)生變化帶來的許多問題。

  init_module函數(shù)

  這是模塊的入口函數(shù)。在函數(shù)內(nèi)部通過s3c2410_ts_init( )實(shí)現(xiàn)模塊的初始化工作。在本設(shè)計(jì)中設(shè)備與系統(tǒng)之間以中斷方式進(jìn)行數(shù)據(jù)交換。整個(gè)觸摸屏的驅(qū)動(dòng)程序處理比較復(fù)雜,而且耗時(shí)較長(zhǎng),因而觸摸屏驅(qū)動(dòng)程序不可能在中斷服務(wù)程序中完成。在Linux操作系統(tǒng)中一般把中斷處理切為兩個(gè)部分或兩半。中斷處理程序是上半部——接收到一個(gè)中斷,它就立即開始執(zhí)行,但只做有嚴(yán)格時(shí)限的工作,例如對(duì)接收的中斷進(jìn)行應(yīng)答或復(fù)位硬件。這些工作都是在所有中斷被禁止的情況下完成的,能夠被允許稍后完成的工作會(huì)推遲到下半部去。在Linux中下半部的實(shí)現(xiàn)有多種機(jī)制。按觸摸屏?xí)r,從ADS7843輸出的數(shù)值有一個(gè)抖動(dòng)過程,即從ADS7846輸出的數(shù)值有一個(gè)不穩(wěn)定時(shí)期,這個(gè)過程大約為10ms。所以中斷處理程序的下半部處理函數(shù)采用內(nèi)核定時(shí)器機(jī)制,使下半部在中斷發(fā)生50ms后再作處理。這樣有效地避開了ADS7843輸出值的不穩(wěn)定時(shí)期,使中斷服務(wù)程序和中斷處理任務(wù)串行化,達(dá)到了處理時(shí)間較長(zhǎng)的觸摸屏事件的目的。驅(qū)動(dòng)程序通過request_irq函數(shù)注冊(cè)并激活一個(gè)中斷處理程序,以便處理中斷。


圖2 設(shè)備驅(qū)動(dòng)在內(nèi)核中的掛接、卸載和系統(tǒng)調(diào)用過程

 

 

  int reguest_irq(unsigned int irq, void(*handler)(int, void *, struct pt_regs *), unsigned long irq_flags, const char *dev_name, void *dev_id)

  參數(shù)irq表示所要申請(qǐng)的中斷號(hào);handler為向系統(tǒng)登記的中斷處理子程序,中斷產(chǎn)生時(shí)由系統(tǒng)來調(diào)用;dev_name為設(shè)備名;dev_id為申請(qǐng)時(shí)告訴系統(tǒng)的設(shè)備標(biāo)識(shí)符;irq_flags是申請(qǐng)時(shí)的選項(xiàng),它決定中斷處理程序的一些特性,其中最重要的是中斷處理程序是快速處理程序還是慢速處理程序。

  本設(shè)計(jì)中觸摸屏控制器ADS7843的中斷輸出通過外部中斷5接在中斷控制器上,當(dāng)觸摸屏上有觸摸事件發(fā)生時(shí),會(huì)引發(fā)中斷號(hào)為IRQ_EINT5的中斷服務(wù)程序s3c2410_isr_tc()。圖3所示為該中斷處理程序的流程圖。


圖3 觸摸屏硬件中斷處理程序流程圖

  在s3c2410_isr_tc()中設(shè)定了定時(shí)器的定時(shí)時(shí)間為50ms,并立即激活。因此有觸摸屏硬件中斷的情況下50ms后就會(huì)引發(fā)定時(shí)中斷,中斷服務(wù)程序?yàn)閠s_timer_handler(),這個(gè)程序?qū)崿F(xiàn)了觸摸屏中斷的下半部,即在過了抖動(dòng)時(shí)間之后如果觸摸屏確實(shí)有有效事件發(fā)生則采集觸摸屏坐標(biāo),并將定時(shí)器的時(shí)間重新設(shè)為100ms并重新激活,這樣做的目的是如果觸摸筆是拖動(dòng)的情況,以后每100ms采集一次坐標(biāo)值,并存入緩沖區(qū),如果不是拖動(dòng)在采集一次坐標(biāo)值之后,在第二次進(jìn)入ts_timer_handler()時(shí),查詢管腳的狀態(tài)值,則變?yōu)楦唠娖?,就將觸摸屏狀態(tài)tsdev.PenStatus設(shè)為PEN_UP,并釋放定時(shí)器,為下次觸摸屏事件做好準(zhǔn)備,定時(shí)中斷服務(wù)程序流程圖如圖4所示。


圖4 定時(shí)中斷服務(wù)程序流程圖

 

 

  在s3c2410_ts_init()中的另一個(gè)重要任務(wù)是執(zhí)行接口函數(shù)s3c2410_ts_open(),在這個(gè)函數(shù)中初始化緩沖區(qū)的頭尾指針、觸摸屏狀態(tài)變量及觸摸屏事件等待隊(duì)列。

  module_exit()

  該函數(shù)調(diào)用s3c2410_ts_exit(),主要任務(wù)是撤銷驅(qū)動(dòng)程序向內(nèi)核的登記以及釋放申請(qǐng)的中斷資源。

  接口函數(shù)s3c2410_ts_read( )

  這個(gè)函數(shù)實(shí)現(xiàn)的任務(wù)是將事件隊(duì)列從設(shè)備緩存中讀到用戶空間的數(shù)據(jù)緩存中。實(shí)現(xiàn)的過程主要是通過一個(gè)循環(huán),只有在事件隊(duì)列的頭、尾指針不重合時(shí),才能成功的從tsdev.tail指向的隊(duì)列尾部讀取到一組觸摸信息數(shù)據(jù),并退出循環(huán)。否則調(diào)用讀取函數(shù)的進(jìn)程就要進(jìn)入睡眠。

  坐標(biāo)讀取函數(shù)s3c2410_get_XY()

  在定時(shí)器中斷處理程序中,當(dāng)查詢到與相連的EINT5/GPF5為低電平時(shí),即表示有有效事件,應(yīng)該調(diào)用s3c2410_get_XY()函數(shù)采集筆觸信息。

  ADS7843有多種轉(zhuǎn)換時(shí)序,時(shí)序規(guī)定了芯片與設(shè)備及CPU間是如何配合工作的。設(shè)計(jì)中采用16個(gè)時(shí)鐘周期啟動(dòng)一次轉(zhuǎn)換的坐標(biāo)轉(zhuǎn)換方式。ADS7843的操作時(shí)序如圖5所示。坐標(biāo)的讀取是通過多次采集取平均值的方法,以X坐標(biāo)的讀取為例,其讀取過程如圖6所示。循環(huán)過程中的每一步都在8個(gè)時(shí)鐘周期內(nèi)完成,數(shù)據(jù)的處理嚴(yán)格按照時(shí)序進(jìn)行,Y坐標(biāo)的采集與X坐標(biāo)類似。


圖5 ADS7843操作時(shí)序


圖6 X坐標(biāo)采集流程

  結(jié)語

  在觸摸屏的設(shè)計(jì)中,抗干擾設(shè)計(jì)是難點(diǎn)和重點(diǎn),直接關(guān)系到觸摸屏的工作性能。實(shí)驗(yàn)發(fā)現(xiàn)坐標(biāo)采集時(shí),丟棄第一次采集值讀取的坐標(biāo)轉(zhuǎn)換值效果較好。本文所介紹的驅(qū)動(dòng)程序已經(jīng)在博創(chuàng)公司的教學(xué)實(shí)驗(yàn)設(shè)備UP-NETarm2410-S平臺(tái)上經(jīng)過實(shí)際驗(yàn)證,從數(shù)據(jù)穩(wěn)定性和系統(tǒng)負(fù)載的角度看,效果良好。同時(shí)通過修改程序內(nèi)部的定時(shí)器時(shí)鐘頻率可以改變筆在屏上移動(dòng)所產(chǎn)生的數(shù)據(jù)量。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲国产日韩欧美在线图片| 亚洲精品一区二区在线| 欧美成人免费观看| 久久久精品动漫| 久久精品国产精品亚洲综合| 亚洲欧美国产高清va在线播| 亚洲少妇在线| 亚洲视频精选| 亚洲午夜视频在线| 亚洲午夜视频| 午夜精品久久久久久久99樱桃| 亚洲视频网站在线观看| 99国内精品久久| 99精品国产在热久久下载| 99伊人成综合| 亚洲一区二区高清| 免费日本视频一区| 亚洲欧洲视频| 亚洲精品日韩久久| 亚洲精品一区在线观看| 亚洲精品免费网站| 99综合电影在线视频| 在线一区二区三区四区五区| 一区二区三区视频在线播放| 制服诱惑一区二区| 亚洲一区二区欧美日韩| 亚洲视频欧美视频| 亚洲欧美激情视频| 欧美一级二区| 久久婷婷综合激情| 欧美激情在线观看| 国产精品videossex久久发布| 国产精品99免费看| 国产欧美日韩综合一区在线播放 | 99视频在线精品国自产拍免费观看 | 久久精品国产亚洲aⅴ| 亚洲国产另类久久精品| 日韩一区二区久久| 亚洲影院色无极综合| 欧美在线日韩| 蜜桃av噜噜一区| 欧美日韩系列| 国产拍揄自揄精品视频麻豆| 极品日韩av| 99re6这里只有精品视频在线观看| 一片黄亚洲嫩模| 小黄鸭视频精品导航| 亚洲精美视频| 亚洲在线视频观看| 久久一二三四| 欧美日韩在线播放三区| 国产亚洲欧美一级| 亚洲区第一页| 午夜视频久久久| 欧美日韩一二区| 欧美在线免费一级片| 欧美电影资源| 国产精品一区二区男女羞羞无遮挡| 国产日韩欧美精品在线| 在线国产日韩| 亚洲一区精品视频| 91久久国产精品91久久性色| 一区二区三区四区五区视频| 欧美综合第一页| 欧美日韩国产三区| 国产一区在线免费观看| 一本色道婷婷久久欧美| 欧美一区二区在线观看| 一区二区高清| 久久久久久久精| 欧美婷婷久久| 亚洲电影免费观看高清完整版在线观看 | 在线综合亚洲欧美在线视频| 欧美一区不卡| 欧美日韩国产天堂| 狠狠色丁香婷婷综合影院| 99精品欧美一区二区三区| 久久国产福利国产秒拍| 亚洲一级电影| 欧美激情第10页| 精品不卡在线| 午夜国产精品影院在线观看| 日韩手机在线导航| 久久精品国产一区二区三区免费看| 欧美日韩国产在线播放网站| 韩日成人av| 午夜激情综合网| 亚洲一区亚洲二区| 欧美美女bb生活片| 一区精品在线| 香蕉久久夜色| 亚洲欧美中文日韩v在线观看| 欧美另类高清视频在线| 在线观看亚洲一区| 欧美在线一区二区三区| 亚洲欧美中日韩| 欧美色欧美亚洲高清在线视频| 在线免费观看视频一区| 先锋资源久久| 欧美在线黄色| 国产精品揄拍500视频| 在线亚洲高清视频| 亚洲一级特黄| 欧美视频一区二区三区…| 亚洲国产精品一区二区www在线| 欧美专区一区二区三区| 欧美怡红院视频一区二区三区| 欧美日韩在线视频首页| 91久久亚洲| 亚洲精品在线免费观看视频| 美女在线一区二区| 精品盗摄一区二区三区| 欧美中文字幕视频在线观看| 欧美一区二区三区四区在线观看地址 | 久久xxxx精品视频| 久久久成人精品| 国产一区在线免费观看| 欧美一区网站| 久久久久久成人| 国产在线精品自拍| 久久精品久久99精品久久| 久久久国产精品一区二区三区| 国产精品一区二区欧美| 亚洲一区二区三区高清不卡| 亚洲专区免费| 国产精品夜色7777狼人| 亚洲欧美日韩国产中文在线| 性久久久久久久久| 国产欧美日韩视频一区二区三区 | 欧美综合国产精品久久丁香| 久久精品国产亚洲高清剧情介绍| 国产伦一区二区三区色一情| 亚洲资源av| 久久国产主播精品| 国产一区二区三区久久| 久久xxxx| 欧美韩日视频| 99国产欧美久久久精品| 亚洲欧美日韩第一区| 国产精品视频xxxx| 欧美亚洲日本网站| 久久综合色88| 亚洲精品国产系列| 亚洲一区观看| 国产麻豆精品久久一二三| 午夜精品国产| 美女尤物久久精品| 99国产精品久久久久久久成人热 | 国产精品萝li| 久久精品99国产精品酒店日本| 老鸭窝毛片一区二区三区| 亚洲日本va在线观看| 亚洲一区国产一区| 国产亚洲成精品久久| 亚洲国产欧美一区二区三区同亚洲 | 日韩视频二区| 亚洲欧美亚洲| 国产亚洲欧美另类中文| 亚洲人成艺术| 欧美性猛交xxxx乱大交蜜桃| 亚洲欧美一区二区三区在线| 久久久欧美精品sm网站| 亚洲欧洲在线播放| 欧美一区日韩一区| 亚洲电影网站| 亚洲欧美日本视频在线观看| 黄网站免费久久| 亚洲视频你懂的| 狠狠久久亚洲欧美专区| 一区二区久久久久| 国产欧美在线观看一区| 亚洲美女黄色片| 国产美女精品| 99精品欧美一区二区蜜桃免费| 国产精品夜夜夜| 亚洲精品一区二| 国产欧美另类| 91久久久久久国产精品| 国产精品日本精品| 91久久精品一区| 国产女人aaa级久久久级| 亚洲日本视频| 国产欧美日韩精品一区| 亚洲麻豆av| 国产在线欧美日韩| 亚洲综合社区| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美日韩中文播放| 91久久国产自产拍夜夜嗨| 午夜久久资源| 亚洲精品一区二区在线| 久久精品亚洲一区二区| 99热在线精品观看| 蜜桃精品久久久久久久免费影院| 亚洲一区二区av电影| 欧美国产日韩亚洲一区| 午夜视频久久久| 国产精品国产三级国产a| 日韩亚洲视频| 在线观看视频一区二区|