在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

RT-Thread低功耗的適配和應(yīng)用

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2022-08-03 10:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

近期 RT-Thread 工程師完成了基于瑞薩CPK-RA2L1 開發(fā)板的BSP適配,支持了GPIO、UARTI2C、SPI、ADCDAC、PWM、CAN、on-chip Flash、Watchdog、RTC等外設(shè)驅(qū)動,并在瑞薩工程師支持下完成電源組件(低功耗LPM)適配,經(jīng)實際測量,芯片在Software Standby階段可達(dá)到的最低平均電流約為0.696uA,本篇筆記記錄低功耗的適配和應(yīng)用。

af36e894-1250-11ed-ba43-dac502259ad0.png

可通過以下鏈接查看RA MCU BSP:

https://github.com/RT-Thread/rt-thread/tree/master/bsp/renesas

瑞薩 RA 系列 MCU 開發(fā)板的 BSP 制作教程

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/RA%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B

在開始介紹低功耗前,先了解一下 RA2L1 MCU 產(chǎn)品群關(guān)鍵特性

  • 48MHz Arm Cortex-M23 CPU內(nèi)核

  • 支持1.6V-5.5V寬范圍工作電壓

  • 超低功耗,提供64μA/MHz工作電流和250nA軟件待機(jī)電流,快速喚醒時間小于5μs

  • 采用瑞薩110nm低功耗工藝,用于運行和睡眠/待機(jī)模式,并且專門為電池驅(qū)動應(yīng)用設(shè)計了特殊掉電模式

  • 靈活的供電模式可實現(xiàn)更低的平均功耗,以滿足多種應(yīng)用需求

  • 集成了新一代創(chuàng)新型電容式觸摸感應(yīng)單元,無需外部元器件,降低BOM成本

  • 通過高精度(1.0%)高速振蕩器溫度傳感器和多種供電接口端口等片上外圍功能降低系統(tǒng)成本

  • 后臺運行的數(shù)據(jù)閃存,支持一百萬次擦除/編程循環(huán)

  • 采用LQFP封裝,產(chǎn)品涵蓋48引腳至100引腳封裝

低功耗基礎(chǔ)

低功耗的本質(zhì)是系統(tǒng)空閑時 CPU 停止工作,中斷或事件喚醒后繼續(xù)工作。在 RTOS 中,通常包含一個 IDLE 任務(wù),該任務(wù)的優(yōu)先級最低且一直保持就緒狀態(tài),當(dāng)高優(yōu)先級任務(wù)未就緒時,OS 執(zhí)行 IDLE 任務(wù)。一般地,未進(jìn)行低功耗處理時,CPU 在 IDLE 任務(wù)中循環(huán)執(zhí)行空指令。RT-Thread 的電源管理組件在 IDLE 任務(wù)中,通過對 CPU 、時鐘和設(shè)備等進(jìn)行管理,從而有效降低系統(tǒng)的功耗。

af5780a4-1250-11ed-ba43-dac502259ad0.png

在上圖所示,當(dāng)高優(yōu)先級任務(wù)運行結(jié)束或被掛起時,系統(tǒng)將進(jìn)入 IDLE 任務(wù)中。在 IDLE 任務(wù)執(zhí)行后,它將判斷系統(tǒng)是否可以進(jìn)入到休眠狀態(tài)(以節(jié)省功耗)。如果可以進(jìn)入休眠, 將根據(jù)芯片情況關(guān)閉部分硬件模塊,OS Tick 也非常有可能進(jìn)入暫停狀態(tài)。此時電源管理框架會根據(jù)系統(tǒng)定時器情況,計算出下一個超時時間點,并設(shè)置低功耗定時器,讓設(shè)備能夠在這個時刻點喚醒,并進(jìn)行后續(xù)的工作。當(dāng)系統(tǒng)被(低功耗定時器中斷或其他喚醒中斷源)喚醒后,系統(tǒng)也需要知道睡眠時間長度是多少,并對OS Tick 進(jìn)行補(bǔ)償,讓系統(tǒng)的OS tick值調(diào)整為一個正確的值。

PM組件

PM組件是RT-Thread系統(tǒng)中針對電源管理而設(shè)計的基礎(chǔ)功能組件, 組件采用分層設(shè)計思想,分離架構(gòu)和芯片相關(guān)的部分,提取公共部分作為核心。支持多種運行模式和休眠模式的管理切換,以及低功耗定時器的管理。

PM 組件有以下特點:

  • PM 組件是基于模式來管理功耗

  • PM 組件可以根據(jù)模式自動更新設(shè)備的頻率配置,確保在不同的運行模式都可以正常工作

  • PM 組件可以根據(jù)模式自動管理設(shè)備的掛起和恢復(fù),確保在不同的休眠模式下可以正確的掛起和恢復(fù)

  • PM 組件支持可選的休眠時間補(bǔ)償,讓依賴 OS Tick 的應(yīng)用可以透明使用

  • PM 組件向上層提供設(shè)備接口,如果使用了設(shè)備文件系統(tǒng)組件,那么也可以用文件系統(tǒng)接口來訪問

PM組件支持的休眠模式有

af701812-1250-11ed-ba43-dac502259ad0.png

RA系列LPM功能

RA2 MCU支持的LPM類型有:

  • Sleep mode

  • Software Standby mode

  • Snooze mode

af9b87f4-1250-11ed-ba43-dac502259ad0.png

低功耗模式轉(zhuǎn)換和觸發(fā)源如圖所示:

afd444b8-1250-11ed-ba43-dac502259ad0.png

不同模式間的切換如圖所示,從圖中也可以看出三種模式的功耗關(guān)系是Sleep>Snooze>Standby。

RA2芯片的休眠模式對應(yīng)PM組件的模式關(guān)系:

afeffaa0-1250-11ed-ba43-dac502259ad0.png

配置LPM功能

要使用RA2系列芯片的LPM功能,需要進(jìn)入bsp enesas a2l1-cpk目錄。

  • 在menuconfig中使能LPM驅(qū)動,并勾選要開啟的休眠模式,然后保存配置,生成MDK5工程。

afff65a8-1250-11ed-ba43-dac502259ad0.png

  • 打開PM組件和驅(qū)動后,需要增加idle的線程棧大小,可改為1024。

    b015a8ea-1250-11ed-ba43-dac502259ad0.png

  • 打開生成的MDK5工程project.uvprojx,然后打開FSP配置工具添加LPM相關(guān)配置。下圖是需要添加的stack,包括三種LPM模式的配置以及低功耗定時器AGT1。

b0268ee4-1250-11ed-ba43-dac502259ad0.png

  • 創(chuàng)建LPM如下圖所示新建r_lpm,需要根據(jù)使用的模式進(jìn)行配置且不同模式要創(chuàng)建不同的r_lpm。下面將分別介紹三種不同模式的配置,創(chuàng)建步驟就不再贅述。

b047ac0a-1250-11ed-ba43-dac502259ad0.png

Sleep mode休眠模式

創(chuàng)建出r_lpm后需要修改Name和Low Power Mode這兩個配置項。Name需要改為g_lpm_sleep,因為在驅(qū)動文件中已經(jīng)定義了sleep模式對應(yīng)的stack名稱。Low Power Mode選擇Sleep mode即可。

b0719010-1250-11ed-ba43-dac502259ad0.png

Standby mode軟件待機(jī)模式

Name需要改為g_lpm_sw_standby。Low Power Mode選擇Software Standby mode即可。

另外在此模式下還需要配置喚醒MCU的中斷源,因為會使用到AGT1做為低功耗定時器所以AGT1的中斷需要勾選。如果在應(yīng)用中還需要其他中斷源在此模式下喚醒MCU,則勾選對應(yīng)選項即可。

b0966a3e-1250-11ed-ba43-dac502259ad0.png

Snooze mode小睡模式

Name需要改為g_lpm_sw_standby_with_snooze。Low Power Mode選擇Snooze mode即可。

另外在此模式下同樣要配置喚醒MCU的中斷源,因為會使用到AGT1做為低功耗定時器所以AGT1的中斷需要勾選。如果在應(yīng)用中還需要其他中斷源在此模式下喚醒MCU,則勾選對應(yīng)選項即可。

b0b436a4-1250-11ed-ba43-dac502259ad0.png

AGT1低功耗定時器

在驅(qū)動中使用了MCU的AGT1做為PM組件的低功耗定時器,用于在休眠狀態(tài)下的系統(tǒng)時鐘補(bǔ)償。

b0d11742-1250-11ed-ba43-dac502259ad0.png

完成上述配置步驟就已經(jīng)把LPM低功耗模式的相關(guān)配置做完了。然后再根據(jù)應(yīng)用要實現(xiàn)的功能配置其他外設(shè)。

低功耗DEMO

上文介紹了在RT-Thread的RA2L1上怎么配置LPM的不同模式,接下來就用一個小DEMO來驗證下MCU在各種模式下的工作情況。

低功耗DEMO要實現(xiàn)的功能是,在CPK-RA2L1開發(fā)板上用S1按鈕切換不同的低功耗模式,并在msh中打印出模式切換的提示信息。要實現(xiàn)這個功能需要在剛才的基礎(chǔ)上添加一個低功耗的喚醒源。

添加配置

  • 創(chuàng)建IRQ中斷,IRQ中斷選擇通道3,詳細(xì)配置如下。

    b0ef415e-1250-11ed-ba43-dac502259ad0.png

    b1039686-1250-11ed-ba43-dac502259ad0.png

b12c1188-1250-11ed-ba43-dac502259ad0.png

  • 在剛才的Snooze和Standby模式的配置里添加IRQ3的喚醒源

    b147c8c4-1250-11ed-ba43-dac502259ad0.png

    b1683d16-1250-11ed-ba43-dac502259ad0.png

    b17a32aa-1250-11ed-ba43-dac502259ad0.png

  • 然后保存并生成配置代碼。

添加測試代碼

#include 
#ifdef BSP_USING_LPM#include #include #include 
#define WAKEUP_APP_THREAD_STACK_SIZE        512#define WAKEUP_APP__THREAD_PRIORITY         RT_THREAD_PRIORITY_MAX / 3#define WAKEUP_EVENT_BUTTON                 (1 << 0)
static rt_event_t wakeup_event;
#define USER_INPUT  "P004"#define LED2_PIN    "P501" /* Onboard LED pins */
void rt_lptimer_init(rt_lptimer_t  timer,                   const char *name,                   void (*timeout)(void *parameter),                   void       *parameter,                   rt_tick_t   time,                   rt_uint8_t  flag);
rt_err_t rt_lptimer_detach(rt_lptimer_t timer);rt_err_t rt_lptimer_start(rt_lptimer_t timer);rt_err_t rt_lptimer_stop(rt_lptimer_t timer);
rt_err_t rt_lptimer_control(rt_lptimer_t timer, int cmd, void *arg);
static struct rt_lptimer lptimer; 
static void timeout_cb(void *parameter){    rt_interrupt_enter();    rt_kprintf("
 lptimer callback 
");    rt_interrupt_leave();}
static void lptimer_init(void){    rt_lptimer_init(&lptimer,                    "lpm",                    timeout_cb,                    (void*)&wakeup_event,                    1000,                    RT_TIMER_FLAG_PERIODIC);}
static void lptimer_stop(void){    rt_lptimer_stop(&lptimer);}
static void lptimer_start(void){    rt_lptimer_start(&lptimer);}
static void led_app(void){    static uint8_t key_status = 0x00;    rt_uint32_t led2_pin = rt_pin_get(LED2_PIN);
    rt_pin_write(led2_pin, PIN_HIGH);    switch(key_status%4)    {    case 0:/* IDLE */    lptimer_stop();        rt_pm_release(PM_SLEEP_MODE_NONE);        rt_kprintf("	request:IDLE
");        rt_pm_request(PM_SLEEP_MODE_IDLE);        break;    case 1:/* DEEP */    lptimer_stop();    lptimer_start();        rt_pm_release(PM_SLEEP_MODE_IDLE);        rt_kprintf("	request:DEEP
");        rt_pm_request(PM_SLEEP_MODE_DEEP);        break;    case 2:/* STANDBY */    lptimer_stop();    lptimer_start();        rt_pm_release(PM_SLEEP_MODE_DEEP);        rt_kprintf("	request:STANDBY
");        rt_pm_request(PM_SLEEP_MODE_STANDBY);        break;    case 3:/* NONE */    lptimer_stop();        rt_pm_release(PM_SLEEP_MODE_STANDBY);        rt_kprintf("	request:NONE
");        rt_pm_request(PM_SLEEP_MODE_NONE);        break;    default:        break;    }
    key_status++;    rt_pin_write(led2_pin, PIN_LOW);}
static void wakeup_callback(void* p){    rt_event_send(wakeup_event, WAKEUP_EVENT_BUTTON);}
void wakeup_sample(void){    /* init */    rt_uint32_t pin = rt_pin_get(USER_INPUT);    rt_kprintf("
 pin number : 0x%04X 
", pin);    rt_err_t err = rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, wakeup_callback, RT_NULL);    if (RT_EOK != err)    {        rt_kprintf("
 attach irq failed. 
");    }    err = rt_pin_irq_enable(pin, PIN_IRQ_ENABLE);    if (RT_EOK != err)    {        rt_kprintf("
 enable irq failed. 
");    }}
static void wakeup_init(void){    wakeup_event = rt_event_create("wakup", RT_IPC_FLAG_FIFO);    RT_ASSERT(wakeup_event != RT_NULL);    wakeup_sample();}
static void pm_mode_init(void){    rt_pm_release_all(RT_PM_DEFAULT_SLEEP_MODE);    rt_pm_request(PM_SLEEP_MODE_NONE);}
void pm_test_entry(void* para){    /* 喚醒回調(diào)函數(shù)初始化 */  wakeup_init();
    /* 電源管理初始化 */    pm_mode_init();
  lptimer_init();
    while (1)    {        /* 等待喚醒事件 */        if (rt_event_recv(wakeup_event,                            WAKEUP_EVENT_BUTTON,                            RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR,                            RT_WAITING_FOREVER, RT_NULL) == RT_EOK)        {            led_app();        }    }}
int pm_test(void){
    rt_thread_t tid = rt_thread_create(            "pmtest",pm_test_entry,RT_NULL,512,10,10);    if(tid)        rt_thread_startup(tid);
    return 0;}MSH_CMD_EXPORT(pm_test, pm_test);// INIT_APP_EXPORT(pm_test);#endif

將DEMO代碼加入到工程中,可以直接添加到hal_entry.c或新建一個源文件。

測試驗證

然后編譯下載。開發(fā)板連接串口工具,輸入pm_test命令啟動測試DEMO。

按下S1按鈕切換工作模式,在DEEP、STANDBY模式下會啟動低功耗定時器,當(dāng)定時喚醒后會打印出回調(diào)接口的提示信息。

b19b43a0-1250-11ed-ba43-dac502259ad0.png

經(jīng)測試:

1)串口通中輸入“pm_test”,觀測到電流在8.6mA5.8mA之間變化。

2)按下S1后,串口通中打印信息為“requestIDLE”,此時電流約為2.2mA

3)再次按下S1后,串口通中打印信息為“requestDEEP”,此時電流約為1593uA,并間隔產(chǎn)生lptimer中斷。

4)再次按下S1后,串口通中打印信息為“requestSTANDBY”,此時電流約為2.4uA,并間隔產(chǎn)生lptimer中斷。

5)再次按下S1后,串口通中打印信息為“requestNONE”,恢復(fù)為(1)的電流值,然后可循環(huán)執(zhí)行此流程。

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

    關(guān)注

    146

    文章

    17920

    瀏覽量

    362903
  • 瑞薩
    +關(guān)注

    關(guān)注

    36

    文章

    22376

    瀏覽量

    87898
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1387

    瀏覽量

    41703

原文標(biāo)題:基于瑞薩 RA2L1 MCU 的RT-Thread 低功耗應(yīng)用筆記

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程)

    在前面我們RT-Thread Studio工程基礎(chǔ)之上講一講RT-Thread內(nèi)核啟動流程.
    的頭像 發(fā)表于 06-20 00:30 ?5615次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內(nèi)核啟動流程)

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發(fā)組(2015-03-31)。RT-Thread做為國內(nèi)有較大影響力的開源實時操作系統(tǒng),本文是RT-Thread實時操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導(dǎo)在RT-Thread實時操作系統(tǒng)環(huán)境下如何進(jìn)行編 程。
    發(fā)表于 11-26 16:16 ?0次下載

    STM32超低功耗之移植 RT-Thread PM 組件原理分析

    一, 認(rèn)識 PM 組件在上一篇的文章中,介紹了如何移植 RT-Thread PM 組件,PM 組件的作用是通過 RTOS 來統(tǒng)一的管理,超低功耗是一個細(xì)致的工作,所以在使用的時候必須要知道 PM
    發(fā)表于 12-31 18:59 ?2次下載
    STM32超<b class='flag-5'>低功耗</b>之移植 <b class='flag-5'>RT-Thread</b> PM 組件原理分析

    RT-Thread全球技術(shù)大會:螢石研發(fā)團(tuán)隊使用RT-Thread的技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會:研發(fā)團(tuán)隊使用RT-Thread的技術(shù)挑戰(zhàn) ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 11:36 ?1546次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:螢石研發(fā)團(tuán)隊使用<b class='flag-5'>RT-Thread</b>的技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機(jī)制

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1832次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機(jī)制

    RT-Thread全球技術(shù)大會:關(guān)于瑞薩RA2L1-CPK低功耗CPU演示

    RT-Thread全球技術(shù)大會:關(guān)于瑞薩RA2L1-CPK低功耗CPU演示 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 15:23 ?1639次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:關(guān)于瑞薩RA2L1-CPK<b class='flag-5'>低功耗</b>CPU演示

    RT-Thread全球技術(shù)大會:在RT-Thread上編寫測試用例

    RT-Thread全球技術(shù)大會:在RT-Thread上編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:28 ?1735次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:在<b class='flag-5'>RT-Thread</b>上編寫測試用例

    RT-Thread全球技術(shù)大會:RT-Thread測試用例集合案例

    RT-Thread全球技術(shù)大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2374次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡介 作為一名 RTOS 的初學(xué)者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4977次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?10次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?5172次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?1906次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布
    主站蜘蛛池模板: 久久久精品久久久久久久久久久 | 亚洲一区亚洲二区 | h黄色| 四虎影片国产精品8848 | 痴女在线播放免费视频 | 日本免费观看网站 | 天天色色网 | 欧美人成绝费网站色www吃脚 | 在线观看jyzzjyzz | 国产呦系列呦交 | 男女艹逼软件 | 午夜激情小视频 | 欧美一级片免费观看 | 久久午夜影院 | 日韩特级 | 国产激情在线观看 | 中文久草| 性欧美www| a级黄视频 | 32pao强力打造免费高速高清 | 亚洲毛片免费在线观看 | wwxxx日本| 夜夜嘿视频免费看 | 人人干人人舔 | 久操久操 | 韩漫免费网站无遮挡羞羞漫画 | 国模论坛 | 四虎影永久在线观看网址 | 日本x色视频 | 人人干人人爱 | 日本三级黄色网址 | 在线你懂的视频 | 午夜日韩在线 | 手机看片福利盒子久久 | 成人做视频免费 | www.91久久| 日本免费一区视频 | 男人日女人视频在线观看 | 国产美女视频免费 | www婷婷| 影音先锋午夜资源网站 |