色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

no-OS及平臺驅(qū)動程序的了解和使用

微云疏影 ? 來源:ADI ? 作者:ADI ? 2022-04-12 14:29 ? 次閱讀

快速發(fā)展的技術(shù)需要軟件支持(固件驅(qū)動程序和代碼示例)來簡化設(shè)計(jì)導(dǎo)入過程。本文介紹如何利用no-OS(無操作系統(tǒng))驅(qū)動程序和平臺驅(qū)動程序來構(gòu)建ADI公司精密模數(shù)轉(zhuǎn)換器數(shù)模轉(zhuǎn)換器的應(yīng)用固件,這些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。

ADI公司提供基于no-OS驅(qū)動程序的嵌入式固件示例來支持精密變換器。no-OS驅(qū)動程序負(fù)責(zé)器件配置、轉(zhuǎn)換器數(shù)據(jù)采集、執(zhí)行校準(zhǔn)等,而基于no-OS驅(qū)動程序的固件示例則便于將數(shù)據(jù)傳輸?shù)街鳈C(jī)進(jìn)行顯示、存儲和進(jìn)一步處理。

no-OS和平臺驅(qū)動程序簡介

顧名思義,no-OS驅(qū)動程序設(shè)計(jì)用于通用(或無特定)操作系統(tǒng)。該名稱還意味著這些驅(qū)動程序可以用在沒有任何OS支持的裸機(jī)(BareMetal)系統(tǒng)上。no-OS驅(qū)動程序旨在為給定精密轉(zhuǎn)換器的數(shù)字接口訪問提供高級API。no-OS驅(qū)動程序使用器件的這些API接口訪問、配置、讀取、寫入數(shù)據(jù),而無需知道寄存器地址(存儲器映射)及其內(nèi)容。

no-OS驅(qū)動程序利用平臺驅(qū)動程序?qū)觼碇С挚缍鄠€(gè)硬件/軟件平臺復(fù)用相同的no-OS驅(qū)動程序,使固件高度可移植。平臺驅(qū)動程序?qū)拥氖褂脤o-OS驅(qū)動程序隔絕開來,后者無需知道平臺特定接口(如SPI、I2C、GPIO等)的低級細(xì)節(jié),因此no-OS驅(qū)動程序不需要修改就能跨多個(gè)平臺復(fù)用。

poYBAGJVHGWAKAETAABC-YEmmMs388.jpg

圖1.精密轉(zhuǎn)換器固件協(xié)議棧

使用no-OS驅(qū)動程序

圖2顯示了no-OS驅(qū)動程序的典型代碼結(jié)構(gòu)。

pYYBAGJVHGWAKKmoAABOxRt7JJA320.jpg

圖2.no-OS驅(qū)動程序代碼結(jié)構(gòu)

poYBAGJVHGWAb1iuAABNRtCvkX8998.jpg

圖3.器件配置枚舉、結(jié)構(gòu)和API

精密轉(zhuǎn)換器的no-OS驅(qū)動程序代碼通常包含在兩個(gè)以C編程語言編寫的源文件中:adxxxx.c和adxxxx.h,其中xxxx代表器件名稱(例如AD7606、AD7124等)。器件頭文件(adxxxx.h)包含器件特定結(jié)構(gòu)、枚舉、寄存器地址和位掩碼的公共編程接口,將此文件包含到所需的源文件中便可使用這些公開訪問接口。器件源文件(adxxxx.c)包含接口的實(shí)現(xiàn),用于初始化和移除器件、讀/寫器件寄存器、從器件讀取數(shù)據(jù)、獲取/設(shè)置器件特定參數(shù)等。

典型的no-OS驅(qū)動程序圍繞一組常見功能來構(gòu)建:

?器件特定寄存器地址、位掩碼宏、器件配置枚舉、讀/寫器件特定參數(shù)(如過采樣、增益、基準(zhǔn)電壓等)的結(jié)構(gòu)的聲明。

?通過no-OS驅(qū)動程序的器件初始化/移除函數(shù)以及器件特定的初始化和驅(qū)動程序結(jié)構(gòu)與描述符初始化物理器件/解除器件初始化。

?使用器件寄存器讀/寫函數(shù)訪問器件存儲器映射或寄存器詳細(xì)信息,例如adxxxx_read_register()或adxxxx_write_register()。

no-OS驅(qū)動程序代碼使用

使用器件特定地址、位掩碼、參數(shù)配置枚舉和結(jié)構(gòu):

如前所述,adxxxx.h頭文件包含所有器件特定枚舉和結(jié)構(gòu)的聲明,這些枚舉和結(jié)構(gòu)被傳遞到器件特定的函數(shù)或API以配置或訪問器件參數(shù)。具體情況如圖3所示。

圖3中顯示的adxxxx_config結(jié)構(gòu)允許用戶選擇多路復(fù)用器通道并為其設(shè)置過采樣率。此結(jié)構(gòu)的成員(afe_mux_channel和oversampling)是存在于同一頭文件中的枚舉,其包含這兩個(gè)字段的所有可能值的數(shù)字常量,用戶可以選擇。

adxxxx.c文件中定義的adxxxx_set_adc_config()函數(shù)通過配置結(jié)構(gòu)獲取用戶傳遞的配置/參數(shù),并進(jìn)一步調(diào)用adxxxx_spi_reg_write()函數(shù),通過數(shù)字接口(在上例中是SPI)將數(shù)據(jù)寫入ADXXXX_REG_CONFIG器件寄存器。

使用no-OS驅(qū)動程序結(jié)構(gòu)和初始化函數(shù)初始化器件:

pYYBAGJVHGWAZx2tAABL2bYDErw095.jpg

圖4.器件初始化和驅(qū)動程序結(jié)構(gòu)的聲明

除了器件配置枚舉和結(jié)構(gòu)之外,no-OS驅(qū)動程序還提供以下兩個(gè)結(jié)構(gòu):

?器件初始化結(jié)構(gòu)。

?設(shè)備驅(qū)動程序結(jié)構(gòu)。

器件初始化結(jié)構(gòu)允許用戶在用戶應(yīng)用程序代碼中定義器件特定的參數(shù)和配置。初始化結(jié)構(gòu)包含其他器件特定的參數(shù)結(jié)構(gòu)和枚舉的成員。圖5顯示了器件初始化結(jié)構(gòu)的定義。

器件驅(qū)動程序結(jié)構(gòu)通過器件初始化函數(shù)adxxxx_init()加載器件初始化參數(shù)。器件驅(qū)動程序結(jié)構(gòu)是在運(yùn)行時(shí)(動態(tài))從堆空間中分配內(nèi)存。器件驅(qū)動程序結(jié)構(gòu)和器件初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。器件驅(qū)動程序結(jié)構(gòu)是器件初始化結(jié)構(gòu)的運(yùn)行時(shí)版本。

以下步驟說明典型的器件初始化函數(shù)和初始化流程:

?第1步:在應(yīng)用程序中創(chuàng)建器件初始化結(jié)構(gòu)的定義(或?qū)嵗ɡ鐂truct adxxxx_init_params),以初始化用戶特定的器件參數(shù)和平臺相關(guān)的驅(qū)動程序參數(shù)。參數(shù)在編譯期間定義。

注意:初始化結(jié)構(gòu)中定義的參數(shù)因器件而異。

poYBAGJVHGWAcvjwAAAQnW7dm7I922.jpg

?第2步:在應(yīng)用程序代碼中創(chuàng)建器件驅(qū)動程序結(jié)構(gòu)的指針實(shí)例(變量)。

用戶應(yīng)用程序需要創(chuàng)建器件驅(qū)動程序結(jié)構(gòu)的單個(gè)指針實(shí)例。將此實(shí)例傳遞給所有no-OS驅(qū)動程序API/函數(shù)以訪問器件特定參數(shù)。應(yīng)用程序代碼中定義的此指針實(shí)例指向堆中動態(tài)分配的內(nèi)存,這是通過no-OS驅(qū)動程序中定義的器件初始化函數(shù)(如adxxxx_init())完成的。

pYYBAGJVHGWAWlyaAAASbpghT_4661.jpg

?第3步:調(diào)用器件初始化函數(shù)以初始化器件和其他平臺特定的外設(shè)。

pYYBAGJVHGWAJUOJAAAsT4pHePE463.jpg

no-OS驅(qū)動程序中定義的adxxxx_init()函數(shù)用adxxx_init_param結(jié)構(gòu)傳遞的用戶特定參數(shù)初始化器件。器件驅(qū)動程序結(jié)構(gòu)的指針實(shí)例和器件初始化結(jié)構(gòu)的實(shí)例作為兩個(gè)參數(shù)傳遞給此初始化函數(shù)。用戶應(yīng)用程序代碼可以多次調(diào)用adxxxx_init()函數(shù),只要調(diào)用初始化函數(shù)之后再調(diào)用器件移除函數(shù)來平衡。

通過器件寄存器讀/寫函數(shù)訪問存儲器映射(寄存器內(nèi)容)如圖6所示

用戶可以通過no-OS驅(qū)動程序器件特定的adxxx_read/write()函數(shù)訪問器件寄存器內(nèi)容(例如產(chǎn)品ID、暫存區(qū)值、OSR等)。

大多數(shù)情況下,用戶不會直接使用寄存器訪問函數(shù)。器件特定的函數(shù)通過這些寄存器訪問函數(shù)(如adxxxx_spi_reg_read/write())來調(diào)用。如果可能,建議使用器件配置和狀態(tài)API來訪問器件存儲器映射,而不要使用直接寄存器訪問函數(shù),因?yàn)檫@樣能確保器件驅(qū)動程序結(jié)構(gòu)與器件中的配置保持同步。

平臺驅(qū)動程序

平臺驅(qū)動程序是包裝平臺特定API的硬件抽象層(HAL)之一。它們由no-OS器件驅(qū)動程序或用戶應(yīng)用程序代碼調(diào)用,使后者可以獨(dú)立于底層硬件和軟件平臺。平臺驅(qū)動程序包裝了平臺特定的低級硬件功能,例如SPI/I2C初始化和讀/寫、GPIO初始化和讀/寫、UART初始化和接收/發(fā)送、用戶特定的延遲、中斷等。

poYBAGJVHGWAHsrcAABAc03-L9Q171.jpg

圖5.用戶應(yīng)用程序中的器件初始化結(jié)構(gòu)定義

pYYBAGJVHGWANg5NAAA3XhKTKaU502.jpg

圖6.訪問寄存器內(nèi)容

SPI平臺驅(qū)動程序模塊的典型文件結(jié)構(gòu)如圖7所示。

使用平臺驅(qū)動程序

平臺驅(qū)動程序代碼通常包含在以C/C++編程語言編寫的三個(gè)源文件中。

1) spi.h:這是一個(gè)與平臺無關(guān)的文件,包含SPI功能所需的器件結(jié)構(gòu)和枚舉。此頭文件中定義的C編程接口沒有平臺依賴性。

初始化和器件結(jié)構(gòu)中聲明的所有參數(shù)對任何平臺上的SPI接口都是通用的。

器件初始化結(jié)構(gòu)中使用的void *extra參數(shù)允許用戶傳遞額外的參數(shù),這些參數(shù)可以是所用平臺特定的。

SPI驅(qū)動程序結(jié)構(gòu)和SPI初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。SPI驅(qū)動程序結(jié)構(gòu)是SPI初始化結(jié)構(gòu)的運(yùn)行時(shí)版本。

2) spi.cpp/.c:此文件包含spi.h文件中聲明的函數(shù)的實(shí)現(xiàn),這些函數(shù)用于初始化特定平臺的SPI外設(shè)以及讀/寫數(shù)據(jù)。廣義的“平臺”是指硬件微控制器(目標(biāo)器件)和軟件(如RTOS或Mbed-OS)的組合。此文件依賴于平臺,移植到其他平臺時(shí)需要修改。

圖9詳細(xì)說明了Mbed平臺的SPI接口,并顯示了如何使用這些接口和器件初始化/驅(qū)動程序結(jié)構(gòu)來初始化SPI和讀/寫數(shù)據(jù)。

poYBAGJVHGWAfkn2AAA5o9vQyC0051.jpg

圖7.SPI平臺驅(qū)動程序代碼結(jié)構(gòu)

pYYBAGJVHGaAbiGeAAA9ZVL9Tz0942.jpg

圖8.SPI初始化和驅(qū)動程序結(jié)構(gòu)

poYBAGJVHGaAMdOkAABH4mQQqJw347.jpg

圖9.SPI API或函數(shù)注意:增加的spi_init()和spi_write_and_read()代碼是節(jié)略代碼,

為清楚起見而省略了細(xì)節(jié)。

pYYBAGJVHGaAbYy_AAA6OndrnWk685.jpg

圖10.SPI額外的初始化和驅(qū)動程序結(jié)構(gòu)

3) spi_extra.h:此文件包含其他器件結(jié)構(gòu)或枚舉,其特定于給定平臺。它允許用戶應(yīng)用程序代碼提供通用spi.h文件中未涉及的配置。例如,SPI引腳可能隨平臺而異,因此可以作為這些平臺特定的額外結(jié)構(gòu)的一部分添加。

移植平臺驅(qū)動程序

平臺驅(qū)動程序可以從一個(gè)平臺(微控制器)移植到另一個(gè)平臺;若要移植,通常需要創(chuàng)建平臺特定的.cpp/.c和_extra.h文件。平臺驅(qū)動程序駐留在微控制器單元供應(yīng)商提供的器件特定硬件抽象層(HAL)之上的一層。因此,為將平臺驅(qū)動程序從一個(gè)平臺移植到另一個(gè)平臺,與調(diào)用供應(yīng)商提供的HAL中存在的函數(shù)或API相關(guān)的平臺驅(qū)動程序代碼需要做一些細(xì)微改動。

圖12區(qū)分了基于Mbed的SPI平臺驅(qū)動程序和ADuCM410 SPI平臺驅(qū)動程序。

ADI no-OS存儲庫和平臺驅(qū)動程序的GitHub源代碼鏈接可在ADI公司W(wǎng)iki和GitHub頁面上找到。

為no-OS驅(qū)動程序做貢獻(xiàn)

ADI no-OS驅(qū)動程序已開源并托管在GitHub上。驅(qū)動程序不僅支持精密轉(zhuǎn)換器,也支持許多其他ADI產(chǎn)品,如加速度計(jì)、收發(fā)器光電器件等。任何熟悉源代碼的人都可以為這些驅(qū)動程序做貢獻(xiàn),方式是提交變更和創(chuàng)建拉取請求來審核這些變更。

有許多示例項(xiàng)目可以在Linux和/或Windows環(huán)境中運(yùn)行。許多示例項(xiàng)目是用硬件描述性語言(HDL)開發(fā)的,以便在Xilinx?、Intel?等公司開發(fā)的FPGA以及由不同供應(yīng)商開發(fā)的目標(biāo)處理器上運(yùn)行。

如需無操作系統(tǒng)的系統(tǒng)的no-OS軟件驅(qū)動程序(用C編寫),請?jiān)L問ADI公司no-OS GitHub存儲庫。

ADI公司W(wǎng)iki頁面提供了使用Mbed和ADuCMxxx平臺為精密轉(zhuǎn)換器開發(fā)的示例。

poYBAGJVHGaAHA3BAABvio1saXQ195.jpg

圖11.Mbed平臺特定的SPI初始化實(shí)現(xiàn)

pYYBAGJVHGaATCyfAABeE33tMj8987.jpg

圖12.平臺驅(qū)動程序差異

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8694

    瀏覽量

    147085
  • 數(shù)據(jù)采集
    +關(guān)注

    關(guān)注

    38

    文章

    6053

    瀏覽量

    113620
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    831

    瀏覽量

    48022
收藏 人收藏

    評論

    相關(guān)推薦

    USB音頻過濾器驅(qū)動程序安裝

    電子發(fā)燒友網(wǎng)站提供《USB音頻過濾器驅(qū)動程序安裝.pdf》資料免費(fèi)下載
    發(fā)表于 12-19 14:28 ?0次下載
    USB音頻過濾器<b class='flag-5'>驅(qū)動程序</b>安裝

    Linux驅(qū)動程序程序員指南

    電子發(fā)燒友網(wǎng)站提供《Linux驅(qū)動程序程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 15:53 ?0次下載
    Linux<b class='flag-5'>驅(qū)動程序</b><b class='flag-5'>程序</b>員指南

    pcie設(shè)備驅(qū)動程序安裝步驟

    PCIe(Peripheral Component Interconnect Express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),用于計(jì)算機(jī)內(nèi)部硬件組件之間的連接。安裝PCIe設(shè)備驅(qū)動程序是確保硬件
    的頭像 發(fā)表于 11-13 10:32 ?642次閱讀

    arduino 6軸同步電機(jī)驅(qū)動程序

    arduino 6軸同步電機(jī)驅(qū)動程序。含加加減速。
    發(fā)表于 11-09 14:09 ?0次下載

    硬盤電機(jī)怎么驅(qū)動程序?它有什么典型特征?

    硬盤電機(jī)的驅(qū)動程序是硬盤中一個(gè)非常重要的組成部分,它負(fù)責(zé)控制硬盤電機(jī)的啟動、停止、轉(zhuǎn)速調(diào)節(jié)等操作。硬盤電機(jī)驅(qū)動程序的設(shè)計(jì)和實(shí)現(xiàn)涉及到電機(jī)控制理論、電子技術(shù)、計(jì)算機(jī)編程等多個(gè)領(lǐng)域的知識。 一、硬盤電機(jī)
    的頭像 發(fā)表于 10-22 11:10 ?279次閱讀

    LSP 2.10 DaVinci Linux驅(qū)動程序

    電子發(fā)燒友網(wǎng)站提供《LSP 2.10 DaVinci Linux驅(qū)動程序.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 09:30 ?0次下載
    LSP 2.10 DaVinci Linux<b class='flag-5'>驅(qū)動程序</b>

    Linux設(shè)備驅(qū)動程序分類有哪些

    Linux設(shè)備驅(qū)動程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Linux設(shè)備驅(qū)動程序的分類繁多,可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類。 按硬件類型分類 Linux設(shè)備
    的頭像 發(fā)表于 08-30 15:11 ?529次閱讀

    linux驅(qū)動程序如何加載進(jìn)內(nèi)核

    ,需要了解Linux內(nèi)核的基本概念和API。以下是一些關(guān)鍵概念: 1.1 內(nèi)核模塊:Linux內(nèi)核模塊是一種動態(tài)加載和卸載的代碼,可以在不重新啟動系統(tǒng)的情況下加載和卸載。驅(qū)動程序通常以內(nèi)核模塊的形式實(shí)現(xiàn)。 1.2 設(shè)備模型:Linux內(nèi)核使用設(shè)備模型來管理設(shè)
    的頭像 發(fā)表于 08-30 15:02 ?439次閱讀

    linux驅(qū)動程序主要有哪些功能

    Linux驅(qū)動程序是操作系統(tǒng)與硬件設(shè)備之間進(jìn)行通信的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的數(shù)據(jù)交換和控制。Linux驅(qū)動程序的主要功能包括以下幾個(gè)方面: 設(shè)備識別與初始化 Linux驅(qū)動程序需要
    的頭像 發(fā)表于 08-30 14:47 ?347次閱讀

    linux驅(qū)動程序的編譯方法是什么

    Linux驅(qū)動程序的編譯方法主要包括兩種: 與內(nèi)核一起編譯 和 編譯成獨(dú)立的內(nèi)核模塊 。以下是對這兩種方法的介紹: 一、與內(nèi)核一起編譯 與內(nèi)核一起編譯意味著將驅(qū)動程序的源代碼直接集成到Linux內(nèi)核
    的頭像 發(fā)表于 08-30 14:46 ?536次閱讀

    linux驅(qū)動程序運(yùn)行在什么空間

    Linux 驅(qū)動程序是操作系統(tǒng)的一部分,負(fù)責(zé)管理硬件設(shè)備與操作系統(tǒng)之間的交互。驅(qū)動程序運(yùn)行在內(nèi)核空間(Kernel Space),這是操作系統(tǒng)的核心部分,與用戶空間(User Space)相對。內(nèi)核
    的頭像 發(fā)表于 08-30 14:37 ?392次閱讀

    虹科技術(shù) Linux環(huán)境再升級:PLIN驅(qū)動程序正式發(fā)布

    Linux驅(qū)動程序領(lǐng)域再添新成員,PLIN驅(qū)動程序現(xiàn)已正式發(fā)布。
    的頭像 發(fā)表于 06-28 13:34 ?357次閱讀
    虹科技術(shù) Linux環(huán)境再升級:PLIN<b class='flag-5'>驅(qū)動程序</b>正式發(fā)布

    怎么編寫Framebuffer驅(qū)動程序

    Framebuffer 驅(qū)動程序框架 分為上下兩層: fbmem.c:承上啟下 實(shí)現(xiàn)、注冊 file_operations 結(jié)構(gòu)體 把 APP 的調(diào)用向下轉(zhuǎn)發(fā)到具體的硬件驅(qū)動程序
    的頭像 發(fā)表于 03-22 09:13 ?554次閱讀
    怎么編寫Framebuffer<b class='flag-5'>驅(qū)動程序</b>

    使用TSIP驅(qū)動程序(Azure RTOS)的TLS實(shí)現(xiàn)示例

    電子發(fā)燒友網(wǎng)站提供《使用TSIP驅(qū)動程序(Azure RTOS)的TLS實(shí)現(xiàn)示例.pdf》資料免費(fèi)下載
    發(fā)表于 01-31 10:13 ?3次下載
    使用TSIP<b class='flag-5'>驅(qū)動程序</b>(Azure RTOS)的TLS實(shí)現(xiàn)示例

    ch341a驅(qū)動程序無法使用

    隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,各種外部設(shè)備的驅(qū)動程序成為了保證硬件正常工作的重要一環(huán)。然而,有時(shí)我們可能會遇到ch341a驅(qū)動程序無法使用的問題。本文將詳細(xì)解釋該問題的原因,并提供詳實(shí)、細(xì)致的解決方法
    的頭像 發(fā)表于 12-26 14:17 ?3996次閱讀
    主站蜘蛛池模板: 国产高清国内精品福利色噜噜| 色欲无码国产喷水AV精品| 纯肉巨黄H爆粗口男男分卷阅读| 18禁无遮挡羞羞污污污污免费| 蜜臀色欲AV无人A片一区| www.一级毛片| 亚洲欧美一区二区三区蜜芽| 久久久无码精品亚洲欧美| GOGOGO高清免费播放| 午夜亚洲国产理论片二级港台二级| 精品国产乱码久久久久久口爆| 97一期涩涩97片久久久久久久| 秋霞影音先锋一区二区| 国内精品自线在拍2020不卡| 中文字幕在线不卡日本v二区 | 亚洲国产精品综合久久一线| 老司机福利在 线影院| 二级片免费看| 中文字幕精品AV内射夜夜夜| 人妻兽虐曲| 久久国产精品高清一区二区三区 | 国产美女裸身网站免费观看视频| 一个人免费播放高清在线观看| 国产免费69成人精品视频| 99久久婷婷国产综合精品青草 | 国产VA精品午夜福利视频| 在线 自拍 综合 亚洲 欧美| 久久精品在现线观看免费15| music radio在线收听| 日本午夜精品一区二区三区电影| 麻豆成人啪啪色婷婷久久| 久久精品热播在线看| 精品久久久久久久久免费影院| 国产精品人妻无码77777| 八妻子秋霞理在线播放| 98久久人妻少妇激情啪啪| 在线亚洲专区中文字幕| 一个人的免费高清影院| 夜夜精品视频一区二区| 亚洲国产精品第一影院在线观看| 小舞被爆操|