• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    超聲相控陣系統(tǒng)中PCI驅(qū)動開發(fā)研究

    2015-09-08 10:13:47施成龍師芳芳孔超張碧星
    聲學(xué)技術(shù) 2015年3期
    關(guān)鍵詞:驅(qū)動程序相控陣中斷

    施成龍,師芳芳,孔超,張碧星

    ?

    超聲相控陣系統(tǒng)中PCI驅(qū)動開發(fā)研究

    施成龍,師芳芳,孔超,張碧星

    (中國科學(xué)院聲學(xué)研究所聲場聲信息國家重點實驗室,北京100190)

    超聲相控陣系統(tǒng)的數(shù)據(jù)傳輸速率很大程度上決定著其檢測速度,因而在PCI總線的超聲相控陣系統(tǒng)中,PCI驅(qū)動執(zhí)行效率至關(guān)重要。詳細闡述了利用WinDriver、DriverStudio和WDK(Windows Driver Kit)三種工具開發(fā)PCI驅(qū)動程序的方法及實現(xiàn)。在驅(qū)動效率和兼容性等方面上比較這三種不同的驅(qū)動開發(fā)方案。分析及測試結(jié)果表明,使用DriverStudio開發(fā)的驅(qū)動能夠高速穩(wěn)定地工作,滿足超聲相控陣系統(tǒng)對于數(shù)據(jù)傳輸速率和穩(wěn)定性的要求。由于不同的應(yīng)用有著不同的開發(fā)需求,提出根據(jù)特定的開發(fā)需求選擇不同的開發(fā)方案,從而得到需要的驅(qū)動及其應(yīng)用程序。

    相控陣;PCI總線;驅(qū)動程序

    0 引言

    超聲相控陣檢測技術(shù)是近年發(fā)展起來的一種超聲無損檢測技術(shù),這種技術(shù)能方便控制聲束焦點和方向,提高檢測信號的信噪比,具有靈活、快速、可靠、準確等特點。超聲相控陣技術(shù)最主要的特點是采用超聲陣列發(fā)射和陣列接收的方式,通過控制陣列上各個陣元激勵信號的延時和幅度,實現(xiàn)動態(tài)聚焦和偏轉(zhuǎn)。超聲相控陣技術(shù)的出現(xiàn)在提高了在線檢測精度的同時大大提高了檢測速度[1]。

    由于超聲探傷要求的不斷提高,超聲相控陣檢測系統(tǒng)的獨立通道數(shù)隨之增加,國外的超聲相控陣檢測系統(tǒng)Dynary獨立通道數(shù)達到了256個,TOPAZ的獨立通道數(shù)也達到了256個。獨立通道數(shù)的增加導(dǎo)致數(shù)據(jù)量的激增,由此產(chǎn)生了高速實時數(shù)據(jù)傳輸?shù)男枨蟆T诒姸嗟母咚賹崟r數(shù)據(jù)傳輸解決方案中, USB2.0傳輸速率可達60 MB/s,PCI總線數(shù)據(jù)傳輸速率達133MB/s[2],PCI-Express總線數(shù)據(jù)傳輸速率達16GB/s。USB2.0的CPU占用率較高,不適用于超聲相控陣系統(tǒng),PCI及PCI-Express均滿足超聲相控陣系統(tǒng)數(shù)據(jù)傳輸速率的要求,但PCI-Express的通用性沒有PCI好,而PCI總線接口則是目前計算機中使用最為廣泛的接口[3-5],因此本文選擇PCI總線作為開發(fā)超聲相控陣系統(tǒng)的數(shù)據(jù)總線。

    為了能夠正常使用PCI總線進行高速數(shù)據(jù)傳輸,必須開發(fā)相應(yīng)平臺下的設(shè)備驅(qū)動程序。在Windows平臺下,存在著WDM(Windows Driver Model)和WDF(Windows Driver Foundation)這兩種模型的驅(qū)動程序,后者以前者為基礎(chǔ)進行了建模和封裝,降低了開發(fā)難度。

    本文根據(jù)筆者編寫PCI9656驅(qū)動的實際經(jīng)驗,闡述了開發(fā)PCI設(shè)備WDM和WDF驅(qū)動程序的方法流程和實現(xiàn),并通過對于不同驅(qū)動的性能進行比較,得到在不同開發(fā)條件下的最優(yōu)方案。

    1 超聲相控陣系統(tǒng)

    本文所涉及開發(fā)的超聲相控陣系統(tǒng)結(jié)構(gòu)如圖1所示:

    主機板通過PCI總線從多個數(shù)據(jù)采集板獲得超聲回波數(shù)據(jù),對得到的數(shù)據(jù)進行處理并進行成像顯示和分析,如圖2所示。

    在這樣的結(jié)構(gòu)中,若主機板沒有及時通過PCI接口芯片將數(shù)據(jù)采集板中的回波數(shù)據(jù)取出,那么數(shù)據(jù)會由于不斷堆疊而造成溢出,從而導(dǎo)致主機板得到的傳輸數(shù)據(jù)錯位、解析錯誤等一系列問題,因此系統(tǒng)中設(shè)備PCI驅(qū)動的執(zhí)行效率至關(guān)重要。

    2 WDM驅(qū)動開發(fā)

    2.1 WDM驅(qū)動模型介紹

    WDM(Windows Driver Model)是微軟公司開發(fā)出的一種驅(qū)動程序開發(fā)模型,屬于操作系統(tǒng)的內(nèi)核模式。WDM驅(qū)動基于分層的模式實現(xiàn),不同層上的驅(qū)動程序有著不同的優(yōu)先級[6]。其中與系統(tǒng)連接最緊密的是底層總線,總線驅(qū)動也是最為復(fù)雜的部分。目前總線驅(qū)動通常由操作系統(tǒng)提供,驅(qū)動開發(fā)者只需開發(fā)設(shè)備驅(qū)動以及可能需要的過濾驅(qū)動[7]。圖3所示為WDM驅(qū)動模型層次結(jié)構(gòu)圖。

    WDM驅(qū)動程序開發(fā)工具主要有三種[8]:DDK(Device Development Kit)、WinDriver與DriverStudio。DDK是微軟提供的一套用于開發(fā)Windows下設(shè)備驅(qū)動程序的工具包,雖然用其開發(fā)的程序執(zhí)行效率高,但由于采用DDK開發(fā)驅(qū)動程序需要閱讀大量的DDK文檔,深入了解操作系統(tǒng)的內(nèi)核工作方式和驅(qū)動程序的工作細節(jié),開發(fā)難度大,開發(fā)周期長;WinDriver是Jungo公司出版的驅(qū)動程序開發(fā)組件,采用其開發(fā)驅(qū)動難度較低,花費的時間很少,它不需要開發(fā)者了解操作系統(tǒng)的內(nèi)核和驅(qū)動程序的內(nèi)部機制,事實上開發(fā)者只需定制和調(diào)用它提供的通用驅(qū)動而已,因此程序的執(zhí)行效率不高;DriverStudio是一套NuMega公司為簡化Windows設(shè)備驅(qū)動程序和應(yīng)用程序的開發(fā)而提供的集編寫、編譯和調(diào)試為一體的軟件工具包,它的函數(shù)庫封裝了針對驅(qū)動程序的各種通用操作,大大減少了驅(qū)動程序的代碼長度,而由于它開發(fā)的驅(qū)動程序本質(zhì)上是在調(diào)用DDK庫函數(shù),所以執(zhí)行效率與DDK相當。

    綜上所述,由于DDK開發(fā)WDM驅(qū)動無論在開發(fā)時間和代碼效率上都沒有明顯優(yōu)勢,因此通常采用其他兩種開發(fā)工具來開發(fā)WDM驅(qū)動。

    2.2 WinDriver開發(fā)工具

    WinDriver可以方便Windows程序員快速開發(fā)出PCI/ISA設(shè)備的Windows驅(qū)動程序。它的體系架構(gòu)分為兩種模式:用戶模式和核心模式。對硬件進行操作時,開發(fā)者調(diào)用用戶模式的庫函數(shù),用戶模式的庫函數(shù)再調(diào)用核心模式完成對硬件的最終訪問[9]。其與硬件設(shè)備、用戶驅(qū)動程序、用戶應(yīng)用程序之間的關(guān)系即體系結(jié)構(gòu)如圖4所示。

    使用WinDriver開發(fā)驅(qū)動大致為三個步驟:

    (1) 選擇硬件

    從開始菜單里,選擇WinDriver|DriverWizard,運行DriverWizard程序。DriverWizard將會顯示機器上的所有即插即用設(shè)備,在列表中選擇需要開發(fā)驅(qū)動的硬件設(shè)備。

    (2) 產(chǎn)生驅(qū)動程序代碼

    使用DriverWizard產(chǎn)生驅(qū)動程序代碼,程序操作硬件的內(nèi)核級API函數(shù),對設(shè)備進行讀寫操作。

    (3) 根據(jù)實際需求修改驅(qū)動程序代碼

    本文需要對多塊超聲回波信號數(shù)據(jù)采集板進行寄存器讀寫和DMA讀寫,因此需要開發(fā)的應(yīng)用程序框架如圖5所示。

    其中各個步驟所涉及到的WinDriver API函數(shù)為:

    (a) 初始化設(shè)備

    首先使用PLX_LibInit函數(shù)初始化WinDriver的庫,然后使用WDC_PciScanDevices函數(shù)掃描硬件并獲取驅(qū)動句柄。

    (b) 打開設(shè)備

    使用PLX_DeviceOpenBySlot函數(shù)根據(jù)設(shè)備的ID號尋找并打開設(shè)備。

    (c) 訪問設(shè)備資源

    使用WDC_WriteAddr32函數(shù)寫寄存器,使用WDC_ReadAddr32讀寄存器。

    通過PLX_DMAOpen、PLX_DMAStart、PLX_DMAPollCompletion和PLX_DMAClose這四個函數(shù)來進行DMA讀寫。

    (d) 關(guān)閉設(shè)備

    使用PLX_DeviceClose函數(shù)關(guān)閉打開的設(shè)備。

    (e) 關(guān)閉WinDriver處理接口

    使用PLX_LibUninit函數(shù)卸載庫并關(guān)閉WinDriver處理接口。

    2.3 DriverStudio開發(fā)工具

    DriverStudio以面向?qū)ο蟮姆绞剑瑢Ⅱ?qū)動程序編寫所需的與內(nèi)核訪問及對硬件的訪問封裝成類,加上設(shè)計的驅(qū)動程序代碼生成向?qū)?,大大簡化了?qū)動程序開發(fā)的難度,減少了工作量。同時,DriverStudio被嵌入到VC中,方便了開發(fā)[10]。

    使用DriverStudio開發(fā)PCI驅(qū)動主要有三個步驟:

    (1) 利用DriverWizard生成PCI設(shè)備驅(qū)動程序框架

    DriverWizard是DriverStudio創(chuàng)建框架程序的工具,它能夠生成驅(qū)動程序的基本框架和用戶自定義信息,雖然沒有實現(xiàn)設(shè)備的具體功能,但對于功能的實現(xiàn)設(shè)置了框架,方便用戶添加功能代碼。創(chuàng)建程序框架共有11個步驟,一般采用默認設(shè)置,關(guān)鍵步驟如下:

    (a) 第4步,選擇設(shè)備的總線類型并填寫硬件類型。

    本文開發(fā)的是PCI9656的驅(qū)動,因此這里選擇PCI總線。PCI Vendor ID是廠商標識符,為10B5;PCI Device ID是設(shè)備標識符,為9656;PCI Subsystem ID為子系統(tǒng)ID號,為965610B5;PCI Revision ID是修訂號,為BA。

    (b) 第7步,選擇IRP串行處理類型。

    當多個應(yīng)用程序同時對PCI設(shè)備進行I/O操作時,需要對這些請求進行串行化處理,通常選擇系統(tǒng)處理。

    (c) 第9步,選擇設(shè)備文件類名和接口。

    在Resources項中,選擇需要被使用的硬件資源如:存儲空間,I/O空間,中斷和DMA等。在本例中需要用到的資源有:基地址為0的存儲空間、基地址為2的存儲空間、中斷和DMA。

    在Interface中,可以選擇應(yīng)用程序打開設(shè)備的方式:用GUID接口或符號鏈接名。GUID是一種說明軟件訪問硬件過程的命名方案,一個128位GUID唯一標識一個設(shè)備接口。若使用GUID接口方式的話必須每一個數(shù)字板都對應(yīng)一個唯一GUID標識的驅(qū)動,這代表了驅(qū)動無法復(fù)用。而符號鏈接名(symbolic link name)的主要用途是把DOS的名稱連接到設(shè)備上。當多塊相同配置的PCI板卡插入PCI插槽時,可以使用同一個PCI驅(qū)動,因此選擇符號鏈接名的方式。Interface配置如圖6所示。

    (d) 第10步,定義驅(qū)動與應(yīng)用程序之間通信的DeviceIoControl控制代碼。

    需要使用驅(qū)動來完成對于硬件設(shè)備寄存器與DMA讀寫的操作,而DMA讀寫只需調(diào)用Windows API函數(shù)Readfile和Writefile即可,因此定義的功能為:讀寫寄存器、讀寫DMA地址。配置如圖7所示。

    最后一步選擇生成與驅(qū)動通信的應(yīng)用程序,單擊Finish完成驅(qū)動程序框架。

    (2) 在已完成的驅(qū)動框架中添加功能代碼

    (a) 內(nèi)存的訪問

    KMemoryRange類封裝了對于內(nèi)存的操作,實現(xiàn)對內(nèi)存映射芯片的訪問。在生成的驅(qū)動框架中已經(jīng)完成對于資源的定義、初始化及卸載,只需要在DeviceIoControl控制代碼函數(shù)中加入對于資源的讀寫即可。

    資源定義代碼如下:

    KMemoryRange m_MemoryRange0;

    KMemoryRange m_MemoryRange2;

    在使用資源前,需要對資源進行初始化,將WDM中得到的PCI總線配置機構(gòu)分配的物理內(nèi)存轉(zhuǎn)換成系統(tǒng)可以訪問的非分頁內(nèi)存,驅(qū)動框架中的OnStartDevice函數(shù)已經(jīng)提供了該操作:

    status = m_IoPortRange0.Initialize(

    pResListTranslated,

    pResListRaw,

    PciConfig.BaseAddressIndexToOrdinal(0)

    );

    初始化后,就可以通過類中自帶的硬件訪問函數(shù)來設(shè)置內(nèi)存:

    m_MemoryRange0.outd(INTCSR,0);

    m_MemoryRange2.ind(Offset,pOutBuffer,count);

    在驅(qū)動停止運行之前,需要對于資源進行卸載操作,驅(qū)動框架已經(jīng)在Invalidate函數(shù)中提供:

    m_MemoryRange0.Invalidate();

    m_MemoryRange2.Invalidate();

    (b) 中斷處理

    KInterrupt類實現(xiàn)硬件中斷處理。其成員函數(shù)包括中斷的初始化,及將一個中斷服務(wù)例程連接到一個中斷和解除其連接的操作等。

    中斷服務(wù)例程不是KInterrupt類的成員函數(shù),這樣做的目的是減少中斷延遲時間。

    中斷處理需要中斷服務(wù)例程和延遲過程調(diào)用例程,需要聲明,在驅(qū)動程序框架中已經(jīng)提供:

    MEMBER_ISR(PCIRegDevice, Isr_Irq);

    MEMBER_DPC(PCIRegDevice, DpcFor_Irq);

    BOOLEAN Isr_Irq(void);

    VOID DpcFor_Irq(PVOID Arg1, PVOID Arg2);

    KInterrupt m_Irq;

    KDeferredCall m_DpcFor_Irq;

    驅(qū)動程序框架在OnStartDevice函數(shù)中初始化中斷變量并調(diào)用宏LinkTo連接中斷例程:

    status = m_Irq.InitializeAndConnect(

    pResListTranslated,

    LinkTo(Isr_Irq),

    this

    );

    m_DpcFor_Irq.Setup(LinkTo(DpcFor_Irq), this);

    在中斷服務(wù)例程中,首先判斷該中斷是否為需要處理的中斷,若不是,返回False;若是,進行必要的處理,請求一個DPC,然后返回True。這里需要處理的是DMA中斷,因此Isr_Irq函數(shù)判斷的是中斷寄存器(PCI9656中為0x68[11])的某個特定位是否為1。

    在驅(qū)動程序停止前,需要調(diào)用KInterrupt成員函數(shù)來斷開中斷并釋放資源:

    m_Irq.Disconnect();

    Invalidate();

    (c) DMA傳輸

    DriverWorks提供了三個類:KDmaAdapter 、KDmaTransfer和KCommonDmaBuffer類,用于實現(xiàn)DMA操作。KDmaAdapter類用于建立一個DMA適配器,它說明DMA通道的特性。KDmaTransfer類用于DMA傳輸控制。KCommonDmaBuffer類用于申請系統(tǒng)提供的公用緩沖區(qū)。具體參數(shù)的定義與初始化在驅(qū)動框架中提供。

    DMA傳輸編程通常涉及SerialRead/Serial Write、OnDmaReady、StartDMA、Isr_Irq和DqcFor_Irq例程。其中DMA準備就緒回調(diào)例程,至少會調(diào)用兩次。

    第一步在SerialRead/SerialWrite中啟動DMA讀寫傳輸:

    status = m_CurrentTransfer->Initiate(

    this,

    &m_Dma,

    I.Mdl(),

    (I.MajorFunction() == IRP_MJ_READ) ? FromDeviceToMemory : FromMemoryToDevice,

    LinkTo(OnDmaReady),

    &m_Buffer

    ); //此操作將使系統(tǒng)調(diào)用OnDmaReady例程

    第二步,獲取要傳輸?shù)奈锢韮?nèi)存的地址和字節(jié)數(shù),調(diào)用StartDMA例程:

    StartDMA(ptd->td_PhysAddr.LowPart,ptd->td_Length, readTag);

    第三步,DMA傳輸結(jié)束后,產(chǎn)生中斷,Isr_Irq例程處理并清除中斷后,請求DqcFor_Irq例程:

    m_MemoryRange0.outd(DMAMODE0,0x20800);//先禁止中斷

    m_MemoryRange0.outb(DMACSR0,0x10);

    //再清除中斷

    if (!m_DpcFor_Irq.Request(NULL, NULL))

    {

    }

    第四步,DMA結(jié)束,完成IRP。

    如此四步,完成DMA傳輸。

    (3) 調(diào)用驅(qū)動程序完成所需功能

    本文需要對于多塊超聲回波信號的數(shù)據(jù)采集板進行寄存器讀寫和DMA讀寫,而由于并不需要調(diào)用庫函數(shù),因此需要開發(fā)的應(yīng)用程序框架如圖8所示。

    (a) 打開設(shè)備

    由于驅(qū)動框架生成過程中選擇的是通過符號鏈接名的方法打開設(shè)備,因此當所有數(shù)字板都裝上生成的驅(qū)動后,板卡命名規(guī)律是“PCI9656Device+數(shù)字位”,其數(shù)字位自動+1,如第1塊板卡的符號鏈接名是“PCI9656Device0”,第2塊板卡就是“PCI9656Device1”,依此類推,第N塊板卡是“PCI9656DeviceN-1”。通過CreateFile函數(shù)得到驅(qū)動句柄:

    char *sLinkName[N] = {"\\.\PCIRegDevice0", "\\.\PCIRegDevice1", ..., "\\.\PCIRegDeviceN-1", "\\.\PCIRegDeviceN"};

    CreateFile(sLinkName[itag],

    GENERIC_READ | GENERIC_WRITE,

    FILE_SHARE_READ,

    NULL,

    OPEN_EXISTING, 0, NULL);

    通過修改itag參數(shù)來打開不同的板卡,在此基礎(chǔ)上可以通過枚舉識別插入板卡數(shù)目。

    (b) 訪問設(shè)備資源

    通過DeviceIoControl函數(shù)與WDM驅(qū)動進行通信,對其進行設(shè)置寄存器和DMA地址的操作。

    使用ReadFile和WriteFile函數(shù)進行讀寫DMA的操作,由于ReadFile/WriteFile有固定的輸入?yún)?shù),因此DMA地址如果不固定的話,需要由DeviceIoControl函數(shù)修改。

    (c) 關(guān)閉設(shè)備

    通過CloseHandle函數(shù)關(guān)閉設(shè)備。

    3 WDF驅(qū)動開發(fā)

    3.1 WDF驅(qū)動模型介紹

    WDF(Windows Driver Foundation)是微軟在WDM基礎(chǔ)上改進而來的最新一代驅(qū)動程序模型。它采用基于對象的技術(shù),精心設(shè)計了對象模型并進行了封裝,為驅(qū)動程序設(shè)計人員提供了面向?qū)ο?、事件?qū)動的驅(qū)動程序開發(fā)框架[12]。WDF改變了操作系統(tǒng)內(nèi)核與驅(qū)動程序之間的關(guān)系,WDM驅(qū)動程序中,一方面要處理硬件,另一方面要處理驅(qū)動程序與操作系統(tǒng)內(nèi)核的交互。而WDF則將驅(qū)動程序與操作系統(tǒng)內(nèi)核之間進行了分離,驅(qū)動程序與操作系統(tǒng)交互工作交給框架內(nèi)封裝的方法完成[13],這樣驅(qū)動開發(fā)者只需專注處理硬件的行為即可,避免了直接與操作系統(tǒng)內(nèi)核交互,不僅大大簡化了驅(qū)動程序的編程,還提高了整個系統(tǒng)的可靠性和穩(wěn)定性。

    WDF有KMDF(Kernel-Mode Driver Framework)和UMDF(User-Mode Driver Framework)兩種模式,其中前者用于內(nèi)核模式,后者用于用戶模式。而需要開發(fā)的PCI9656驅(qū)動使用的是KMDF模式,代碼效率較高。

    3.2 WDF驅(qū)動開發(fā)步驟

    與WDM驅(qū)動開發(fā)類似,WDF驅(qū)動開發(fā)也有三個步驟:

    (1) 生成驅(qū)動框架

    本文所用的開發(fā)環(huán)境為Microsoft Windows Driver Kit(WDK) 7.1.0.7600和Visual C++ 6.0。由于微軟并沒有提供創(chuàng)建KMDF框架驅(qū)動程序的工具,因此當要創(chuàng)建一個KMDF驅(qū)動程序時,需要按照以下步驟進行。

    (a) 從已安裝的WDK目錄下src文件中拷貝一個KMDF實例驅(qū)動程序到自己創(chuàng)建的文件夾目錄下。由于開發(fā)的是PLX公司的PCI9656的驅(qū)動,因此可以選擇general文件夾下的PLX9x5x文件夾。

    (b) 將dirs文件中內(nèi)容修改為:DIRS=sys。

    (c) 將該實例驅(qū)動程序中驅(qū)動程序文件名與安裝程序文件名修改為自己需要的文件名。

    (d) 利用GUIDGEN生成設(shè)備接口GUID,并根據(jù)需要定義設(shè)備IO命令。

    (2) 在生成的驅(qū)動框架下添加功能代碼

    (a) 硬件訪問

    KMDF提供了訪問存儲器映射設(shè)備的函數(shù),驅(qū)動程序需根據(jù)配置空間定義地址指針。驅(qū)動程序編寫主要包括以下步驟:

    (i) 根據(jù)配置定義地址指針。

    typedef struct _DEVICE_EXTENSION {

    PPCI9656_REGS Regs; // Registers address

    PUCHAR RegsBase; // Registers base address

    ULO RegsLength; // Registers base length

    PUCHAR SRAMBase; // SRAM base address

    ULONG SRAMLength; // SRAM base length

    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;

    需要讀寫的為Bar0與Bar2的兩塊存儲器空間。

    (ii) 在PLxPrepareHardware例程中,初始化地址指針。

    首先用WdfCmResourceListGetCount函數(shù)獲取配置資源個數(shù),用WdfCmResourceListGetDescriptor函數(shù)獲取該資源描述符,其類型屬性Type包括CmResoureTypePort(I/O端口)、CmResourceType Memory(存儲器)等。對于存儲器地址,要先用MmMapIoSpace函數(shù)將物理地址轉(zhuǎn)換成系統(tǒng)內(nèi)核模式地址,然后保存在之前定義的指針中。

    (iii) 在PLxEvtDeviceReleaseHardware例程中,對于存儲器地址,要用MmUnmIoSpace函數(shù)解除物理地址與系統(tǒng)內(nèi)核模式地址的關(guān)聯(lián)。

    (iv) 當需要訪問存儲器空間時,可使用KMDF提供的函數(shù)。

    WRITE_REGISTER_ULONG((PULONG)(pReg+n),value);

    其中參數(shù)都是由應(yīng)用程序設(shè)置并通過DeviceIoControl傳輸給驅(qū)動程序。

    (b) 中斷處理

    DMA傳輸結(jié)束后會產(chǎn)生中斷,需要對這個中斷進行處理。KMDF中使用WDFINTERRUPT對象實現(xiàn)硬件中斷的處理。

    中斷處理主要包括以下3個步驟:

    (i) 在設(shè)備環(huán)境變量結(jié)構(gòu)中聲明中斷對象。

    WDFINTERRUPT Interrupt;

    (ii) 在EvtDeviceAdd例程中,創(chuàng)建中斷對象。

    WDF_INTERRUPT_CONFIG_INIT( &InterruptConfig, PLxEvtInterruptIsr, PLxEvtInterruptDpc );

    status = WdfInterruptCreate( DevExt->Device, &InterruptConfig, WDF_NO_OBJECT_ATTRIBUTES, &DevExt->Interrupt );

    (iii) 中斷服務(wù)例程編程。

    在中斷服務(wù)例程中,首先判斷該中斷是否是需要處理的中斷,在本例中即為是否DMA結(jié)束,若不是,則返回FALSE;若是,則進行必要的處理,并返回TRUE。

    (c) DMA傳輸

    KMDF提供了三個對象實現(xiàn)DMA操作:WDFDMAENABLER、WDFDMATRANSACTION和WDFCOMMONBUFFER。WDFDMAENABLER對象用于建立一個DMA適配器,它說明DMA通道的特性;WDFDMATRANSACTION對象用于DMA傳輸控制;WDFCOMMONBUFFER對象用于申請系統(tǒng)提供的公用緩沖區(qū)。

    DMA傳輸?shù)木唧w步驟如下:

    (i) 在設(shè)備環(huán)境變量結(jié)構(gòu)中聲明三個對象。

    (ii) 在PLxEvtDeviceAdd例程中分別使用WdfDmaEnablerCreate、WdfCommonBufferCreate和WdfDmaTransactionCreate例程創(chuàng)建DMA的三個對象。

    (iii) DMA傳輸編程。

    當有I/O請求時,在PLxEvtIoRead/PLxEvtIoWrite

    例程中,用WdfDmaTransactionInitializeUsingRequest

    或WdfDmaTransactionInitialize函數(shù)初始化DMA傳輸,調(diào)用WdfDmaTransactionExecute函數(shù),啟動DMA傳輸。

    在函數(shù)

    PlxEvtProgramReadDma/PLxEvtProgramWriteDma中,對于硬件的DMA操作寄存器進行設(shè)置。

    當DMA傳輸中斷發(fā)生后,在PLxEvtInterruptDpc

    例程中,判斷DMA傳輸是否結(jié)束,沒有則調(diào)用WdfDmaTransactionExecute函數(shù),繼續(xù)啟動DMA傳輸;若DMA傳輸結(jié)束,則完成I/O請求。

    (3) 調(diào)用驅(qū)動程序完成所需功能

    本文需要對于多塊超聲回波信號數(shù)據(jù)采集板進行寄存器讀寫和DMA讀寫,因此需要開發(fā)的應(yīng)用程序框架如圖9所示。

    (a) 打開設(shè)備

    通過SetupDiEnumDeviceInterfaces函數(shù)中MemberIndex參數(shù)來設(shè)置板卡號,在GetDevicePath中得到設(shè)備路徑并以此作為CreateFile函數(shù)的參數(shù)打開設(shè)備。

    (b) 訪問設(shè)備資源

    與WDM類似,使用DeviceIoControl函數(shù)設(shè)置寄存器值與DMA地址,使用ReadFile/WriteFile讀寫DMA。

    (c) 關(guān)閉設(shè)備

    與WDM類似,使用CloseHandle函數(shù)關(guān)閉設(shè)備。

    4 超聲相控陣系統(tǒng)PCI驅(qū)動方式的選擇

    在本文所涉及的超聲相控陣系統(tǒng)中測試開發(fā)的驅(qū)動,系統(tǒng)環(huán)境為Windows XP。

    測試表明,采用WinDriver、DriverStudio和WDK開發(fā)的PCI9656驅(qū)動都能夠正確的讀寫設(shè)備資源。

    通過比較DMA讀寫的最大傳輸速率來間接判斷驅(qū)動代碼效率,見表1。

    表1 DMA讀寫最大傳輸速率

    通過表1可以看出,采用WinDriver開發(fā)的WDM驅(qū)動由于調(diào)用的是WinDriver本身提供庫函數(shù),代碼效率較低,DMA最大傳輸速率為25 MB/s,在要求高速傳輸?shù)臈l件下并不適用;采用DriverStudio開發(fā)的WDM驅(qū)動傳輸速率為121 MB/s,與WDK開發(fā)的WDF驅(qū)動相似,這是由于WDF驅(qū)動本質(zhì)上只是對于WDM進行封裝,并沒有效率上的提高或降低。

    由于超聲相控陣系統(tǒng)需要高速實時傳輸,即對于PCI數(shù)據(jù)總線的驅(qū)動效率有一定的要求,排除了采用WinDriver的開發(fā)方案;并且我們開發(fā)的超聲相控陣系統(tǒng)所采用的操作系統(tǒng)為Windows XP,而采用WDK開發(fā)的WDF驅(qū)動模型為Vista及其以后操作系統(tǒng)的驅(qū)動模型,為了保障系統(tǒng)與驅(qū)動的兼容性,排除了采用WDK的開發(fā)方案。因此,本文選擇DriverStudio開發(fā)超聲相控陣系統(tǒng)PCI驅(qū)動,能夠穩(wěn)定并且高速傳輸超聲探傷數(shù)據(jù)。

    5 結(jié)論

    本文基于實驗室自行開發(fā)的超聲相控陣系統(tǒng),詳細闡述了采用WinDriver、DriverStudio和WDK這三種工具開發(fā)PCI數(shù)據(jù)總線驅(qū)動的方案。通過比較三種開發(fā)方案,并考慮超聲相控陣系統(tǒng)對于驅(qū)動的要求,選擇DriverStudio開發(fā)PCI數(shù)據(jù)總線驅(qū)動。實驗表明,開發(fā)的驅(qū)動能夠高速穩(wěn)定地工作,滿足系統(tǒng)要求。由于不同的應(yīng)用有著不同的開發(fā)需求,可以根據(jù)特定的開發(fā)需求選擇不同的開發(fā)方案,從而得到需要的驅(qū)動及其應(yīng)用程序。

    [1] 燕會明. 超聲相控陣技術(shù)及其應(yīng)用研究[D]. 太原: 中北大學(xué), 2008: 14-15.

    YAN Huiming. Research on technique and application in ultrasonic phased array[D]. Taiyuan: Zhongbei University, 2008: 14-15.

    [2] 尹勇, 李宇. PCI總線設(shè)備開發(fā)寶典[M]. 北京: 北京航空航天大學(xué)出版社, 2005.

    YIN Yong, LI Yu. PCI bus equipment development collections[M]. Beijing: Beijing University of Aeronautics and Astronautics, 2005.

    [3] 毛清華. 基于PCI總線的超聲檢測系統(tǒng)研究[D]. 西安: 西安科技大學(xué), 2010: 5-10.

    MAO Qinghua. Research on ultrasonic testing system based on PCI bus[D]. Xi'an: Xi'an university of science and technology, 2010: 5-10.

    [4] 劉伊威, 金明河, 樊紹巍, 等. 五指仿人機器人靈巧手DLR/HIT Hand II[J]. 機械工程學(xué)報, 2009, 45(11): 10-17.

    LIU Yiwei, JIN Minghe, FAN Shaowei, et al. Five-finger dextrous robot hand DLR/HIT HAND II[J]. Journal of Mechanical Engineering, 2009, 45(11): 10-17.

    [5] 張益東. 基于PCI總線的光傳飛行控制系統(tǒng)研究[D]. 南京: 南京航空航天大學(xué), 2007: 5-8.

    ZHANG Yidong. Research on fly-by-light control system based on PCI bus[D]. Nanjing: Nanjing University of Aeronautics and Astronautics, 2007: 5-8.

    [6] 張帆, 史彩成. Windows驅(qū)動開發(fā)技術(shù)詳解[M]. 北京: 電子工業(yè)出版社, 2008.

    ZHANG Fan, SHI Caicheng. Windows driver development internals[M]. Beijing: Electronic Industry Press, 2008.

    [7] 何柳, 陳勇, 吳斌, 等. PCI/PCI-E高速實時DMA傳輸驅(qū)動設(shè)計[J]. 電子技術(shù)應(yīng)用, 2012, 38(11): 143-145.

    HE Liu, CHEN Yong, WU Bing, et al. Design a high speed and real time PCI/PCI-E DMA transmission driver[J]. Application of Electronic Technique, 2012, 38(11): 143-145.

    [8] 楊波. 基于PCI總線的WDM驅(qū)動程序開發(fā)研究[D]. 長沙: 國防科學(xué)技術(shù)大學(xué), 2007: 32-33.

    YANG Bo. The research on developing WDM driver of PCI bus[D]. Changsha: National University of Defense Technology, 2007: 32-33.

    [9] 王磊, 魯新平, 李吉成. WinDriver在開發(fā)基于PLX9056芯片的PCI設(shè)備驅(qū)動程序中的應(yīng)用[J]. 現(xiàn)代電子技術(shù), 2006, 29(18): 77-79.

    WANG Lei, LU Xinping, LI Jicheng. Application of WinDriver in developing PCI device driver based on PLX9056[J]. Modern Electronics Technique, 2006, 29(18): 77-79.

    [10] 鄭秀玉, 李曉明, 李暢, 等. 基于PCI總線的數(shù)據(jù)采集卡驅(qū)動程序設(shè)計與實現(xiàn)[J]. 電氣應(yīng)用, 2007, 26(1): 93-107.

    ZHENG Xiuyu, LI Xiaoming, LI Chang, et al. The driver development and implement of data sample card based on PCI bus[J]. Electrotechnical Application, 2007, 26(1): 93-107.

    [11] PLX Technology, Inc. PCI9656BA Data Book[EB/OL]. [2009-01]. http://www.plxtech.com.

    [12] Orwick P, Smith G. Developing drivers with the Microsoft windows driver foundation[M]. Microsoft Press, 2007.

    [13] 鄒敬軒, 蔡皖東. 基于WDF過濾驅(qū)動的USB存儲設(shè)備監(jiān)控系統(tǒng)[J]. 計算機工程與科學(xué), 2010, 32(3): 42-71.

    ZOU Jingxuan, CAI Wandong. A USB storage device monitor and control system based on the WDF filter driver[J]. Computer Engineering & Science, 2010, 32(3): 42-71.

    Research on PCI driver development in ultrasonic phased array system

    SHI Cheng-long, SHI Fang-fang, KONG Chao, ZHANG Bi-xing

    (State Key Laboratory of Acoustics, Institute of Acoustics, Chinese Academy of Sciences, Beijing 100190, China)

    The data transmission rate of ultrasonic phased array system determines the detection speed to a great extent. As a result, the efficiency of PCI device driver is critical in the ultrasonic phased array system based on PCI local bus. The developing methods and implementations of PCI device drivers using three different development tools, WinDriver,DriverStudio and WDK(Windows Driver Kit), are expounded in detail. The efficiency and compatibility of drivers by adapting different solutions are compared. Experimental results show that both the stability and data transmission rate of the driver developed by DriverStudio can meet the requirements of the ultrasonic phased array system. There are different requirements in different applications. As so, one should choose the developing solution comprehensively according to the specific requests to obtain the proper device driver and application program.

    phased array; PCI bus; device driver

    TB51+7

    A

    1000-3630(2015)-03-0252-08

    10.3969/j.issn1000-3630.2015.03.013

    2015-02-14;

    2015-05-20

    國家自然科學(xué)基金資助項目(11374324、11174321)

    施成龍(1988-), 男, 江蘇南通人, 博士研究生, 研究方向為超聲傳播與成像。

    師芳芳, E-mail: fangfangshi@mail.ioa.ac.cn

    猜你喜歡
    驅(qū)動程序相控陣中斷
    相控陣超聲技術(shù)在PE管電熔焊接檢測的應(yīng)用
    煤氣與熱力(2021年3期)2021-06-09 06:16:16
    相控陣超聲波檢測技術(shù)認證
    化工管理(2021年7期)2021-05-13 00:45:20
    一種相控陣雷達的通訊處理器設(shè)計
    電子制作(2019年24期)2019-02-23 13:22:16
    相控陣雷達研究現(xiàn)狀與發(fā)展趨勢
    電子測試(2018年15期)2018-09-26 06:01:46
    跟蹤導(dǎo)練(二)(5)
    千里移防,衛(wèi)勤保障不中斷
    解放軍健康(2017年5期)2017-08-01 06:27:44
    AT89C51與中斷有關(guān)的寄存器功能表解
    FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析
    微處理機(2012年4期)2012-06-13 11:32:24
    驅(qū)動程序更新與推薦
    驅(qū)動程序更新與推薦
    欧美午夜高清在线| 亚洲精品久久国产高清桃花| 后天国语完整版免费观看| 欧美一级毛片孕妇| 一区二区三区国产精品乱码| 麻豆久久精品国产亚洲av| 亚洲成人中文字幕在线播放| 一二三四社区在线视频社区8| 欧美xxxx黑人xx丫x性爽| 亚洲成a人片在线一区二区| 日日摸夜夜添夜夜添小说| 亚洲国产高清在线一区二区三| 婷婷六月久久综合丁香| 丝袜人妻中文字幕| 国产精品 欧美亚洲| 天天一区二区日本电影三级| 最新中文字幕久久久久 | 日本一二三区视频观看| 最新美女视频免费是黄的| 黄色成人免费大全| 国产精品av视频在线免费观看| 51午夜福利影视在线观看| 国产亚洲欧美98| 欧美高清成人免费视频www| 久久久久久人人人人人| 动漫黄色视频在线观看| 国产一区二区三区视频了| 色综合亚洲欧美另类图片| 国产精品久久久久久人妻精品电影| 夜夜夜夜夜久久久久| 久久久久久久久中文| 国内少妇人妻偷人精品xxx网站 | 久久精品亚洲精品国产色婷小说| 搡老岳熟女国产| 制服丝袜大香蕉在线| 久99久视频精品免费| 亚洲人成网站高清观看| 国产午夜福利久久久久久| 欧美午夜高清在线| 久久久色成人| 中文字幕高清在线视频| 此物有八面人人有两片| 中文字幕熟女人妻在线| 亚洲精品456在线播放app | 中国美女看黄片| 美女扒开内裤让男人捅视频| 手机成人av网站| av国产免费在线观看| 精品国产乱码久久久久久男人| 一级作爱视频免费观看| 99国产精品99久久久久| 18禁观看日本| 床上黄色一级片| 精品欧美国产一区二区三| 制服人妻中文乱码| 欧美一区二区精品小视频在线| 亚洲精品美女久久av网站| 国产欧美日韩一区二区精品| 亚洲av片天天在线观看| 天天躁狠狠躁夜夜躁狠狠躁| 中亚洲国语对白在线视频| 国内久久婷婷六月综合欲色啪| 网址你懂的国产日韩在线| 亚洲国产看品久久| 性色avwww在线观看| 国产高清videossex| 黄色日韩在线| 亚洲av美国av| 欧美日韩一级在线毛片| 好看av亚洲va欧美ⅴa在| 亚洲精品一区av在线观看| 国产精品自产拍在线观看55亚洲| 午夜福利成人在线免费观看| 日韩中文字幕欧美一区二区| 亚洲国产欧洲综合997久久,| 精品一区二区三区视频在线 | 男人舔女人的私密视频| 国产伦人伦偷精品视频| 欧美另类亚洲清纯唯美| 午夜两性在线视频| 国产亚洲欧美在线一区二区| 国产单亲对白刺激| 国产亚洲av高清不卡| 国产精品免费一区二区三区在线| 国产成人aa在线观看| 国产成人精品久久二区二区免费| 日韩 欧美 亚洲 中文字幕| 亚洲国产精品成人综合色| 亚洲国产中文字幕在线视频| 一区二区三区激情视频| 琪琪午夜伦伦电影理论片6080| 三级毛片av免费| 日韩欧美在线乱码| 午夜a级毛片| 久久天躁狠狠躁夜夜2o2o| 中文字幕最新亚洲高清| 1000部很黄的大片| 中文字幕熟女人妻在线| 成人18禁在线播放| 老汉色∧v一级毛片| 国产亚洲欧美在线一区二区| 成人三级做爰电影| 国产精品久久久久久久电影 | 1024手机看黄色片| 亚洲一区二区三区不卡视频| 国产伦精品一区二区三区视频9 | 婷婷丁香在线五月| 九九在线视频观看精品| 欧美性猛交黑人性爽| 99久久精品国产亚洲精品| 无限看片的www在线观看| 18禁黄网站禁片免费观看直播| 精品免费久久久久久久清纯| 久久热在线av| 精品人妻1区二区| 搡老妇女老女人老熟妇| 国产精品一区二区免费欧美| 亚洲乱码一区二区免费版| 岛国在线免费视频观看| 亚洲人成网站高清观看| 国产野战对白在线观看| 久久久久国内视频| 9191精品国产免费久久| 久久精品国产亚洲av香蕉五月| 久久久久九九精品影院| netflix在线观看网站| 午夜福利18| 免费人成视频x8x8入口观看| 99精品在免费线老司机午夜| 美女免费视频网站| 男人和女人高潮做爰伦理| 小蜜桃在线观看免费完整版高清| 久久亚洲精品不卡| 精品熟女少妇八av免费久了| 亚洲av五月六月丁香网| 国产一区二区在线av高清观看| 桃色一区二区三区在线观看| 免费看光身美女| 色哟哟哟哟哟哟| 九九久久精品国产亚洲av麻豆 | 日日夜夜操网爽| 欧美高清成人免费视频www| 亚洲成人免费电影在线观看| 热99在线观看视频| 一个人观看的视频www高清免费观看 | 精品乱码久久久久久99久播| 51午夜福利影视在线观看| 欧美3d第一页| 国产毛片a区久久久久| 国产精品香港三级国产av潘金莲| 一个人观看的视频www高清免费观看 | 老司机午夜福利在线观看视频| 国内精品久久久久精免费| 成人18禁在线播放| 怎么达到女性高潮| 成年女人看的毛片在线观看| 国产欧美日韩一区二区三| 日日干狠狠操夜夜爽| 美女高潮的动态| 久久精品亚洲精品国产色婷小说| 免费看a级黄色片| or卡值多少钱| 中文字幕精品亚洲无线码一区| 成人精品一区二区免费| 一区二区三区激情视频| 波多野结衣高清作品| 美女cb高潮喷水在线观看 | 神马国产精品三级电影在线观看| 国产精品,欧美在线| a级毛片在线看网站| 丰满人妻熟妇乱又伦精品不卡| 99国产精品99久久久久| 一进一出抽搐gif免费好疼| 亚洲激情在线av| а√天堂www在线а√下载| 亚洲人成电影免费在线| 亚洲国产中文字幕在线视频| 一级毛片精品| 夜夜看夜夜爽夜夜摸| 国产精品久久久久久亚洲av鲁大| 丰满人妻一区二区三区视频av | 亚洲av美国av| 精品国产乱码久久久久久男人| 真人一进一出gif抽搐免费| 国产v大片淫在线免费观看| 日日夜夜操网爽| 国产精品一区二区精品视频观看| av天堂在线播放| 国产午夜精品久久久久久| 男人和女人高潮做爰伦理| 国产高清videossex| 12—13女人毛片做爰片一| 香蕉丝袜av| 观看免费一级毛片| 中文字幕人成人乱码亚洲影| 久久这里只有精品19| 欧美日韩精品网址| 国产精品精品国产色婷婷| 国产人伦9x9x在线观看| 在线视频色国产色| www.www免费av| 怎么达到女性高潮| 精品国产三级普通话版| 免费在线观看成人毛片| 色哟哟哟哟哟哟| а√天堂www在线а√下载| 国内精品久久久久精免费| 97人妻精品一区二区三区麻豆| 毛片女人毛片| 成人高潮视频无遮挡免费网站| 亚洲国产欧洲综合997久久,| 法律面前人人平等表现在哪些方面| 一进一出抽搐gif免费好疼| 国产成人精品久久二区二区91| 天堂网av新在线| 少妇人妻一区二区三区视频| 18禁黄网站禁片午夜丰满| 国产精品一区二区三区四区免费观看 | 国产精品日韩av在线免费观看| 欧美极品一区二区三区四区| 女人高潮潮喷娇喘18禁视频| 最近在线观看免费完整版| 国产毛片a区久久久久| 久久香蕉国产精品| 欧美中文综合在线视频| 亚洲自拍偷在线| 青草久久国产| 黄色成人免费大全| 极品教师在线免费播放| 窝窝影院91人妻| av欧美777| 精品无人区乱码1区二区| 日本成人三级电影网站| 日韩欧美免费精品| 丁香六月欧美| 亚洲av免费在线观看| 成年女人毛片免费观看观看9| 国产99白浆流出| 国产成人精品久久二区二区91| 国产激情偷乱视频一区二区| 岛国视频午夜一区免费看| 久久草成人影院| 1000部很黄的大片| 国产精华一区二区三区| h日本视频在线播放| 淫秽高清视频在线观看| 中文字幕久久专区| 黄片小视频在线播放| 精品久久蜜臀av无| 国产精品影院久久| 国产成人aa在线观看| 精品不卡国产一区二区三区| а√天堂www在线а√下载| 国产精品野战在线观看| 亚洲av美国av| 制服人妻中文乱码| 亚洲成人中文字幕在线播放| 女警被强在线播放| 999精品在线视频| 91久久精品国产一区二区成人 | 黄色日韩在线| 国产精品女同一区二区软件 | а√天堂www在线а√下载| 国产av麻豆久久久久久久| 色综合亚洲欧美另类图片| 欧美中文日本在线观看视频| 波多野结衣高清无吗| 午夜免费激情av| 婷婷亚洲欧美| 搡老妇女老女人老熟妇| 国产成+人综合+亚洲专区| 国产欧美日韩精品亚洲av| 日本在线视频免费播放| 午夜福利欧美成人| 首页视频小说图片口味搜索| 国产三级在线视频| 在线免费观看不下载黄p国产 | 欧美成人性av电影在线观看| 国产日本99.免费观看| 最近最新免费中文字幕在线| 三级毛片av免费| 一级毛片高清免费大全| 久久久久久人人人人人| 欧美日韩中文字幕国产精品一区二区三区| 亚洲欧美日韩高清专用| 欧美另类亚洲清纯唯美| 国产精品99久久99久久久不卡| 国产高清激情床上av| av视频在线观看入口| 蜜桃久久精品国产亚洲av| 成年版毛片免费区| 久久这里只有精品中国| 久久国产乱子伦精品免费另类| 久久久久久久午夜电影| 三级毛片av免费| 一本综合久久免费| 丁香欧美五月| 男女视频在线观看网站免费| 日韩欧美国产在线观看| 国产极品精品免费视频能看的| 久久精品国产清高在天天线| 特大巨黑吊av在线直播| 亚洲国产精品sss在线观看| 午夜激情福利司机影院| 波多野结衣高清无吗| 久9热在线精品视频| 亚洲熟女毛片儿| 亚洲五月天丁香| 免费在线观看视频国产中文字幕亚洲| 久久久国产精品麻豆| 精品国内亚洲2022精品成人| 88av欧美| 淫妇啪啪啪对白视频| 国产精品久久久久久精品电影| 熟女少妇亚洲综合色aaa.| 伊人久久大香线蕉亚洲五| 国产欧美日韩一区二区精品| 亚洲成人久久性| 亚洲成av人片免费观看| 国产精品久久久久久久电影 | 99久久国产精品久久久| 99久久久亚洲精品蜜臀av| 18禁裸乳无遮挡免费网站照片| 日韩精品中文字幕看吧| 成人午夜高清在线视频| 亚洲av五月六月丁香网| 91av网站免费观看| 成人三级做爰电影| 日韩人妻高清精品专区| 国内揄拍国产精品人妻在线| 成年女人看的毛片在线观看| 久久精品夜夜夜夜夜久久蜜豆| 久久中文字幕一级| 国产伦人伦偷精品视频| 久久久久久久久中文| 中文字幕熟女人妻在线| 国产不卡一卡二| 午夜免费成人在线视频| 美女大奶头视频| 五月伊人婷婷丁香| 日韩欧美三级三区| 亚洲欧美日韩卡通动漫| 日韩高清综合在线| 狂野欧美激情性xxxx| 免费在线观看日本一区| 国产精品亚洲一级av第二区| 丁香欧美五月| 成年女人永久免费观看视频| 中文字幕熟女人妻在线| 欧美大码av| 中文字幕人成人乱码亚洲影| 无人区码免费观看不卡| 1000部很黄的大片| 好男人在线观看高清免费视频| 亚洲 欧美 日韩 在线 免费| 精品久久久久久久末码| 国产精品一区二区精品视频观看| 美女cb高潮喷水在线观看 | 两个人视频免费观看高清| 亚洲av片天天在线观看| 淫秽高清视频在线观看| 少妇的逼水好多| 五月玫瑰六月丁香| 淫妇啪啪啪对白视频| 久久这里只有精品中国| 精品久久蜜臀av无| 91av网一区二区| 夜夜夜夜夜久久久久| 亚洲av成人不卡在线观看播放网| 三级毛片av免费| 午夜视频精品福利| 在线观看日韩欧美| 日韩免费av在线播放| 亚洲色图 男人天堂 中文字幕| 亚洲熟女毛片儿| 精品久久久久久久末码| 久久香蕉精品热| 欧美xxxx黑人xx丫x性爽| 手机成人av网站| 最近最新中文字幕大全免费视频| 欧美日韩瑟瑟在线播放| 欧美在线一区亚洲| 国产黄片美女视频| 亚洲精华国产精华精| 亚洲午夜精品一区,二区,三区| 日本a在线网址| 亚洲自偷自拍图片 自拍| 亚洲九九香蕉| 无限看片的www在线观看| 国产伦人伦偷精品视频| 欧美不卡视频在线免费观看| 久久亚洲真实| 三级男女做爰猛烈吃奶摸视频| 99久久无色码亚洲精品果冻| 国产精品1区2区在线观看.| cao死你这个sao货| h日本视频在线播放| 免费搜索国产男女视频| av福利片在线观看| 十八禁人妻一区二区| 在线观看免费视频日本深夜| 国产精华一区二区三区| 身体一侧抽搐| 久99久视频精品免费| 一进一出抽搐gif免费好疼| 麻豆成人午夜福利视频| 男人舔女人的私密视频| 亚洲欧美激情综合另类| 天天躁狠狠躁夜夜躁狠狠躁| 色综合欧美亚洲国产小说| 美女免费视频网站| 国产激情久久老熟女| 国产精品香港三级国产av潘金莲| 欧美国产日韩亚洲一区| 久久中文看片网| 国产高清三级在线| 日韩欧美国产一区二区入口| 又爽又黄无遮挡网站| 亚洲精品在线观看二区| 日本黄色片子视频| 五月伊人婷婷丁香| 99久久成人亚洲精品观看| 一进一出好大好爽视频| 91老司机精品| a级毛片a级免费在线| netflix在线观看网站| 国产精品av久久久久免费| 国产伦一二天堂av在线观看| 两个人视频免费观看高清| 国语自产精品视频在线第100页| 天天躁日日操中文字幕| 熟女电影av网| 1024手机看黄色片| 熟妇人妻久久中文字幕3abv| 夜夜看夜夜爽夜夜摸| 一本精品99久久精品77| 国产成人精品久久二区二区免费| 亚洲精品一卡2卡三卡4卡5卡| 亚洲欧美日韩无卡精品| 午夜免费激情av| 久久热在线av| 久久香蕉精品热| 少妇人妻一区二区三区视频| 欧美性猛交╳xxx乱大交人| 一进一出抽搐动态| 国产伦在线观看视频一区| 国产高清视频在线播放一区| 老汉色av国产亚洲站长工具| 男人的好看免费观看在线视频| 天堂影院成人在线观看| 又黄又爽又免费观看的视频| 五月伊人婷婷丁香| 欧美极品一区二区三区四区| 国产精品久久久久久精品电影| 久久国产精品人妻蜜桃| 视频区欧美日本亚洲| 亚洲国产日韩欧美精品在线观看 | 丝袜人妻中文字幕| 三级国产精品欧美在线观看 | 国产精品久久久av美女十八| 亚洲男人的天堂狠狠| 黄色女人牲交| 观看免费一级毛片| 草草在线视频免费看| 国产精品亚洲av一区麻豆| 午夜福利欧美成人| 精品99又大又爽又粗少妇毛片 | 成年免费大片在线观看| 亚洲国产看品久久| 中文在线观看免费www的网站| 亚洲18禁久久av| 免费一级毛片在线播放高清视频| 亚洲av第一区精品v没综合| 亚洲精品一卡2卡三卡4卡5卡| 精品欧美国产一区二区三| 国产三级中文精品| 成熟少妇高潮喷水视频| 天堂动漫精品| 黑人操中国人逼视频| 国产高清有码在线观看视频| 国产午夜福利久久久久久| 热99re8久久精品国产| 天天躁狠狠躁夜夜躁狠狠躁| 国产 一区 欧美 日韩| 国产成人福利小说| 在线十欧美十亚洲十日本专区| 男女之事视频高清在线观看| 亚洲国产日韩欧美精品在线观看 | 九九热线精品视视频播放| 淫妇啪啪啪对白视频| 亚洲精品色激情综合| 窝窝影院91人妻| 日本 av在线| 特大巨黑吊av在线直播| 亚洲国产看品久久| 脱女人内裤的视频| 制服丝袜大香蕉在线| 中文资源天堂在线| 国产亚洲欧美在线一区二区| 观看免费一级毛片| 亚洲av美国av| 亚洲 欧美一区二区三区| 国产成人福利小说| 午夜日韩欧美国产| 国产精品自产拍在线观看55亚洲| 国产av麻豆久久久久久久| 国产精品av视频在线免费观看| aaaaa片日本免费| 色在线成人网| 两个人看的免费小视频| 精品国产乱码久久久久久男人| 网址你懂的国产日韩在线| 后天国语完整版免费观看| 日韩成人在线观看一区二区三区| 午夜久久久久精精品| 亚洲中文av在线| 国产精品乱码一区二三区的特点| 日本一二三区视频观看| av中文乱码字幕在线| 精品久久久久久久久久久久久| 欧美性猛交黑人性爽| 日韩精品中文字幕看吧| 精品欧美国产一区二区三| 美女大奶头视频| 国产成人av激情在线播放| 少妇裸体淫交视频免费看高清| 小说图片视频综合网站| 黄色片一级片一级黄色片| 久久精品夜夜夜夜夜久久蜜豆| 人妻丰满熟妇av一区二区三区| 变态另类丝袜制服| 可以在线观看毛片的网站| 亚洲熟妇中文字幕五十中出| 国产久久久一区二区三区| 国产男靠女视频免费网站| 一级作爱视频免费观看| 动漫黄色视频在线观看| 亚洲精品中文字幕一二三四区| 久久久精品大字幕| 国产成年人精品一区二区| 真实男女啪啪啪动态图| 五月玫瑰六月丁香| 亚洲av中文字字幕乱码综合| 国产精品精品国产色婷婷| 99国产精品一区二区三区| 99国产精品一区二区蜜桃av| 三级男女做爰猛烈吃奶摸视频| 男插女下体视频免费在线播放| 精品一区二区三区视频在线观看免费| 好男人在线观看高清免费视频| 999久久久国产精品视频| bbb黄色大片| 亚洲真实伦在线观看| 精品久久蜜臀av无| 亚洲美女视频黄频| 中文字幕最新亚洲高清| 亚洲精品色激情综合| 少妇的逼水好多| 黄频高清免费视频| 国产乱人伦免费视频| 欧美乱妇无乱码| 午夜免费成人在线视频| 午夜福利成人在线免费观看| 婷婷六月久久综合丁香| 两个人看的免费小视频| 亚洲无线在线观看| 亚洲自偷自拍图片 自拍| 这个男人来自地球电影免费观看| 每晚都被弄得嗷嗷叫到高潮| 国产亚洲欧美98| 精品国产三级普通话版| 午夜久久久久精精品| 色综合站精品国产| 特级一级黄色大片| 最近最新免费中文字幕在线| 12—13女人毛片做爰片一| 国产日本99.免费观看| 一级a爱片免费观看的视频| 欧美大码av| 国产成人福利小说| 韩国av一区二区三区四区| 色播亚洲综合网| 亚洲av五月六月丁香网| 精品久久久久久久末码| 午夜视频精品福利| 欧美一级毛片孕妇| 色吧在线观看| 一级毛片精品| 成人午夜高清在线视频| 色哟哟哟哟哟哟| 国产亚洲欧美98| 国产91精品成人一区二区三区| 色综合婷婷激情| 亚洲精品中文字幕一二三四区| 中文亚洲av片在线观看爽| 久99久视频精品免费| 国产一区二区在线观看日韩 | 夜夜夜夜夜久久久久| 草草在线视频免费看| 国产伦精品一区二区三区四那| 欧美激情在线99| 亚洲成人久久性| 成人鲁丝片一二三区免费| 在线永久观看黄色视频| 国产探花在线观看一区二区| 宅男免费午夜| 人人妻人人看人人澡| 老鸭窝网址在线观看| 日韩人妻高清精品专区| 蜜桃久久精品国产亚洲av| 国产精品日韩av在线免费观看| 又黄又爽又免费观看的视频| 亚洲色图 男人天堂 中文字幕| 欧美+亚洲+日韩+国产| 99热6这里只有精品|