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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹 (5) TIMER 模塊介紹

聚沃科技 ? 2024-08-14 09:47 ? 次閱讀

5.1.TIMER 基礎知識

TIMER分高級定時器,通用定時器L0,L1,L2和基本定時器。

輸入圖片說明

5.2.硬件連接說明

TIMER 屬于片內外設,對于外部硬件設計,只需要單獨IO口外接信號線即可。

5.3.GD32 TIMER 外設原理簡介(以 GD32F30X 的高級定時器為例)

GD32 TIMER 主要特性

? 總通道數: 4;

? 計數器寬度: 16位;

? 定時器時鐘源可選:內部時鐘,內部觸發(fā),外部輸入,外部觸發(fā);

? 多種計數模式:向上計數,向下計數和中央計數;

? 正交編碼器接口:用來追蹤運動和分辨旋轉方向和位置;

? 霍爾傳感器接口:用來做三相電機控制

? 可編程的預分頻器: 16位。運行時可以被改變;

? 每個通道可配置:輸入捕獲模式,輸出比較模式,可編程的PWM模式,單脈沖模式;

? 可編程的死區(qū)時間;

? 自動重裝載功能;

? 可編程的計數器重復功能;

? 中止輸入功能;

? 中斷輸出和DMA請求:更新事件,觸發(fā)事件,比較/捕獲事件和中止事件;

? 多個定時器的菊鏈使得一個定時器可以同時啟動多個定時器;

? 定時器的同步允許被選擇的定時器在同一個時鐘周期開始計數;

? 定時器主/從模式控制器

TIMER 結構框圖介紹

輸入圖片說明

5.4.軟件配置說明

定時中斷 TIMER4

通用定時器L0(TIMER1/2/3/4) 是4通道定時器,支持輸入捕獲,輸出比較,產生PWM信號控制電機和電源管理。通用定時器L0計數器是16位無符號計數器。通用定時器L0是可編程的,可以被用來計數,其外部事件可以驅動其他定時器。

這一章,將使用定時器產生中斷,然后在中斷服務函數里面翻轉 LED上的電平,來指示定時器中斷的產生。接下來我們以通用定時器 TIMER4 為實例,來說明要經過哪些步驟,才能達到這個要 求,并產生中斷。定時器配置步驟如下:

1)TIMER4 時鐘使能

rcu_periph_clock_enable(RCU_TIMER4);

2) 初始化定時器參數,設置自動重裝值,分頻系數,計數方式等

在庫函數中,定時器的初始化參數是通過初始化函數timer_parameter_struct 實現(xiàn)的:

void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara);

第一個參數是確定是哪個定時器,這個比較容易理解。第二個參數是定時器初始化參數結構體指針,結構體類型為timer_parameter_struct ,下面我們看看這個結構體的定義:

/* TIMER init parameter struct definitions */ typedef struct { uint16_t prescaler; /*!

針對 TIMR4 初始化范例代碼格式

timer_initpara.prescaler = 5999; //30M/6000 =500Hz timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 4000-1; //800ms timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_init(TIMER4, &timer_initpara);

對于定時器定時周期的計算,設 TIMER4 的經過總線分頻后得到的時鐘為 30MHz,通過預分頻 5999,得到 TIMER4 每個計 數的時鐘為 1/(30MHz / (5999+1)) =0.2ms,4000 得到的周期為 0.2ms *4000 =800ms

3)設置 TIMER 允許更新中斷

因為我們要使用 TIMER4 的更新中斷,寄存器的相應位便可使能更新中斷。在庫函數里面定時器中斷使能是通過timer_interrupt_enable函數來實現(xiàn)的:

void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt);

第一個參數是選擇定時器號,這個容易理解。

第二個參數非常關鍵,是用來指明我們使能的定時器中斷的類型。

4) TIMER4 中斷優(yōu)先級設置

在定時器中斷使能之后,因為要產生中斷,必不可少的要設置 NVIC 相關寄存器,設置中斷優(yōu)先級。通過nvic_irq_enable 函數實現(xiàn)中斷優(yōu)先級的設置。

針對 TIMR4 初始化范例代碼格式

nvic_irq_enable(TIMER4_IRQn, 1, 1);

5)允許 TIMER工作,也就是使能 TIMER

光配置好定時器還不行,沒有開啟定時器,照樣不能用。我們在配置完后要開啟定時器,在固件庫里面使能定時器的函數是通過timer_enable函數來實現(xiàn)的

void timer_enable(uint32_t timer_periph)

這個函數非常簡單,比如我們要使能TIMER4,方法為:

timer_enable(TIMER4);

6)編寫中斷服務函數

在最后,還是要編寫定時器中斷服務函數,通過該函數來處理定時器產生的相關中斷。中斷產生后,通過狀態(tài)寄存器的值來判斷此次產生的中斷屬于什么類型。然后執(zhí)行相關的操作,我們這里使用的是更新(溢出)中斷,在處理完中斷之后應來清除該中斷標志。

在固件庫函數里面,用來讀取中斷狀態(tài)寄存器的值判斷中斷類型的函數是:

FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt)

該函數的作用是,判斷定時器 TIMER 的中斷類型,并判斷是否發(fā)生中斷。

針對 TIMR4 中斷服務函數范例代碼:

void TIMER4_IRQHandler(void) { if(SET == timer_interrupt_flag_get(TIMER4, TIMER_INT_UP)){ /* clear channel 0 interrupt bit */ timer_interrupt_flag_clear(TIMER4, TIMER_INT_UP); gd_eval_led_toggle(LED2); } }

PWM 輸出 TIMER0

高級定時器(TIMER0和TIMER7)是四通道定時器,支持輸入捕獲和輸出比較。可以產生PWM信號控制電機電源管理。高級定時器含有一個16位無符號計數器。高級定時器是可編程的,可以用來計數,其外部事件可以驅動其他定時器。高級定時器包含了一個死區(qū)時間插入模塊,非常適合電機控制。

本章,我們使用的是 TIMER0的通道0 輸出 PWM(脈沖寬度調制)。

下面我們介紹通過庫函數來配置該功能的步驟:

(1)開啟 TIMER0 和 GPIO 時鐘,配置 PA8復用功能輸出。

rcu_periph_clock_enable(RCU_TIMER0); rcu_periph_clock_enable(RCU_GPIOA); gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);

這里還需要說明一下, 對于定時器通道的引腳關系,引腳的IO口

輸入圖片說明

這里補充說明下關于TIMER的相關GPIO口的命名

TIMERx_CHx : 定時器通道x

TIMERx_CHx_ON :定時器反向通道

TIMERx_BRKIN :剎車引腳

TIMERx_ETI:外部時鐘輸入

(2)初始化 TIMER0 ,設置 TIMER0 的預分頻和周期等參數, ,在上一節(jié)定時器中斷章節(jié)我們已經有講解,這里就不詳細講解,調用的格式為

timer_initpara.prescaler = 5999; timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 4000; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter = 0; timer_init(TIMER0, &timer_initpara);

3)設置 TIMER0_CH0 的 PWM 模式, 使能 TIMER0 的 CH0 輸出。 在庫函數中, PWM 通道設置是通過函數timer_channel_output_config來設置的

void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara)

我們直接來看看結構體timer_oc_parameter_struct的定義:

typedef struct { uint16_t outputstate; /*!< channel output state */ uint16_t outputnstate; /*!< channel complementary output state */ uint16_t ocpolarity; /*!< channel output polarity */ uint16_t ocnpolarity; /*!< channel complementary output polarity */ uint16_t ocidlestate; /*!< idle state of channel output */ uint16_t ocnidlestate; /*!< idle state of channel complementary output */ }timer_oc_parameter_struct;

針對 TIMR0 CH0 初始化范例代碼格式

/* CH0, CH1 and CH2 configuration in PWM mode */ timer_ocinitpara.outputstate = TIMER_CCX_ENABLE; timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE; timer_ocinitpara.ocpolarity = TIMER_OC_POLARITY_HIGH; timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH; timer_ocinitpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW; timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; timer_channel_output_config(TIMER0, TIMER_CH_0, &timer_ocinitpara);

4)設置PWM輸出以及脈沖寬度占空比

timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_0, 2000); timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0); timer_channel_output_shadow_config(TIMER0, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE); timer_primary_output_config(TIMER0,ENABLE);

5)使能 TIMER0

在完成以上設置了之后,我們需要使能 TIMER0。使能 TIMER0 的方法前面已經講解過:

timer_enable(TIMER0);

通過以上 5 個步驟,我們就可以控制 TIMER0的 CH0 輸出 PWM 波了。這里特別提醒一下大家,高級定時器雖然和通用定時器類似,但是高級定時器要想輸出 PWM,必須多額外加一條函數

void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue);

輸入捕獲 TIMER2

通用定時器L0(TIMER1/2/3/4) 是4通道定時器,支持輸入捕獲,輸出比較,產生PWM信號控制電機和電源管理。通用定時器L0計數器是16位無符號計數器。通用定時器L0是可編程的,可以被用來計數,其外部事件可以驅動其他定時器。

本章要實現(xiàn)通過輸入捕獲,來獲取TIMER2_CH0(PA6)上面的下降沿,下面我們介紹庫函數配置上述功能輸入捕獲的步驟:

1)開啟 TIMER2 時鐘,配置 PA6為復用功能,并開啟上拉電阻

rcu_periph_clock_enable(RCU_TIMER2); rcu_periph_clock_enable(RCU_GPIOA); gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_6); //INCUPTURE -TIMER2

跟上一講 PWM 輸出類似,這里我們使用的是定時器2的通道 0,所以我們從對應的數據手冊可以查看到對應的 IO 口為 PA6:

輸入圖片說明

2) 初始化定時器參數,設置自動重裝值, 分頻系數,計數方式等

/* TIMER2 configuration */ timer_initpara.prescaler = 5999; timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 4000; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_init(TIMER2, &timer_initpara);

3)設置 TIMER2 的輸入捕獲參數,開啟輸入捕獲

庫函數是通過 timer_input_capture_config 函數來初始化輸入比較參數的: timer_input_capture_config(TIMER2,TIMER_CH_0,&timer_icinitpara);

同樣,我們來看看參數設置結構體 TIM_ICInitTypeDef 的定義:

typedef struct { uint16_t icpolarity; /*!< channel input polarity */ uint16_t icselection; /*!< channel input mode selection */ uint16_t icprescaler; /*!< channel input capture prescaler */ uint16_t icfilter; /*!< channel input capture filter control */ }timer_ic_parameter_struct;

我們的配置代碼是:

/* initialize TIMER channel input parameter struct */ timer_channel_input_struct_para_init(&timer_icinitpara); /* TIMER2 CH0 input capture configuration */ timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI; timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1; timer_icinitpara.icfilter = 0x0; timer_input_capture_config(TIMER2,TIMER_CH_0,&timer_icinitpara);

4) 使能捕獲中斷和NVIC

timer_interrupt_enable(TIMER2,TIMER_INT_CH0); nvic_irq_enable(TIMER2_IRQn, 1, 1);

5) 編寫中斷服務函數

void TIMER2_IRQHandler(void){……}

6) 使能定時器

timer_enable(TIMER2);

通過以上 6 步設置,定時器 2 的通道 0 就可以開始輸入捕獲了

外部時鐘輸入 TIMER1

通用定時器L0(TIMER1/2/3/4) 是4通道定時器,支持輸入捕獲,輸出比較,產生PWM信號控制電機和電源管理。通用定時器L0計數器是16位無符號計數器。通用定時器L0是可編程的,可以被用來計數,其外部事件可以驅動其他定時器。

本章要實現(xiàn)使用TIMER1 PA0 作為時鐘輸入引腳,配置流程:

(1)使能GPIO,TIMER 時鐘和GPIO口復用配置

rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_AF); rcu_periph_clock_enable(RCU_TIMER1); gpio_init(GPIOA,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_0);

輸入圖片說明

(2)通過查看數據手冊,可以看到TIMER1_CH0_ETI,根據前面所講,是可以支持外部時鐘輸入的。

TIMER的結構體,初始化定時器參數,設置自動重裝值, 分頻系數,計數方式等

//ETI timer_initpara.prescaler = 1; // 2 分頻 timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 65535; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter = 0; timer_init(TIMER1,&timer_initpara); timer_enable(TIMER1);

(3)配置TIMER的時鐘來源和時鐘源處理的配置

timer_input_trigger_source_select(TIMER1,TIMER_SMCFG_TRGSEL_ETIFP); timer_external_clock_mode1_config(TIMER1, TIMER_EXT_TRI_PSC_OFF, TIMER_ETP_RISING, 0);

(4)使能TIMER

timer_enable(TIMER1);

5.5.TIMER 使用注意事項

TIMER 高級定時器 做定時用的時候(使用到UPDAT中斷),在產生中斷之后,高級定時器的其他所有的狀態(tài)標志位會被置位,但是不會置位中斷標志位.

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關注聚沃科技官網

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

    關注

    6039

    文章

    44579

    瀏覽量

    636462
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5081

    瀏覽量

    97706
  • Timer
    +關注

    關注

    1

    文章

    64

    瀏覽量

    12800
  • GD32
    +關注

    關注

    7

    文章

    404

    瀏覽量

    24384
收藏 人收藏

    評論

    相關推薦

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下表 GD32
    的頭像 發(fā)表于 08-21 09:56 ?1215次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(12)FMC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設的寄存器設計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設,基本等同
    發(fā)表于 11-01 06:03

    GD32 MCU原理及固件庫開發(fā)指南》 + 初讀感悟

    GD32 MCU原理固件庫開發(fā)指南這本書內容豐富,囊括了GD32中的所有外設,書中首先介紹了如何使用MDK或IAR軟件搭建
    發(fā)表于 03-31 22:11

    GD32 MCU原理及固件庫開發(fā)指南》+讀后感

    GD32 MCU的電源管理系統(tǒng)及復位、時鐘系統(tǒng)。 第5介紹GD32 MCU的基礎
    發(fā)表于 06-06 21:52

    兆易創(chuàng)新GD32 MCU選型手冊,適用于GD32全系列MCU

    兆易創(chuàng)新GD32MCU選型手冊,適用于GD32全系列MCUGD32MCU選型手冊,適用于GD32全系列MCU
    發(fā)表于 10-19 17:26 ?49次下載

    你了解GD32 MCU的命名規(guī)則嗎

    下面為大家介紹GD32 MCU的通用命名規(guī)則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發(fā)表于 01-13 09:38 ?3732次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規(guī)則嗎

    GD32 MCU的選項字節(jié)是什么?

    GD32 MCU的選項字節(jié)是什么,有什么功能呢?選項字節(jié)被誤篡改如何回復?
    的頭像 發(fā)表于 01-17 09:42 ?1430次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項字節(jié)是什么?

    不同型號的GD32 MCU如何區(qū)分?

    大家是否碰到過以下應用場景:同一套軟件代碼希望跑在不同型號的GD32 MCU中,但有些地方需要根據MCU型號進行調整?或者上位機或其他MCUGD3
    的頭像 發(fā)表于 01-27 09:32 ?1020次閱讀
    不同型號的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區(qū)分?

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:01 ?1294次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:40 ?749次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 16:03 ?1037次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄

    ISP:In System Programing,在系統(tǒng)編程,通過MCU片內的引導程序進行Flash編程。 GD32片內有一個只讀信息塊,用于存放引導裝載程序,引導程序在MCU出廠前就會提前燒錄好
    的頭像 發(fā)表于 08-08 16:20 ?1027次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(1)ISP 燒錄

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(14)RTC 模塊介紹

    GD32 MCU內部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現(xiàn)日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的GD32
    的頭像 發(fā)表于 08-23 09:18 ?509次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(14)RTC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發(fā)表于 08-25 09:24 ?650次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門教程GD32 MCU GPIO 結構與使用注意事項

    本文是專門為基于GD32 MCU開發(fā)的工程設計人員提供,主要介紹了GPIO的功能配置、內部結構以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發(fā)表于 09-07 10:34 ?797次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結構與使用注意事項
    主站蜘蛛池模板: 国产成人精选免费视频| 三级中国免费的| FREE另类老女人| 亚洲AV香蕉一区区二区三区蜜桃| 美国色吧影院| 国产午夜精品片一区二区三区| 97超碰在线视频人人av| 星空无限传媒视频在线观看视频| 欧美ZC0O人与善交的最新章节| 黑人干亚洲人| 国产成人 免费观看| 99视频这里只有精品国产| 一本久道久久综合狠狠躁AV| 首页_亚洲AV色老汉影院| 欧美多人群p刺激交换电影| 九九热只有精品| 国产人妻人伦精品9| 成人午夜剧场| 99久久精品费精品蜜臀AV| 伊人22222| 亚洲免费视频在线| 性美国人xxxxx18| 日韩特黄特色大片免费视频| 女人张开腿让男人桶爽免| 玖玖热视频一区二区人妻| 黑吊大战白xxxxxx| 国产亚洲精品久久久久小| 粉嫩小护士| 成人国产亚洲精品A区天堂蜜臀| 97视频免费观看2区| 中文亚洲大香伊蕉不卡一区| 亚洲午夜无码久久久久蜜臀av| 亚欧免费观看在线观看更新| 四房播播开心五月| 色怕怕| 日韩AV成人无码久久精品老人| 欧美亚洲精品一区二三区8V| 暖暖日本免费播放| 女人18毛片| 欧美性爱 成人| 琪琪SEE色原网色原网站18|