《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式Linux下ARM處理器與DSP的數據通信
嵌入式Linux下ARM處理器與DSP的數據通信
國外電子元器件
孫文廉 段義隆 張媛媛
摘要: 嵌入式Linux下ARM處理器與DSP的數據通信,本文通過一個開發實例詳細說明如何通過DSP的HPI接口與運行Linux操作系統的ARM架構處理器進行數據通信。給出接口部分的實際電路和ARM-Linux下驅動程序的開發過程。
Abstract:
Key words :

    摘要:本文通過一個開發實例詳細說明如何通過DSP的HPI接口與運行Linux操作系統的ARM架構處理器進行數據通信。給出接口部分的實際電路和ARM-Linux下驅動程序的開發過程。

    關鍵詞:設備驅動程序 嵌入式Linux HPI ARM DSP

1 引言

基于ARM核心處理器的嵌入式系統以其自身資源豐富、功耗低、價格低廉、支持廠商眾多的緣故,越來越多地應用在各種需要復雜控制和通信功能的嵌入式系統中。

內核源碼開放的Linux與ARM體系處理器相結合,可以發揮Linux系統支持各種協議及存在多進程調度機制的優點,從而使開發周期縮短,擴展性增強。作為數字處理專用電路,DSP的數字信號處理能力十分強大,但對諸如任務管理、通信、人機交互等功能的實現較為困難。

如果將這三者結合起來,即由DSP結合采樣電路采集并處理信號,由ARM處理器作為平臺,運行Linux操作系統,將經過DSP運算的結果發送給用戶程序進行進一步處理,然后提供給圖形化友好的人機交互環境完成數據分析和網絡傳輸等功能,就會最大限度的發揮三者所長。

2 系統結構

該系統硬件由二部分組成,其中一部分為若干塊DSP板,各自獨立承接數據采集和信號處理。另一部分為以ARM為核心處理器的CPU板。系統硬件框圖如圖1所示(僅接口部分)。

3 接口硬件部分設計

3.1 HPI接口簡介

HPI接口是TI公司新一代、高性能DSP上用以完成與主機或其他DSP之間數據交換的接口,這里主要介紹實際電路中使用的控制引腳和時序。

HCNTL0和HCNTL1為訪問控制選擇。用來確定主機(ARM)究竟對TMS320C6711中的哪一個HPI寄存器進行處理。具體功能如表1所列。

表1 HCNTL0和HCNTL1的功能

HCNTL0 HCNTL1

功    能

0 0 主機對HPI控制寄存器(HPIC)進行讀寫
0 1 主機對HPI地址寄存器(HPIA)進行讀寫
1 0 主機對HPI數據寄存器(HPID)地址自動增加模式(Auto increment mode)進行讀寫,對HPID讀寫后,地址寄存器(HPIA)自動增加一個字地址(4字節地址)
1 1 主機對HPI數據寄存器(HPID)地址固定模式(Fixed mode)進行讀寫。對HPID讀寫后,地址寄存器(HPIA)保持不變

HR/W:讀寫選擇控制。為“1”表示是從DSP中讀,反之則為寫。

HHWIL:半字節定義選擇,與HPIC寄存器中的HWOB位進行配合可以選擇當前傳輸的是高半字還是低半字。低電平是第一個半字,高電平是第二個半字。

HCS:選通脈沖(Strobe),與HDS1、HDS2相互配合完成內部信號HSTROBE的生成。邏輯關系如圖2所示。

將HDS1、HDS2分別固定為高電平和低電平,這樣HCS就和HSTROBE完全一致。

HSTROBE讀時序如圖3所示。

3.2 接口電路

ARM處理器通過DSP的HPI接口與DSP進行連接的硬件原理如圖4所示(以單板DSP為例)。其中SN74LVTH16245為16位(二個8位)雙向三態總線收發器,主要起總線驅動和方向控制的作用同時也保證在不對HPI口進行操作時數據總線鎖閉。AT91RM9200為Atmel公司生產的ARM9為核心的處理器,其中引腳D0-D15為數據總線,A2-A8為地址總線的一部分,CS3為片選信號線,當ARM對總線地址范圍為0x40000 0000~0x4FFF FFFF的外部設備進行操作時,會在該引腳產生一個片選信號。同時該信號控制SN74LVTH16245的使能端,避免在讀寫其他地址時對HPI端口造成影響。TMS320C6711D是TI公司生產的DSP,每秒可以完成15億次浮點運算,數據處理功能十分強大。引腳D0-D15為數據總線。其余端口是HPI接口的控制引腳。

4 驅動程序設計

4.1 Linux驅動程序簡介

在Linux操作系統下有二種方式將驅動程序裝入操作系統內核:一種是直接將驅動程序編譯進內核,另外一種是將驅動程序構建為驅動程序模塊后采用insmod/rmmod命令將模塊加載內核中。由于是在嵌入式系統中進行程序開,所以筆者選用了模塊加載方式。這樣,在整個程序的調試過程中不必因為修改某處而反復編譯整個內核,只需編譯驅動程序模塊并重新加載。

本例中Linux下的驅動程序主要用來完成文件(Linux把外部設備也認為是文件)的打開、關閉、讀、寫等操作。也就是對如下結合的填充。

Static struct file_operations fops=

{open:hpi_open,

release:hpi_release,

mmap:hpi_mmap,

};

其中,open和release完成設備的打開和關閉。mmap為內存地址映射操作。因為采用的是模塊加載方式,所以還應該加上int init_module(void)和void cleanup_module(void)函數,以完成模塊的注冊和卸載。

4.2 驅動程序中映射的實現

由于驅動程序的內存空間是在內核空間中,因此首先應解決內核空間與用戶空間的交互問題。這里采用最直接的方式將內核空間和用戶空間聯系起來實現映射,即利用remap_page_range內核函數(通過mmap系統調用實現)。

函數原形如下:

int remap_page_range(unsigned long virt_add,unsigned long phys_add,unsigned long size,pgprot_tprot);

函數的功能是構造用于映射一段物理地址的新頁表。函數返回的值通常是0或者一個負的錯誤碼。函數參數的確切含義如下:

virt_add:重映射起始處的用戶虛擬地址。phys_add:虛擬地址所映射的物理地址。Size:被重映射的區域的大小。Prot:新VMA(virtual memory area)的“保證(protection)”標志。具體定義在源泉文件/include/linux/mm.h中。系統調用MMAP的程序代碼如下:

static int hpi_mmap(struct file *f,struct vm_area_struct *vma)

vma->vm_flags|=VM_WRITE;

if(remap_page_range(vma->vm_start,((0x40000000)),

vma->vm_end-vma->vm_start,(_pgprot (pgprot_val(pgprot_noncached(vma->vm_page_prot))|

(L_PTE_WRITE|L_PTE_DIRTY))))) //進行映射

{return -1;} //映射失敗

return 0;

}

結合硬件結構可對函數remap_page_range()分別填充如下參數:

remap_page_range(vma->vm_start,((0x40000000)),vma->vm_end-vma->vm_start,(__pgprot(pgprot_val(pgprot_noncached(vma->vm_page_prot)) |(L_PTE_WRITE|L_PTE_DIRTY)))))

其中vma為結合vm_area_struct,在中定義。

應用中需要注意以下字段:unsigned long vm_flags應該使用標志VM_RESERVED,以避免內存管理系統將該VMA交換出去。因為要對DSP寫入數據,所以必須使用標志VM_WRITE說明對這一段VMA是允許寫入的。pgport_t vm_page_prot指明了對VMA的保護權限。由于利用CS3對DSP的HPI接口進行控制,所以應用pgprot_noncached禁止高速緩沖。

    通過mmap的構建就能夠將內核空間的數據映射到用戶空間去,也就是說可以在用戶空間內直接對地址為0x4000_0000的內存空間進行操作,而該段空間正是DSP的HPI接口所對應的地址。

在實際應用中,應對CS3的低電平脈寬加以控制,方法是在初始化模塊時對ARM的控制寄存器CSR[3]進行調節。該寄存器的D0-D6確定了ARM外部總線的時鐘延時周期,D7為等待周期的使能,D12-D14為數據寬度。具體定義如下:AT91_SYS->EBI_SMC2_CSR[3]=0x00003083,即使用16bit數據寬度,等待周期為3個。當ARM主頻為180MHz時,CS3低電平脈寬約為150ns。

4.3 驅動程序的系統調用接口

為對處于總線地址0x4000_0000的DSP板進行操作,首先應用open打開設備,該設備可以通過mknod建立(本例建立的是/dev/hpi)。然后mmap完成映射。

Int dev_hpi_open(str_HPI *ss)

{size_t length=1024;

int i;

if((*ss).hpi_number==0)

{

(*ss).hpi_fd=open("/dev/hpi",O_RDWR);

}

if((*ss).hpi_fd==-1)return -1;

(*ss).hpi_mmap_start =mmap(NULL,length,PROT_READ|PROT_WRITE,MAP_SHARED,((*ss).hpi_fd),0); //獲得映射區內存的起始地址

return 0;

} //dev_hpi_open

mmap的作用是將文件內容映射到內存中。函數的原形及各參數定義如下:

*mmap(void *start,size_length,int prot,int flags,intfd,off_t offset)

start指向欲對應的內存地址,size-length的含義是要映射的量;prot代表映射區域的保護方式;flag會影響映射區域的各種特性;fd為文件描述符;offtoffset代表文件的偏移量,通常設置為零。

示例程序中的結構體變量ss用來總知各種變量。通過mmap可以獲得映射后的內存地址,用(*ss).hpi_mmap_start表示。

一旦獲得了這個起始地址,就能對0x4000_0000起始的總線地址進行操作,因為映射已經完成,對(*ss).hpi_mmap_start的操作就是對0x4000_0000起始的總線地址進行操作,而DSP板HPI接口的控制線正是在這個位置。這樣就實現了物理地址和用戶空間的轉換。

4.4 用戶程序接口部分

下面以HPI接口讀寫中最復雜的自增讀方式用戶程序為例說明用戶接口程序的設計過程。要完成自增讀的操作,對于HPI一側,假設采用軟件握手的方式。要完成的工作如下:

首先讀HPIC以查詢其中的HRDY位是否為1,如果為1則表示DSP中數據已經備妥。然后寫HPIA以告訴DSP從什么位置開始進行自增讀。接著將HPIC的FETCH位置1以刷新寫入。再讀HPIC以查詢其中的HRDY位是否為1,如果為1則表示DSP中數據已經備妥。最后從HPID中讀取數據。

對于ARM一側,要對HPIC、HPID、HPIA寄存器進行讀寫必須滿足HPI接口的定義,具體如下(以自增讀為例):

讀前半字節(高16位)時,HCNTL0=0、HCNTL1=1、HR/W=1、HHWRL=0。

讀后半字節(低16位)時,HCNTL0=0、HCNTL1=1、HR/W=1、HHWRL=0。

從硬件的原理圖可知,這些HPI的控制口線分別與ARM的一部分地址總線連接。具體為HCNTL0----A2、HCNTL1----A3、HR/W------A4、HHWIL-----A5。

宏定義過程如下:

#define HPIC_R_F(HPI_VA_BASE)*((unsigned long*)((HPI_VA_BASE)+0x00000004+DSPNUMBER))

//讀HPIC第一半字

#define HPIC_R_S(HPI_VA_BASE)*((unsigned long*)((HPI_VA_BASE)+0x0000000C+DSPNUMBER))

//讀HPIC第二半字

等等,只要改變在HPI_BA_BASE基礎上增加的數字就可以獲取對控制口線的操作。

    在這里HPI_VA_BASE將由映射得到的用戶空間虛擬地址代替,所以如果“自增模式讀HPID第一半字”那么就可求滿足前文提到的HCNTL0=0、HCNTL1=1、HR/W=1、HHWRL=0,也就是要滿足地址位A2=0、A3=1、A4=1、A5=0,所以只要在HPI_VA_BASE的基礎上加0x0000_0006就可以了。要注意的是ARM處理器的地址是32位。所以是加上0x0000_0006而不是0x0000_0018。

另外,還有二點需要說明:

通過改變宏定義中的DSPNUMBER常量可以控制地址總線A6、A7、A8。通過這3個總線組合并通過簡單地址譯碼電路就可以完成對多塊DSP板的讀寫。在硬件電路中可以定義為0。

A4(HR/W)同時還用做SN74LVTH16245的方向控制。讀的時候A4=1,此時SN74LVTH16245的數據從A-->B;反之,則從B-->A。

下面給出程序中的自增讀和注釋部分:

int dev_hpi_auto1(str_HPI *ss)

{volatile unsigned long dsp_addr_hign_read_auto;//定義各種中間變量

volatile unsigned long dsp_addr_low_read_auto;

volatile unsigned long dsp_data_hign_read_auto;

volatile unsigned long dsp_data_low_read_auto;

volatile unsigned long dsp_add_temp;

int i;

volatile unsigned long data_length;

//---read hpic----the host polls the HPIC for HRDY=1

volatile unsigned long polltest;

polltest=HPIC_R_F((*ss).hpi_mmap_start);

while((polltest&0x00000008)!=0x00000008)

{polltest=HPIC_R_F((*ss).hpi_mmap_start);

}

dsp_add_temp=((*ss).hpi_dsp_add);//從應用程序傳過來的參數,指明希望從DSP的哪一個地址讀起

dsp_addr_low_read_auto=((dsp_add_temp)&0x0000ffff)+((dsp_add_temp)<<16); //完成數據轉換

dsp_addr_hign_read_auto=((dsp_add_temp)&0xffff0000)+((dsp_add_temp)>>16);

//---write dsp s addr to HPIA

HPIA_W_F ((*ss).hpi_mmap_start)=(dsp_addr_hign_read_auto);

HPIA_W_S((*ss).hpi_mmap_start)=(dsp_addr_low_read_auto);

//--------write hpic----------to FETCH bit

HPIC_W_F((*ss).hpi_mmap_start)=0xfff8fff8;

HPIC_W_S((*ss).hpi_mmap_start)=0xfff8fff8;

//---read dsp s data from HPID,autoincrement mode

data_length=(*ss).hpi_dsp_data_length;//從應用程序傳過來的參數,指明期望讀取多少個字

for(i=0;i<=data_length;i++)

{//---read hpic----the host polls the HPIC for HRDY=1 again

polltest=HPIC_R_F((*ss).hpi_mmap_start);

while((polltest&0x00000008)!=0x00000008)

{polltest=HPIC_R_F((*ss).hpi_mmap_start);

}

dsp_data_hign_read_auto =HPID_R_F_A((*ss).hpi_mmap_start); //讀第一個半字。

dsp_data_low_read_auto =HPID_R_S_A((*ss).hpi_mmap_start); //第二個個半字

{(*ss).buffer [(i)]=(dsp_data_hign_read_auto&oxffff0000)+(dsp_data_low_read_auto&0x0000ffff);

//數據拼接,放入結構體,回傳給調用的用戶程序。

}

}

} //dev_hpi_read_auto(str_HPI *ss)

5 結束語

本文通過一個實例說明了如何實現在Linux操作系統下ARM體系結構的處理器與DSP的數據通信。給出了接口部分的硬件處理和部分驅動程序。

在某款智能儀表的研發過程中,給出一個簡單的地址譯碼電路對二塊(或更多)DSP板進行交替讀寫,并以自增讀方式進行操作,當ARM主頻為180MHz,DSP主頻為125MHz時,對DSP數據的讀寫速度可以達到每毫秒1k的32位字。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          中文久久乱码一区二区| 欧美成人午夜剧场免费观看| 国产精品视屏| 国产日韩欧美综合一区| 欧美日韩在线大尺度| 国内精品亚洲| 亚洲影院一区| 久久精品成人欧美大片古装| 一区二区动漫| 国产日韩欧美综合| 午夜亚洲性色福利视频| 久久久久久久一区二区三区| 欧美午夜www高清视频| 性欧美暴力猛交另类hd| 欧美日韩国产天堂| 午夜视频一区在线观看| 欧美另类69精品久久久久9999| 亚洲影院免费| 亚洲国产岛国毛片在线| 亚洲欧洲日本一区二区三区| 国产在线精品一区二区夜色| 尤物视频一区二区| 欧美大片在线观看一区| 亚洲欧美一区在线| 亚洲欧美日韩综合国产aⅴ| 欧美乱在线观看| 久久精品一区二区三区不卡| 久久蜜桃香蕉精品一区二区三区| 国产一区日韩欧美| 国产亚洲高清视频| 国产精品久久久久久久久久免费看| 欧美国产视频一区二区| 欧美亚洲在线播放| 香蕉久久夜色精品国产使用方法| 在线成人激情| 性欧美xxxx视频在线观看| 欧美日韩精品综合| 久久成人一区二区| 浪潮色综合久久天堂| 狠狠久久五月精品中文字幕| 欧美成人免费在线视频| 国产一级揄自揄精品视频| 国产视频一区三区| 久久精品国产99国产精品澳门| 国产亚洲精品资源在线26u| 中国日韩欧美久久久久久久久| 国产精品―色哟哟| 欧美在线www| 久久久久久伊人| 亚洲国产一区二区在线| 新狼窝色av性久久久久久| 国产日本欧美一区二区三区| 激情文学一区| 欧美sm重口味系列视频在线观看| 久久久无码精品亚洲日韩按摩| 欧美视频国产精品| 欧美日韩天堂| 欧美二区在线播放| 欧美亚洲在线播放| 国产综合久久久久影院| 欧美精品啪啪| 欧美成人精品h版在线观看| 欧美视频一区在线观看| 亚洲精选视频在线| 免费观看欧美在线视频的网站| 国产亚洲精品久久久久婷婷瑜伽| 韩国视频理论视频久久| 欧美日韩一二三区| 欧美成人官网二区| 久久夜色精品亚洲噜噜国产mv| 一本色道久久综合亚洲精品按摩| 欧美理论电影在线播放| 久久久免费精品视频| 另类春色校园亚洲| 夜久久久久久| 欧美午夜免费| 欧美日韩麻豆| 久久精品麻豆| 欧美视频中文一区二区三区在线观看| 久久久99久久精品女同性| 亚洲国产精品专区久久| 一区二区三区产品免费精品久久75| 国产精品一区二区女厕厕| 亚洲激情精品| 韩国精品久久久999| 欧美激情一区三区| 久久久无码精品亚洲日韩按摩| 国产欧美va欧美不卡在线| 亚洲一二区在线| 亚洲影视九九影院在线观看| 在线亚洲一区二区| 久久中文字幕一区二区三区| 欧美精品免费看| 欧美激情小视频| 国产精品av一区二区| 亚洲一区二区三区欧美| 欧美精品一区二区三区久久久竹菊| 在线免费高清一区二区三区| 午夜久久久久久| 亚洲精品久久久久中文字幕欢迎你| 欧美亚洲午夜视频在线观看| 农村妇女精品| 国产精品久99| 国产精品成人一区二区网站软件| 国产精品高潮呻吟视频| 国产精品日韩精品| 亚洲精品视频中文字幕| 国产精品久久二区二区| 国产精品网红福利| 国产精品香蕉在线观看| 欧美一级在线视频| 国产精品免费网站| 久久国产精品一区二区三区| 亚洲一区在线免费观看| 午夜精品www| 欧美另类专区| 亚洲精品视频在线播放| 亚洲深爱激情| 欧美国产综合视频| 亚洲国产99精品国自产| 亚洲国产成人精品女人久久久| 日韩一级视频免费观看在线| 亚洲高清成人| 日韩视频久久| 玖玖在线精品| 国产精品久久久久秋霞鲁丝| 久久国产精品99久久久久久老狼| 在线观看视频免费一区二区三区| 欧美日韩在线播放一区二区| 免费观看亚洲视频大全| 国内久久精品视频| 久久综合伊人77777| 国产在线精品一区二区夜色| 亚洲精品婷婷| 葵司免费一区二区三区四区五区| 日韩亚洲欧美高清| 久久久久久久999| 国内精品久久久久影院优| 欧美日韩日本视频| 国产精品揄拍500视频| 国产精品一二一区| 久久国产精品久久久久久久久久| 欧美日韩在线第一页| 亚洲一品av免费观看| 在线综合亚洲欧美在线视频| 欧美成人午夜77777| 亚洲图片激情小说| 一区二区冒白浆视频| 欧美日精品一区视频| 亚洲国产精品va在线观看黑人| 国产精品美女诱惑| 免费观看日韩| 亚洲精一区二区三区| 91久久久精品| 国产一在线精品一区在线观看| 欧美成人午夜激情| 国产精品久久久久久久久| 亚洲一区久久久| 欧美日韩亚洲高清一区二区| 国产欧美成人| 激情六月婷婷综合| 欧美精品1区2区3区| 国产欧美日韩免费| 欧美精选午夜久久久乱码6080| 欧美连裤袜在线视频| 欧美专区第一页| 两个人的视频www国产精品| 亚洲欧美日韩国产一区二区三区| 国产亚洲一本大道中文在线| 国产精品亚洲аv天堂网| 亚洲一区久久| 夜夜嗨av一区二区三区免费区| 亚洲电影有码| 蜜桃精品久久久久久久免费影院| 一本综合精品| 欧美精品在线免费观看| 国产伦精品一区二区三区免费| 国内精品伊人久久久久av一坑| 国产精品久久久久久福利一牛影视| 国产精品免费看片| 国产一区二区毛片| 欧美日韩在线看| 亚洲欧美视频在线观看视频| 久久久综合激的五月天| 激情五月综合色婷婷一区二区| 亚洲精品小视频| 欧美国产亚洲另类动漫| 一本色道久久88精品综合| 亚洲国产成人精品女人久久久| 91久久精品一区二区三区| 亚洲国产美女久久久久| 欧美日韩精品伦理作品在线免费观看| 国产日韩专区在线| 国产精品v片在线观看不卡| 久久黄色级2电影| 欧美91精品| 久久亚洲精品网站| 亚洲欧美激情四射在线日| 欧美四级剧情无删版影片| 欧美国产日韩a欧美在线观看| 亚洲精品之草原avav久久| 欧美日韩福利| 欧美一区二区三区久久精品茉莉花| 国产精品综合av一区二区国产馆| 午夜亚洲性色视频| 伊人伊人伊人久久| 国产精品无码专区在线观看| 欧美午夜精品一区| 欧美在线免费视频| av成人福利| 久久精品二区三区| 国产精品美女黄网| 欧美日韩亚洲免费| 一区二区免费在线播放| 欧美xxx在线观看| 午夜精品区一区二区三| 欧美日韩中文字幕| 亚洲午夜激情免费视频| 欧美专区亚洲专区| 亚洲午夜三级在线| 国语自产精品视频在线看抢先版结局| 欧美精品一区三区| 性欧美暴力猛交另类hd| 久久久久国产精品麻豆ai换脸| 红杏aⅴ成人免费视频| 欧美日韩另类丝袜其他| 欧美成在线观看| 国产一区二区丝袜高跟鞋图片| 久久中文久久字幕| 亚洲三级电影全部在线观看高清| 在线亚洲高清视频| 免费观看30秒视频久久| 国语自产精品视频在线看抢先版结局| 国产精品视频九色porn| 日韩一级免费| 亚洲一级黄色片| 亚洲国产精品日韩| 老色鬼久久亚洲一区二区| 国产一区二区成人久久免费影院| 中文久久乱码一区二区| 欧美视频在线观看一区二区| 国产日韩欧美自拍| 欧美福利电影网| 欧美日韩国产系列| 亚洲视频一二三| 亚洲国产精品美女| 久久麻豆一区二区| 99pao成人国产永久免费视频| 国产精品黄色在线观看| 香蕉久久夜色精品| 日韩手机在线导航| 激情伊人五月天久久综合| 欧美日韩国产123| 国内精品久久久久久| 国产精品稀缺呦系列在线| 欧美日韩hd| 午夜精品久久久久久久蜜桃app| 国产精品综合网站| 亚洲一二三区视频在线观看| 午夜精品久久久久99热蜜桃导演| a91a精品视频在线观看| 一区二区在线看| 欧美α欧美αv大片| 国内精品久久久久久久果冻传媒| 欧美日韩免费观看一区二区三区| 国内精品一区二区| 欧美日韩情趣电影| 一区二区三区黄色| 国产精品视频yy9299一区| 亚洲国产精品123| 欧美成人免费全部| 久久精品99无色码中文字幕| 香港久久久电影| 亚洲欧美国产另类| 国产精品ⅴa在线观看h| 久久亚洲午夜电影| 一区二区三区欧美视频| 国产欧美日韩一区二区三区| 欧美一区二区三区日韩| 欧美日韩视频专区在线播放| 欧美黑人在线观看| 欧美91福利在线观看| 亚洲图片欧美午夜| 在线综合+亚洲+欧美中文字幕| 久久综合国产精品台湾中文娱乐网| 国产一区二区中文字幕免费看| 国产一在线精品一区在线观看| 国产午夜久久久久| 国产亚洲福利| 在线亚洲精品福利网址导航| 亚洲视频一区二区在线观看| 久久精品天堂| 欧美一区二区三区日韩视频| 国产一区二区在线观看免费播放| 欧美激情中文字幕一区二区| 国产揄拍国内精品对白| 欧美一级视频免费在线观看| 亚洲欧洲在线免费| 亚洲人成7777| 99视频精品全部免费在线| 欧美激情综合色综合啪啪| 亚洲美女黄色| 99视频精品在线| 欧美国产国产综合| 久久久久成人精品免费播放动漫| 亚洲国产一区在线| 欧美va日韩va| 欧美+亚洲+精品+三区| 欧美日韩国产三区| 麻豆国产va免费精品高清在线| 欧美日产国产成人免费图片| 欧美日韩成人一区二区| 亚洲自拍偷拍视频| 一本色道久久99精品综合| 欧美一区视频| 欧美另类久久久品| 亚洲毛片在线观看| 亚洲伊人第一页| 欧美视频久久| 国产日韩欧美在线一区| 欧美午夜电影一区| 中文国产亚洲喷潮| 欧美日韩在线高清| 国产伦精品一区二区三区四区免费| 国产精品视频内| 久久夜色精品国产欧美乱| 欧美日韩国产色站一区二区三区| 亚洲最快最全在线视频|