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

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

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

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

幾種IO口模擬串口“硬核”操作

FPGA之家 ? 來源:最后一個(gè)bug ? 作者:最后一個(gè)bug ? 2021-04-04 11:28 ? 次閱讀

1、聊一聊

今天跟大家分享的歌曲算是很多小伙伴曾經(jīng)的回憶吧,然而現(xiàn)在的你卻少了那份年少輕狂和多了份對(duì)無情歲月的懼怕!

好了,今天為大家?guī)韼追NIO口模擬串口"硬核"操作,相信大家對(duì)類似于串口這樣的電平類通信會(huì)有新的認(rèn)識(shí)。

2、IO模擬串口需求

"IO模擬UART"是作者大一加入學(xué)校創(chuàng)新團(tuán)隊(duì)老師出的第一道題目。畢竟當(dāng)時(shí)專業(yè)知識(shí)不夠,心里想:“實(shí)驗(yàn)室老師怎么這么變tai,有現(xiàn)成的串口不用,非得整個(gè)模擬串口”,接到這個(gè)題目一頭霧水,于是上網(wǎng)各種找資料,最后基本實(shí)現(xiàn)了該功能,實(shí)現(xiàn)辦法算是最初級(jí)的實(shí)現(xiàn)方式,不過確實(shí)給我開啟了嵌入式的大門,所以今天也把這方面的東西分享給大家,希望對(duì)大家有幫助。

IO模擬串口需求

很多小伙伴應(yīng)該都了解到現(xiàn)在很多的高性能的MCU都有大量的串口外設(shè),比如下圖的stm32F103系列USART高達(dá)5個(gè),然而在我們一般的項(xiàng)目中可能僅僅就使用了2個(gè)左右的樣子,并且串口外設(shè)引腳還可以remap重新映射,這對(duì)于那些對(duì)串口資源需求量比較大的項(xiàng)目,或許帶來了一些緩解的福音。

33a210d2-8ecb-11eb-8b86-12bb97331649.png

上圖來源于:ST芯片datasheet

但是對(duì)于一些系統(tǒng)集成類項(xiàng)目,串口作為一種常用的簡易通信方式基本上是大部分設(shè)備都會(huì)預(yù)留的外置接口,然而不同的廠家通信接口協(xié)議都不太一樣,串口的配置信息比如波特率、格式等等都不盡相同,所以這樣大量的串口資源的需求就成為了MCU選型的一種評(píng)估條件。

33f8319c-8ecb-11eb-8b86-12bb97331649.png

往往這樣的系統(tǒng)集成軟件代碼設(shè)計(jì)相對(duì)比較簡單,基本上是進(jìn)行數(shù)據(jù)收發(fā)或者轉(zhuǎn)發(fā)等等功能,所以也沒有必要選擇非常高性能的控制器,這樣串口的軟件實(shí)現(xiàn)成為了一種需求。

對(duì)于一些USART硬件上連接錯(cuò)誤,比如原理圖引腳弄錯(cuò),如果飛線非常影響外觀,重新制版開發(fā)周期拉長,那么模擬串口也是值得考慮的。

3、IO模擬串口原理

大部分的通信方式都是通過電平傳遞信號(hào),高電平表示1,低電平表示0,制定通信電平01的時(shí)間和空間規(guī)則,通信雙方就可以根據(jù)對(duì)應(yīng)的規(guī)則進(jìn)行解析數(shù)據(jù),從而進(jìn)行信息的傳遞,下面作者簡單把串口通信的物理通信格式跟大家板書一下,以便后面模擬串口進(jìn)行參考。

通信物理格式

下面作者以8個(gè)數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)位為例:

344b75aa-8ecb-11eb-8b86-12bb97331649.png

分析一下:

上圖就是一幀簡單的串口數(shù)據(jù)幀,總線處于空閑的時(shí)候處于高電平,通過一個(gè)起始位,作為一幀數(shù)據(jù)的開始,然后以LSB->MSB的方式依次傳輸一個(gè)8位的數(shù)據(jù),最后以1bit的停止位結(jié)束,這樣就結(jié)束了一個(gè)byte數(shù)據(jù)的傳輸。

那么但我們發(fā)送N個(gè)數(shù)據(jù),總線上就會(huì)有N個(gè)這樣的數(shù)據(jù)幀傳輸,這樣就形成了大家平常所謂的"字節(jié)流",在一個(gè)總線上所有的bit所維持的電平時(shí)間是固定的,這個(gè)時(shí)間的由波特率來決定,比如9600bit/s,也就是說其一個(gè)電平維持的為(1/9600)s。那個(gè)這個(gè)參數(shù)就也成了模擬串口信號(hào)的基礎(chǔ)時(shí)間約束。

值得大家注意的是串口通信的數(shù)據(jù)幀格式并不是全是(8個(gè)數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)位)同樣的格式,其中數(shù)據(jù)位個(gè)數(shù)也有7,8,9個(gè),停止位也有2個(gè)的,這個(gè)具體根據(jù)雙方協(xié)議格式來進(jìn)行選擇,同時(shí)通信還有同步、異步,全雙工和半雙工等等,大家不太理解可以找時(shí)間補(bǔ)補(bǔ)。

上面我們了解了串口的電平格式,下面開始進(jìn)入真正模擬串口的階段。

4、IO模擬串口必備妙招

作者這里會(huì)為大家介紹幾種辦法來模擬串口,每種方案都有自己的特點(diǎn),大家可以根據(jù)實(shí)際項(xiàng)目和資源進(jìn)行選擇和開發(fā)。

1

純延時(shí)模擬

這種方式就是當(dāng)年老師出模擬串口題我所采用的辦法,可以說該辦法僅僅只是為了模擬一個(gè)串口出來(俗稱 : 為了交作業(yè)),從一個(gè)電平到下一個(gè)電平的過程均采用硬延時(shí),然而這里的延時(shí)就是對(duì)應(yīng)著波特率所規(guī)定的電平持續(xù)時(shí)間,傳輸1位所需要的時(shí)間 T = 1/9600 約為104.167us,那么我們只需要按照對(duì)應(yīng)的格式翻轉(zhuǎn)IO口,然后delay延時(shí)對(duì)應(yīng)的時(shí)間即可完成模擬。

參考偽代碼:

1/************************************************ 2* Fuction :IO_UartSend 3*Descir:IO口模擬串口發(fā)送 4*Author:(公眾號(hào):最后一個(gè)bug) 5***********************************************/ 6voidIO_UartSend(sUart*pUart,unsignedcharbyte) 7{ 8 9unsignedcharbitCnt=8; 10pUart->SetTxPin(pUart,PIN_LOW);//發(fā)送Startbit 11pUart->BaudDelay(pUart);//根據(jù)baudRate延時(shí) 12while(bitCnt--)//循環(huán)發(fā)送databit 13{ 14pUart->SetTxPin(pUart,(pUart&0x01));//發(fā)送Startbit 15byte>>=1;//移位所發(fā)數(shù)據(jù) 16pUart->BaudDelay(pUart);//根據(jù)baudRate延時(shí) 17} 18pUart->SetTxPin(pUart,PIN_HIGH);//發(fā)送stopbit 19pUart->BaudDelay(pUart);//根據(jù)baudRate延時(shí) 20} 21 22/************************************************ 23* Fuction :IO_UartRecv 24*Descir:IO口模擬串口接受 25*Author:(公眾號(hào):最后一個(gè)bug) 26***********************************************/ 27unsignedcharIO_UartRecv(sUart*pUart) 28{ 29unsignedcharRecv; 30unsignedcharbitCnt=8; 31 32while(!pUart->GetRxPin(pUart))//如果接受到低電平起始位 33{ 34pUart->BaudDelay(pUart);//根據(jù)baudRate延時(shí) 35while(bitCnt--) 36{ 37Recv>>=1; 38if(pUart->GetRxPin(pUart))Recv|=0x80;//如果接受到電平為1,則置位 39pUart->BaudDelay(pUart);//根據(jù)baudRate延時(shí) 40} 41} 42returnRecv;//最終返回接受到的數(shù)據(jù) 43}

分析一下:

上面主要是IO口模擬串口的發(fā)送和接受,發(fā)送相對(duì)比較簡單,接受部分通過不斷的查詢對(duì)應(yīng)的接收引腳是否已經(jīng)拉低成為低電平,如果拉低成為了低電平就認(rèn)為接受到了start_bit,后面便通過延時(shí)進(jìn)行后面數(shù)據(jù)的接收。然而其中根據(jù)波特率進(jìn)行的延時(shí)一般就直接用指令周期來進(jìn)行測(cè)量延時(shí)了。

此方法對(duì)于簡單的模擬串口收發(fā)功能基本實(shí)現(xiàn)了,不過其只能實(shí)現(xiàn)通信的半雙工,同時(shí)通過不斷的查詢RX的電平狀態(tài)比較浪費(fèi)CPU資源,那么需要進(jìn)一步改善。

2

外部中斷法

查詢比較耗費(fèi)時(shí)間和資源,那么自然而然就想到采用中斷的方法來進(jìn)行處理,采用IO口的外部中斷功能當(dāng)RX引腳接受到一個(gè)start_bit的時(shí)候觸發(fā)一個(gè)下降沿外部中斷(記得關(guān)外部中斷),然后在外部中斷中進(jìn)行延時(shí)獲得對(duì)應(yīng)的bit數(shù)據(jù),其處理過程與上面的延時(shí)法并沒有很大的區(qū)別,所以這就不過多解釋。

以上均存在的不穩(wěn)定因素 :

其不穩(wěn)定因素主要來源于傳輸?shù)碾娖椒D(zhuǎn)不是絕對(duì)的穩(wěn)定,同時(shí)波特率傳輸?shù)臅r(shí)間也不一定完全相同,如下圖所示:

34a29344-8ecb-11eb-8b86-12bb97331649.png

分析一下:

如上圖所示首次獲取電平的位置,都是在下降沿的位置開始進(jìn)行數(shù)據(jù)的獲取,然后通過波特率所對(duì)應(yīng)的延時(shí)來進(jìn)行下一bit位的獲取,從而獲得最終的傳輸數(shù)據(jù)。

大家應(yīng)該都知道通信線路上是存在物理阻抗的,其對(duì)應(yīng)的通信線路上的電平變化是不可能像上圖中的方波那么標(biāo)準(zhǔn)的,其過程均存在一個(gè)上升時(shí)間和下降時(shí)間,同時(shí)再加上傳輸?shù)腷it時(shí)間間隔并不是嚴(yán)格的一致,所以在電平變化附近進(jìn)行電平的判斷是會(huì)存在誤判的風(fēng)險(xiǎn)。

然而如果我們?cè)谑状潍@取以后延時(shí)半個(gè)周期,如上圖藍(lán)色虛線箭頭所示位置進(jìn)行判斷便能夠比較可靠的獲得通信bit數(shù)據(jù)了。

雖然能夠獲得穩(wěn)定的數(shù)據(jù),不過采用硬延時(shí)在軟件設(shè)計(jì)中終究是一個(gè)不太好的實(shí)現(xiàn)方案,同時(shí)以上通信還無法實(shí)現(xiàn)全雙工,所以還是有必要再進(jìn)行優(yōu)化改善。

3

外部中斷+定時(shí)器

其實(shí)要解決硬延時(shí)最直接的處理辦法就是使用定時(shí)器來進(jìn)行處理,大家把發(fā)送和接受都放到對(duì)應(yīng)的時(shí)間間隔里處理,這里大家比較常用的一種方案就是使用外部中斷獲得start_bit的位置,然后在外部中斷中開啟1/2bit定時(shí),比如9600波特率,其一個(gè)bit傳輸需要104.167us,那么一般我們會(huì)采用104.167us/2的來設(shè)置定時(shí)時(shí)間進(jìn)行后續(xù)電平的獲取,如下圖所示:

34d965cc-8ecb-11eb-8b86-12bb97331649.png

分析一下:

然而這樣的方案,在僅僅模擬一個(gè)串口還是比較方便,不過如果模擬多個(gè)串口就需要多個(gè)定時(shí)器,這樣實(shí)在是太浪費(fèi)資源了。

那么是否用一個(gè)定時(shí)器就能搞定呢?很多小伙伴可能會(huì)說:我直接開一個(gè)bit周期的定時(shí)器不斷的定時(shí)周期到來進(jìn)行判斷不就可以了嗎?下面我們簡單的看下該辦法的效果。

4

單定時(shí)器法

首先這里實(shí)驗(yàn)一下bit周期定時(shí)法,作者編寫好相應(yīng)的代碼以后,以20ms的速度發(fā)送兩個(gè)字符55,然后讓其回顯的實(shí)驗(yàn)結(jié)果如下:

35294e7a-8ecb-11eb-8b86-12bb97331649.png

我們發(fā)現(xiàn)其存在較高的誤碼問題,其主要的原因還是跟我們之前所說的影響因素有關(guān),如果定時(shí)器中斷到來的時(shí)間剛好位于串口電平跳變附近,那么極有可能會(huì)存在讀取IO口電平錯(cuò)誤問題。

那么所有的問題就歸結(jié)到如何在電平穩(wěn)定的時(shí)候讀取IO口的狀態(tài),那么最直接的辦法就是提高定時(shí)器的中斷頻率,比如1/3bit周期法等等更高的定時(shí)器中斷頻率,如下圖所示1/3bit周期法:

355693ee-8ecb-11eb-8b86-12bb97331649.png

分析一下:

采用1/3bit周期法,其起始位的下降沿一定在1-2之間,如果我們判斷起始位在1位置處,后續(xù)數(shù)據(jù)bit仍然是1位置,還是會(huì)出現(xiàn)之前的不穩(wěn)定因素,所以這里需要調(diào)整讀取IO的位置。

那么采用1/3bit周期法會(huì)在判斷起始bit下降沿的下一個(gè)定時(shí)器周期開始讀取對(duì)應(yīng)的電平,如果在1位置讀取到了第一個(gè)低電平,那么后續(xù)都會(huì)在2位置進(jìn)行數(shù)據(jù)讀取;如果在2位置才讀取到了第一個(gè)低電平,后續(xù)都會(huì)在3位置進(jìn)行數(shù)據(jù)讀取,這樣在2,3位置讀取的數(shù)據(jù)均是處于比較穩(wěn)定的數(shù)據(jù)。

下面是作者采用1/3bit周期法的結(jié)果,該辦法也是大家經(jīng)常選用的。

358a0346-8ecb-11eb-8b86-12bb97331649.png

4

其他方法

對(duì)于一些高端的MCU一般會(huì)有捕獲口,其實(shí)捕獲口有點(diǎn)類似于中斷外部+定時(shí)器的方法,不過其原理是通過計(jì)算每個(gè)相鄰邊沿跳變中間所包含的bit個(gè)數(shù),從而獲得最終的數(shù)據(jù),如下圖所示:

35e2b694-8ecb-11eb-8b86-12bb97331649.png

分析一下:

采用捕獲的辦法不再是采集電平,通過定時(shí)器獲得每個(gè)跳變之間的時(shí)間間隔,然后通過時(shí)間間隔/波特率對(duì)應(yīng)的電平持續(xù)時(shí)間 = 電平個(gè)數(shù),從而最終算出最后的數(shù)據(jù)。

該方案是比較穩(wěn)定的,如果手頭的芯片沒有對(duì)應(yīng)的Capture功能,大家也可以使用外部中斷(注意上升沿和下降沿的處理)+定時(shí)器的方法代替捕獲功能。

5、最后小結(jié)

今天就為大家介紹了幾種IO口模擬UART的方案,對(duì)于IIC,SPI等等都是可以通過IO口進(jìn)行模擬的,所以大家在以后考慮方案成本的時(shí)候可以往軟件上模擬這塊進(jìn)行考慮,其實(shí)今天大家應(yīng)該還有一個(gè)疑問,為什么不采用1/2bit周期法?這個(gè)問題大家先考慮一下,作者今天先休息一下,下篇文章再跟大家好好分析分析,并且采用一種好辦法將它用起來。

原文標(biāo)題:【妙招】一份 " IO口模擬串口 " 獨(dú)門秘籍

文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    456

    文章

    50965

    瀏覽量

    424848
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1555

    瀏覽量

    76679

原文標(biāo)題:【妙招】一份 " IO口模擬串口 " 獨(dú)門秘籍

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電流倒灌揭秘:IO損壞與系統(tǒng)故障的真相

    導(dǎo)讀本期文章將繼續(xù)深入了解電流倒灌,分析嵌入式系統(tǒng)中IO損壞和系統(tǒng)穩(wěn)定性問題的根本原因。在上期的工程筆記中,我們了解了電流倒灌并探討了電流倒灌可能導(dǎo)致的一系列問題,包括IO損壞、系
    的頭像 發(fā)表于 12-11 11:38 ?359次閱讀
    電流倒灌揭秘:<b class='flag-5'>IO</b><b class='flag-5'>口</b>損壞與系統(tǒng)故障的真相

    io串口的區(qū)別 單片機(jī)有多少個(gè)io

    IO串口的區(qū)別 IO,即輸入輸出端口(Input/Output Port),是單片機(jī)或其他微控制器與外部設(shè)備之間進(jìn)行數(shù)據(jù)交換的接口。它
    的頭像 發(fā)表于 10-06 10:06 ?1715次閱讀

    MCU IO的作用和特點(diǎn)

    MCU(微控制器)的IO(Input/Output Port,輸入輸出端口)是單片機(jī)與外界進(jìn)行信息交互的關(guān)鍵接口。這些IO在微控制器的功能實(shí)現(xiàn)中扮演著至關(guān)重要的角色,它們不僅負(fù)責(zé)數(shù)
    的頭像 發(fā)表于 09-30 11:52 ?949次閱讀

    單片機(jī)io一般包含哪幾種狀態(tài)

    單片機(jī)的IO(Input/Output,即輸入輸出端口)通常包含以下幾種狀態(tài),這些狀態(tài)使得單片機(jī)能夠靈活地與外部設(shè)備進(jìn)行數(shù)據(jù)交互和控制。以下是對(duì)這些狀態(tài)的說明: 輸入狀態(tài)(Input State
    的頭像 發(fā)表于 09-14 14:35 ?786次閱讀

    單片機(jī)io怎么配置成輸出口

    單片機(jī)IO配置成輸出口的過程通常涉及對(duì)單片機(jī)內(nèi)部寄存器的操作。不同型號(hào)的單片機(jī)在寄存器配置和編程方式上可能有所不同,但基本原理是相似的。以下是一個(gè)通用的步驟,用于將單片機(jī)IO
    的頭像 發(fā)表于 09-14 14:33 ?880次閱讀

    單片機(jī)io輸出電流多大

    單片機(jī)IO的輸出電流大小會(huì)受到多種因素的影響,包括單片機(jī)的型號(hào)、IO的配置模式以及外部電路的設(shè)計(jì)等。以下是對(duì)單片機(jī)IO
    的頭像 發(fā)表于 09-14 14:29 ?2053次閱讀

    串口IO系列與西門子PLC Modbus RTU連接例程

    MA01-AACX2220為例。二硬件準(zhǔn)備?MA01-AACX2220串口IO設(shè)備一臺(tái);?西門子PLCS7-200smart一臺(tái);?24V電源兩個(gè);?通訊電纜若干;?
    的頭像 發(fā)表于 08-30 12:35 ?350次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>IO</b>系列與西門子PLC Modbus RTU連接例程

    為什么用于接收的IO無法觸發(fā)中斷?

    我的代碼邏輯大概是“串口收到數(shù)據(jù)后控制一個(gè)IO發(fā)出高低電平,用另外一個(gè)IO接收這個(gè)高低電平” 為什么用于接收的
    發(fā)表于 06-25 08:14

    怎樣利用普通的IO模擬串口通訊呢?

    怎樣利用普通的IO模擬串口通訊呢,只用兩根線,一根數(shù)據(jù)線,一根底線
    發(fā)表于 05-15 07:11

    串口屏的幾種安裝方式

    串口屏的幾種安裝方式
    的頭像 發(fā)表于 05-10 11:28 ?1585次閱讀

    請(qǐng)問如何擴(kuò)展單片機(jī)的IO?

    在很多項(xiàng)目上都會(huì)因單片機(jī)的IO不夠、或降低硬件成本要擴(kuò)展IO,特別在一些機(jī)械設(shè)備上,如本人從事的這個(gè)行業(yè),有時(shí)候由一個(gè)單片機(jī)要擴(kuò)展到80個(gè)輸入,80個(gè)輸出,還要有
    發(fā)表于 04-24 06:30

    三菱串口 fx0N編程如何使用?

    1 驅(qū)動(dòng)簡介 三菱F X0N P****LC 使用 自帶的P LC 串口 通訊,默認(rèn)為編程協(xié)議,網(wǎng)關(guān)使用 F X0N 編程 驅(qū)動(dòng),按照下述過程操作即可實(shí)現(xiàn)網(wǎng)關(guān)與PLC直接通訊。 默
    的頭像 發(fā)表于 04-16 11:50 ?705次閱讀
    三菱<b class='flag-5'>串口</b> fx0N編程<b class='flag-5'>口</b>如何使用?

    MCU IO模擬串口幾種方案介紹

    往往這樣的系統(tǒng)集成軟件代碼設(shè)計(jì)相對(duì)比較簡單,基本上是進(jìn)行數(shù)據(jù)收發(fā)或者轉(zhuǎn)發(fā)等等功能,所以也沒有必要選擇非常高性能的控制器,這樣串口的軟件實(shí)現(xiàn)成為了一種需求。
    發(fā)表于 04-07 11:27 ?1417次閱讀
    MCU <b class='flag-5'>IO</b><b class='flag-5'>口</b><b class='flag-5'>模擬</b><b class='flag-5'>串口</b>的<b class='flag-5'>幾種</b>方案介紹

    能否使用普通IO模擬PWM波?該怎么做?

    能否使用普通IO模擬PWM波?該怎么做? 使用普通IO模擬PWM波是一種常見的嵌入式系統(tǒng)應(yīng)用
    的頭像 發(fā)表于 01-15 14:43 ?6456次閱讀

    串口IO設(shè)備與昆侖通態(tài)組態(tài)屏通信

    一案例簡介本案例主要講解MA01系列串口IO設(shè)備與昆侖通態(tài)組態(tài)屏(以下簡稱組態(tài)屏)操作細(xì)則,本文MA01系列以MA01-AACX2240為例,昆侖通態(tài)組態(tài)屏以TPC7062TX為例。二工具準(zhǔn)備1.
    的頭像 發(fā)表于 01-12 08:20 ?868次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>IO</b>設(shè)備與昆侖通態(tài)組態(tài)屏通信
    主站蜘蛛池模板: 国产精品嫩草99AV在线| 秋霞电影网视频一区二区三区| 精品一成人岛国片在线观看| 久久综合给会久久狠狠狠| 欧美在线亚洲综合国产人| 外国xxxx| 在线观看视频国产| 成年人视频在线免费播放| 国产免费内射又粗又爽密桃视频| 久久精品国产在热亚洲完整版| 欧美午夜精品一区二区蜜桃| 袖珍人与大黑人性视频| 2021自产拍在线观看视频| 国产成人高清亚洲一区app| 久久国产精品久久国产精品| 秋霞在线看片无码免费| 亚洲精品拍拍央视网出文| 99在线免费视频| 国内偷拍夫妻av| 欧美一区二区三区不卡免费| 亚洲精品色婷婷在线蜜芽| a一级一片免费观看视频| 国内精品视频在线播放一区| 欧美性爱 成人| 亚洲午夜AV久久久精品影院色戒 | 欧美最猛性xxxxx亚洲精品| 亚洲精品美女久久久久99| 超碰在线视频 免费| 久久精品视频uu| 四虎国产精品高清在线观看| 最新无码国产在线视频9299| 国产免费播放一区二区三区| 妞干网手机免费视频| 亚洲精品久久YY5099| 成年人在线视频免费观看| 久久亚洲免费视频| 小SAO货叫大声点妓女| vagaa哇嘎黄短片| 久久久欧美国产精品人妻噜噜| 无码一区二区三区| WW.国产人妻人伦精品|