《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 利用與硬件無關的方法簡化嵌入式系統設計:基本知識

利用與硬件無關的方法簡化嵌入式系統設計:基本知識

2025-02-23
作者:Giacomo Paterniani,現場應用工程師
來源:ADI公司

  摘要

  本文將演示一種加速嵌入式系統設計原型階段的方法,說明如何將與硬件無關的驅動程序和傳感器結合使用,簡化整個嵌入式系統的器件選擇。同時還將介紹嵌入式系統的器件、典型軟件結構以及驅動程序的實現。后續文章“利用與硬件無關的方法簡化嵌入式系統設計:驅動程序實現”將進一步探討執行過程。

  簡介

  通過使用與硬件無關的驅動程序,設計人員可以自由選擇微控制器或處理器的類型來管理傳感器,而不受硬件的限制。這種方法的優勢在于,除了供應商提供的基本軟件層外,還可以添加額外的軟件層,同時簡化傳感器的集成。本文將以慣性測量單元(IMU)傳感器為例,說明如何實現與硬件無關的驅動程序,不過,這種方法同樣適用于其他類型的傳感器和器件。驅動程序采用C語言編寫,并在一款通用微控制器上進行了測試。

  器件選擇

  IMU傳感器主要用于運動檢測,以及通過加速度和角速度來測量運動強度。本示例選擇使用ADIS16500  IMU傳感器(圖1),因為與復雜且昂貴的分立設計方案相比,該傳感器能夠為精確的多軸慣性檢測與工業系統的集成提供簡單且經濟高效的方法。

44.JPG

  圖1.ADIS16500評估板。

  主要應用包括:

  ▲導航、穩定性和儀器儀表

  ▲無人機和自動駕駛車輛

  ▲智能農業和施工機械設備

  ▲工廠/工業自動化、機器人

  ▲虛擬/增強現實

  ▲運動物聯網

45.JPG

  圖2.ADIS16500框圖。

  ADIS16500是一款精密微型機電系統(MEMS) IMU,內置一個三軸陀螺儀、一個三軸加速度計和一個溫度傳感器。參見圖2。該IMU的靈敏度、偏置、對準、線性加速度(陀螺儀偏置)和坐標軸原點(加速度計位置)已在工廠校準。這意味著在各種條件下都能提供精確的傳感器測量。

  通過該接口,微控制器可以寫入和讀取用戶控制寄存器,并讀取輸出數據寄存器,從而獲得加速度計、陀螺儀或溫度傳感器數據。為此,管理該接口所需的全部軟件和固件均已完成開發。圖2所示為數據就緒(DR)引腳。該引腳是一個數字信號,指示何時可從傳感器讀取新數據。DR引腳可被視為通過通用輸入/輸出(GPIO)端口的輸入,因此可通過微控制器輕松管理。

  從硬件的角度來看,IMU傳感器和微控制器將使用SPI接口連接,該接口是由nCS、SCLK、DIN和DOUT引腳組成的4線接口。DR引腳應連接到微控制器的其中一個GPIO。此外,IMU傳感器需要3 V至3.6 V的電源電壓,因此3.3 V就足夠了。

  了解嵌入式系統的典型軟件結構

46.JPG

  圖3.嵌入式系統的軟件/固件結構。

  了解嵌入式系統的通用軟件和固件結構對于與傳感器驅動程序連接至關重要。這將幫助設計人員構建一個靈活且易于集成到任何項目的軟件模塊。此外,驅動程序必須以模塊化的方式實現,以使設計人員能夠依賴于現有函數添加更高級的函數。

  嵌入式系統的軟件結構如圖3所示。在圖3中,層次結構從應用層開始,應用代碼就是在這一層編寫的。應用層包括main文件、依賴于傳感器的應用模塊,以及依賴于管理處理器配置的外設驅動程序的模塊。此外,在應用層中,還有與微控制器必須處理的任務相關的所有模塊。例如,通過中斷或輪詢、狀態機等管理任務的所有軟件。應用層級別根據項目的類型而有所不同,因此不同項目中實現的代碼也不同。在應用層,系統的所有傳感器根據其數據手冊進行初始化和配置。傳感器驅動程序提供的所有公共函數均可調用。例如,讀取負責輸出數據的寄存器,或者寫入一個寄存器以更改設置/校準的程序。

  應用層下面是傳感器的驅動層,這一層有兩種類型的接口。可從應用層調用的所有函數都在這一層實現。此外,函數的原型插入到驅動程序標頭文件(。h)中。因此,通過查看傳感器驅動程序的標頭文件,您可以了解驅動程序的接口以及可從較高層級調用的函數。較低級別的層將與特定外設驅動程序連接,這些外設驅動程序依賴于管理傳感器的微控制器。外設驅動程序包括管理微控制器外設的所有模塊,例如SPI、I2C、UART、USB、CAN、SPORT等,或管理處理器內部模塊的模塊,例如定時器、內存、ADC等。由于它們與硬件緊密相關,因此稱為低級函數。例如,由于微控制器不同,因此每個SPI驅動程序都是不同的。我們以ADIS16500為例。接口是SPI,因此其驅動程序將與微控制器的SPI驅動程序封裝在一起。對于不同的傳感器和不同的接口也是如此。例如,如果另一個傳感器具有I2C接口,那么同樣地,將在傳感器的初始化過程中與微控制器的I2C驅動程序封裝一起。

  傳感器驅動程序的下層是外設驅動程序,各類微控制器的外設驅動程序各不相同。如圖3所示,外設驅動程序和低級驅動程序是分開的。本質上,外設驅動程序通過可用的通信協議提供讀寫函數。由于低級驅動程序將管理信號的物理層,因此它非常依賴于設計人員所使用的硬件。外設和低級驅動層往往通過可視化工具從微控制器的集成開發環境(IDE)生成,具體取決于安裝微控制器的評估板。

  驅動程序實現

  與硬件無關的方法支持在不同應用、不同微控制器或不同處理器中使用相同的驅動程序。這種方法取決于驅動程序的實現方式。要了解驅動程序的實現方式,首先要看接口,或圖4中的傳感器標頭文件(adis16500.h)。

  標頭文件包含有用的公共宏。其中包括寄存器的地址、SPI最大速度、默認輸出數據速率(ODR)、位掩碼,以及加速度計、陀螺儀和溫度傳感器的輸出靈敏度,這些宏與用于表示數據的位數(16或32)有關。圖4顯示了這些宏,其中僅顯示了幾個寄存器的地址作為示例。本文引用的代碼可參見附錄。

47.JPG

  圖4.ADIS16500標頭文件(adis16500.h)中顯示的宏。

  附錄中的圖3顯示了包括adis16500.h在內的每個模塊均可使用的所有公共變量和公共類型聲明,其中定義了新的類型,以便更有效地管理數據。例如,ADIS16500_XL_OUT類型被定義為包含三個浮點的結構,每個軸(x、y和z)一個浮點。此外,還通過枚舉來支持不同的傳感器配置,使設計人員能夠靈活地選擇符合自身需求的配置。最值得關注的是使驅動程序與硬件無關的部分。在公共變量部分的開頭(附錄中的圖3),有三個關鍵的類型定義:指向三個基本函數的指針,或者SPI發送和接收函數,以及為生成正確的停轉時間,兩次SPI訪問之間所需的延遲函數。這些代碼還顯示了可指向的函數的原型。SPI發送函數將指向待發送值的指針作為輸入,然后返回可供檢查的內容,以確定發送是否成功。SPI接收函數也是如此,該函數將指向變量的指針作為輸入,這個指針將存儲接收時讀取的值。延遲函數以浮點數作為輸入,表示設計人員想要等待的微秒數,不返回任何內容(void)。通過這種方式,設計人員可以在應用層(例如在main文件中)利用這些特定的原型來聲明這三個函數。聲明后,他們可以將這三個函數賦值給ADIS16500_INIT私有結構的字段。附錄中的圖2列舉了一個示例,以幫助更好地理解最后一步。

  SPI發送器、接收器函數和延遲函數在main文件中聲明為靜態函數,因此屬于應用層。這些函數依賴于外設驅動程序函數,因此傳感器驅動程序本身與硬件無關。這三個函數被分配給一個變量的字段,而這些字段是指向函數的指針。這樣一來,設計人員可以封裝傳感器和微控制器,而無需修改傳感器驅動程序代碼。如果設計人員更換微控制器,他們只需將三個靜態函數內的低級函數替換為新微控制器的相應函數,從而調整main文件。通過這種方法,驅動程序變得與硬件無關,因為設計人員不需要更改傳感器的驅動程序代碼。微控制器的IDE中通常包含spiSelect、spiReceive、spiUnselect、chThdSleepMicroseconds等低級函數。在本例中,所用的微控制器評估板是SDP-K1,它嵌入了STM32F469NIH6 Cortex?-M4微控制器。該IDE是ChibiOS,這是一個免費的Arm?開發環境。

  附錄中的圖4顯示了應用級別的可調用函數原型。這些原型以及附錄中圖2和圖3討論的所有其他軟件和固件都可在傳感器驅動程序的標頭文件(adis16500.h)中找到。首先,初始化函數(adis16500_init)將指向ADIS16500_INIT結構的指針作為輸入,并返回狀態代碼,以指示初始化是否成功。初始化函數的實現在傳感器驅動程序的源文件(adis16500.c)中完成。附錄中的圖5所示為adis16500_init函數的代碼。首先,定義名為ADIS16500_PRIV的類型,其中至少包含ADIS16500_INIT結構的所有字段,然后聲明一個屬于該類型的私有變量_adis16500_priv。在初始化函數中,應用層傳遞的ADIS16500_INIT結構的所有字段將賦值給私有變量_adis16500_priv的字段。這意味著,對傳感器驅動程序的任何后續調用都將使用由應用層傳入的SPI讀寫函數和處理器延遲函數。這一點很關鍵,正因如此,傳感器驅動程序才能與硬件無關。如果設計人員想要更改微控制器,只需更改傳遞給adis16500_init函數的函數即可,不需要修改傳感器驅動程序代碼本身。在初始化函數開頭,_adis16500_priv變量的已初始化字段設置為false,因為初始化過程尚未完成。在該函數結束時,該字段將設置為true,然后返回。設計人員每次調用另一個公共函數(附錄中的圖4)時,都會執行以下檢查:如果_adis16500_priv.initialized為true,可以繼續;如果為false,將立即返回ADIS16500_RET_VALERROR錯誤。這是為了防止用戶在沒有先初始化傳感器驅動程序的情況下調用函數。繼續討論初始化函數,執行以下步驟:

  1.通過讀取ADIS16500_REG_ PROD_ID寄存器,檢查預先已知的產品ID。

  2.將應用層(main.c)傳遞的值寫入ADIS16500_REG_MSC_CTRL寄存器的相應位字段,設置數據就緒(DR)引腳極性。

  3.將應用層(main.c)傳遞的值寫入ADIS16500_REG_MSC_CTRL寄存器的相應位字段,設置同步模式。

  4.將應用層(main.c)傳遞的值寫入ADIS16500_REG_DEC_RATE寄存器,設置抽取率。

  初始化函數取決于讀寫寄存器函數(附錄中的圖6)。因此,為_adis16500_priv變量賦值之后,需要完成上述四個例程。否則,在調用讀取或寫入寄存器函數時,它們不知道該使用哪個SPI發送器、接收器和處理器延遲函數。

  參考附錄中的圖4,在初始化函數之后,還可以調用其他公共函數。下面是已實現例程的功能描述,所示為低級別例程。本文的第二部分將詳細介紹驅動程序的其他已實現函數。以下所有函數只能在初始化函數之后調用。為此,將在每個函數開頭仔細檢查,以確定傳感器是否已初始化。如果未初始化,程序會立即返回錯誤。

  ▲adis16500_rd_reg_16

  該函數用于讀取16位寄存器。該函數實現可參見附錄中的圖6。輸入包括ad,這是一個uint8_t變量,表示要讀取的寄存器的地址,以及*p_reg_val,這是指向uint16_t類型變量的指針,表示讀取值將賦值的目標。要通過SPI協議讀取寄存器,需要訪問兩次SPI;第一次訪問是為了發送地址,第二次是為了讀回被尋址寄存器的值。兩次訪問之間需要有停轉時間,因此需要延遲函數。在第一次訪問過程中,我們發送讀/寫位,在本例中為1(R = 1,W = 0),寄存器地址移位8位,再補充8位0,因此序列如下:

  R/W | AD6 | AD5 | AD4 | AD3 | AD2 | AD1 | AD0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

  其中AD代表地址,R/W代表讀/寫位。

  經過延遲后,函數通過SPI讀取值,并將該值傳遞給輸入指針。ADIS16500的寄存器具有一個包含高位值(8個最高有效位)的高地址和一個包含低位值(8個低有效位)的低地址。為了獲得16位的完整值(低位和高位),使用低地址作為ad已經足夠,因為低地址和高地址是連續的。

  ▲adis16500_wr_reg_16

  該函數用于寫入16位寄存器。該函數實現可參見附錄中的圖6。輸入包括ad,這是一個uint8_t類型變量,表示要寫入的寄存器的地址,以及reg_val,這是uint16_t類型變量,表示要寫入寄存器的值。對于讀取函數,需要考慮低地址和高地址以及低位值和高位值。因此,根據數據手冊,要想寫入ADIS16500的寄存器,需要在發送時訪問兩次SPI。第一次訪問將發送等于0的R/W位,接著是低寄存器地址,然后是低位值,因此序列如下:

  R/W | AD6 | AD5 | AD4 | AD3 | AD2 | AD1 | AD0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |,其中D代表數據。

  第二次SPI發送器訪問將發送等于0的R/W位,接著是高寄存器地址,然后是高位值,因此序列如下:

  R/W | AD14 | AD13 | AD12 | AD11 | AD10 | AD9 | AD8 | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 |。

  寫入和讀取寄存器函數實際上也可以定義為私有,因此從驅動程序軟件模塊外部不可見,也不可調用。將它們定義為公共是為了能夠調試。這樣一來,設計人員能夠快速訪問傳感器中的任何寄存器以進行讀取或寫入,從而幫助解決問題。

  ▲adis16500_rd_acc

  該函數從輸出數據寄存器讀取x、y、z加速度數據,并返回它們的值,單位為[m/sec2]。該函數實現可參見附錄中的圖7。輸入是指向ADIS16500_XL_OUT結構的指針,它只嵌入三個字段:以浮點類型表示的x、y、z加速度。在這三個軸上,讀取加速度的方式是相同的,唯一的區別在于要讀取的寄存器。每個軸有其各自要讀取的寄存器:x軸必須在x加速度輸出數據寄存器上讀取,y和z軸也在相應寄存器上讀取。加速度值將用32位值來表示,因此要讀取的寄存器有兩個。一個讀取高16位,一個讀取低16位。因此,通過查看代碼可知,將進行兩次寄存器讀取訪問,再加上適當的移位和OR位運算,得到整個二進制值并存儲在名為_temp的私有int32_t變量中。然后,數據將經過二進制轉二進制補碼的轉換。轉換后,用二進制補碼值除以靈敏度(單位為[LSB/(m/sec2)]),這樣最終將獲得以[m/sec2]為單位的加速度值。此值將記錄到指針的x、y或z字段,該指針指向已作為輸入傳遞的結構。

  ▲adis16500_rd_gyro

  陀螺儀讀取函數與加速度讀取函數的實現方法完全相同。毫無疑問,該函數將讀取x、y、z陀螺儀數據,單位為[°/sec]。其實現方法可參見附錄中的圖8。與加速度函數類似,函數的輸入是指向ADIS16500_GYRO_OUT結構的指針,該結構嵌入以浮點類型表示的x、y和z陀螺儀數據。讀取的寄存器是陀螺儀輸出數據寄存器。二進制值將用32位表示,要獲得二進制補碼值,需要完成與加速度函數相同的步驟。完成二進制到二進制補碼轉換后,用得到的值除以靈敏度(單位為[LSB/(°/sec)]),最終得到以[°/sec]為單位的值,然后該值將記錄到指針的x、y或z字段,該指針指向已作為輸入傳遞的結構。

  結論

  本文闡述了嵌入式系統的典型軟件/固件堆棧,介紹了IMU傳感器的驅動程序實現。與硬件無關的方法為各種傳感器或器件提供了可重復使用的方法,即使接口(SPI、I2C、UART等)不同也沒關系。后續文章“利用與硬件無關的方法簡化嵌入式系統設計:驅動程序實現”進一步詳細解釋了傳感器驅動程序的實現方法。




更多精彩內容歡迎點擊==>>電子技術應用-AET<<

3952966954c9c6c308355d1d28d750b.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
欧美激情办公室aⅴ_国产欧美综合一区二区三区_欧美午夜精品久久久久免费视_福利视频欧美一区二区三区

          性伦欧美刺激片在线观看| 亚洲每日更新| 中文精品视频| 宅男噜噜噜66一区二区| 亚洲一区二区三区精品在线观看 | 国产日韩欧美一区在线| 亚洲欧美日韩视频二区 | 亚洲中字在线| 欧美日本中文| 亚洲激情国产| 蘑菇福利视频一区播放| 伊人成人在线视频| 久久成人一区| 一区二区高清视频| 午夜视频一区| 亚洲深爱激情| 黄色在线成人| 欧美一区激情视频在线观看| 宅男噜噜噜66国产日韩在线观看| 午夜精品久久| 麻豆精品视频| 国产乱码精品一区二区三区不卡| 亚洲午夜久久久久久尤物| 久久国产精品久久久久久电车| 国产综合视频| 欧美国产三级| 久久国产主播精品| 国产日韩综合| 亚洲黄色av| 欧美日韩一区二区视频在线| 久久亚裔精品欧美| 欧美亚洲专区| 国产伦精品一区二区三区| 亚洲黄色影片| 亚洲区欧美区| 伊人色综合久久天天五月婷| 欧美高清视频一区| 狼狼综合久久久久综合网| 亚洲欧美网站| 先锋影音久久| 免费久久久一本精品久久区 | 性娇小13――14欧美| 亚洲精选一区| 一本色道久久| 中文亚洲免费| 国产亚洲二区| 国产亚洲亚洲| 校园激情久久| 久久亚洲综合| 欧美精品亚洲| 欧美日韩精品免费观看视频完整| 欧美aa国产视频| 欧美日韩爆操| 在线观看亚洲视频啊啊啊啊| 国产精品videosex极品| 国产精品草草| 亚洲看片网站| 香蕉成人久久| 欧美日韩国产三区| 国产精品v亚洲精品v日韩精品| 亚洲视频观看| 国产亚洲毛片| 久久婷婷影院| 韩日精品在线| 日韩午夜免费视频| 另类图片国产| 狠狠色丁香久久综合频道| 黄色国产精品| 国产美女一区| 国产精品v一区二区三区| 亚洲激情偷拍| 美女精品国产| 黑人一区二区| 亚洲综合丁香| 精品999网站| 久久不射2019中文字幕| 国产精品分类| 亚洲一区二区伦理| 国产精品v欧美精品∨日韩| 在线日韩av永久免费观看| 免费日韩av片| 亚洲国产网站| 欧美永久精品| 1024日韩| 亚洲影院免费| 噜噜噜91成人网| 亚洲大片在线| 老鸭窝91久久精品色噜噜导演| 狠狠88综合久久久久综合网| 国产精品美女| 亚洲黄色精品| 欧美日韩国产三区| 麻豆av一区二区三区久久| 亚洲激情影院| 欧美极品一区| 欧美一进一出视频| 亚洲日本视频| 国产在线一区二区三区四区| 羞羞答答国产精品www一本| 一区二区亚洲精品| 午夜久久99| 美女被久久久| 亚洲一区二区三区精品动漫| 亚洲国产网站| 欧美涩涩网站| 欧美激情偷拍| 久久午夜精品| 久久久蜜桃一区二区人| 国产日韩高清一区二区三区在线| 黄色精品免费| 韩国亚洲精品| 欧美日韩大片一区二区三区 | 国产精品成人观看视频免费| 午夜亚洲性色福利视频| 国产日韩欧美| 国产一区二区高清不卡| 亚洲茄子视频| 99精品99久久久久久宅男| 亚洲黄色一区二区三区| 亚洲视频日本| 黑人一区二区三区四区五区| 欧美精品91| 欧美日韩成人一区二区三区| 欧美视频观看一区| 韩国一区二区三区美女美女秀| 欧美激情一区二区三区在线视频| 欧美精品大片| 国产精品国码视频| 激情六月综合| 国产精品五区| 快she精品国产999| 国产综合自拍| 一本色道精品久久一区二区三区| 一区二区91| 久久大逼视频| 欧美三级视频| 在线视频精品一区| 国产精品一区毛片| 欧美精品国产一区| 亚洲精品日韩精品| 噜噜噜91成人网| 国产精品av一区二区| 亚洲激情网址| 欧美一区1区三区3区公司| 欧美在线观看天堂一区二区三区| 国内不卡一区二区三区| 国产视频一区三区| 欧美高清日韩| 国产三级精品在线不卡| 欧美日产一区二区三区在线观看| 亚洲美女一区| 欧美一区成人| 亚洲激情婷婷| 欧美1区2区| 国产欧美另类| 欧美另类视频| 国产日韩精品视频一区二区三区| 欧美在线亚洲综合一区| 99精品视频网| 欧美日韩在线高清| 亚洲欧美日韩国产| 亚洲看片网站| 欧美午夜欧美| 蜜桃av一区| 亚洲欧洲日本国产| 欧美精品二区| 久久久久久精| 国产欧美亚洲一区| 亚洲高清视频一区二区| 午夜亚洲福利| 国产女优一区| 一本色道久久综合亚洲二区三区| 欧美成人免费在线| 免费一级欧美片在线播放| 99国产精品| 最新亚洲视频| 亚洲国产高清一区二区三区| 欧美日韩免费精品| 欧美成人一区二区在线| 久久精品成人一区二区三区蜜臀| 国产伦精品一区二区三区视频黑人 | 性一交一乱一区二区洋洋av| 影院欧美亚洲| 国产伊人精品| 欧美午夜不卡| 午夜久久资源| 欧美在线观看天堂一区二区三区| 亚洲一区二区三区精品在线观看| 亚洲国产精品久久久久久女王| 午夜日韩av| 欧美激情一区| 欧美日韩在线高清| 韩国一区二区三区在线观看| 欧美日韩无遮挡| 国产一区久久| 激情成人亚洲| 亚洲激情视频| 国产精品资源| 久久久久久国产精品一区| 久久免费99精品久久久久久| 欧美一区二区三区久久精品| 欧美a级片一区| 欧美日韩高清在线一区| 海角社区69精品视频| 精品福利电影| 一区二区三区高清视频在线观看| 日韩亚洲视频| 久久不射中文字幕| 欧美日韩亚洲一区二区三区在线| 禁久久精品乱码| 一区二区国产在线观看| 久久国产精品高清| 好看的亚洲午夜视频在线| 亚洲欧洲午夜| 久久精品中文| 亚洲图片在线| 国产九区一区在线| 欧美极品一区| 99国产精品视频免费观看一公开| 免费毛片一区二区三区久久久| 欧美另类视频| 国产日韩欧美三区| 欧美精品一线| 国产精品视频免费观看| 欧美日本中文| 国产精品日韩欧美一区二区| 欧美日韩精品免费观看| 一区二区毛片| 国产精品www.| 免费久久久一本精品久久区| 在线电影一区| 你懂的成人av| 亚洲深夜影院| 欧美日韩在线精品一区二区三区| 夜夜爽99久久国产综合精品女不卡| 久久午夜av| 国产欧美短视频| 国产精品地址| 久久精品成人| 国产精品久久九九| 激情久久五月| 午夜日本精品| 嫩草成人www欧美| 亚洲巨乳在线| 国产主播精品| 欧美阿v一级看视频| 亚洲综合不卡| 99在线|亚洲一区二区| 国内精品久久久久久久97牛牛| 嫩草成人www欧美| 日韩视频久久| 亚洲国内欧美| 一区在线视频观看| 国产精品黄色| 欧美在线看片| 噜噜噜躁狠狠躁狠狠精品视频| 99国产精品久久久久久久成人热| 合欧美一区二区三区| 女人天堂亚洲aⅴ在线观看| 性色一区二区| 欧美一级视频| 亚洲一区视频| 国产精品日韩高清| 一区二区三区免费看| 亚洲国产片色| 亚洲精品日本| 亚洲精品中文字幕在线| 影音先锋在线一区| 在线观看不卡| 在线观看成人av电影| 在线观看亚洲视频啊啊啊啊| 亚洲视频观看| 亚洲国产午夜| 在线亚洲自拍| 亚洲欧美激情诱惑| 另类图片国产| 午夜精品区一区二区三| 欧美日韩影院| 亚洲国产免费看| 一本久道久久综合狠狠爱| 国产日韩高清一区二区三区在线| 国产欧美精品| 美女精品网站| 欧美日韩一区二区三区在线观看免| 国产精品分类| 亚洲美女色禁图| 亚洲一区三区视频在线观看| 裸体丰满少妇做受久久99精品 | 亚洲高清不卡一区| 国产精品日韩精品欧美精品| 久久av最新网址| 你懂的视频一区二区| 狠狠入ady亚洲精品| 亚洲精一区二区三区| 亚洲一区二区在线看| 久久综合福利| 亚洲国产二区| 欧美亚洲一级| 亚洲午夜精品久久久久久app| 中文亚洲字幕| 女生裸体视频一区二区三区| 亚洲第一伊人| 久久日韩精品| 亚洲狠狠婷婷| 久久亚洲风情| 亚洲美女网站| 久久久亚洲人| 亚洲精品一级| 欧美久久视频| 国产九九精品| 伊人精品在线| 久久久99爱| 一区二区高清| 狠狠色综合网| 欧美一区激情视频在线观看| 中文一区二区| 激情成人综合| 亚洲欧美文学| 日韩天堂av| 亚洲午夜精品一区二区| 久久一区欧美| 亚洲一区三区视频在线观看| 在线国产日韩| 欧美日韩国产欧| 蜜桃av久久久亚洲精品| 亚洲毛片网站| 好吊色欧美一区二区三区四区 | 中日韩男男gay无套| 狠狠色噜噜狠狠狠狠色吗综合| 性久久久久久| 国产欧美日韩一级| 日韩亚洲欧美精品| 亚洲精品九九| 亚洲视频精品| 欧美视频日韩| 欧美日韩一区二区三区在线视频| 久久久久久久高潮| 欧美中文字幕| 性色av一区二区怡红| 国产精品一区在线观看| 国产日韩欧美一区| 国产精品久久久免费| 国产精品亚洲综合| 国产精品资源| 亚洲色诱最新| 国产精品区二区三区日本| 亚洲电影成人| 亚洲精品影院在线观看| 99国产精品久久久久久久成人热| 亚洲激情精品| 一区二区视频在线观看| 亚洲网址在线| 91久久亚洲| 亚洲伦伦在线| 亚洲在线观看| 亚洲欧美网站| 日韩亚洲视频| av不卡在线看| 久久久精品网| 久久久99爱| 亚洲欧洲三级| 国产模特精品视频久久久久| 亚洲尤物影院| 欧美一区免费| 国产综合欧美| 国产精品久久久久9999高清| 香蕉av777xxx色综合一区| 午夜精品一区二区在线观看 | 欧美aⅴ99久久黑人专区| 国产综合久久| 国产视频一区免费看| 欧美一级专区| 亚洲天堂男人| 午夜在线a亚洲v天堂网2018| 欧美国产三区| 亚洲二区免费| 久久一区二区三区超碰国产精品| 欧美日韩国产综合视频在线| 一区在线播放| 一区二区三区三区在线| 亚洲久久一区| 久久综合婷婷| 亚洲国内自拍| 欧美福利精品| 99精品国产在热久久婷婷| 欧美一区激情视频在线观看| 亚洲大胆在线| 久久久久久国产精品mv| 亚洲精品中文字幕在线| 亚洲欧美一区二区原创| 国产午夜精品一区二区三区欧美| 老牛影视一区二区三区| 一本久道久久综合婷婷鲸鱼| 欧美午夜一区二区福利视频| 国产精品永久| 亚洲激情自拍| 欧美特黄视频| 久久一区中文字幕| 亚洲一区三区在线观看| 亚洲另类自拍|