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

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

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

3天內不再提示

物聯網硬件設計時IO不夠用?IO擴展芯片的使用

jf_94171069 ? 來源:jf_94171069 ? 作者:jf_94171069 ? 2024-09-29 14:10 ? 次閱讀

一 概述

XL9535是一款24引腳CMOS器件,通過I2C總線/SMBus接口 串行時鐘線(SCL)、串行數據(SDA)為大多數微控制器系列提供16位通用并行輸入/輸出(GPIO)擴展。這些設備設計用于2.3-V至5.5-V Vcc操作。這些改進包括更高的驅動能力、5V I/O容差、更低的電源電流、單獨的I/O配置和更小的封裝。 通電時,I/O被配置為輸入。系統主機可以通過寫入I/O配置位來啟用I/O作為輸入或輸出。每個輸入或輸出的數據都保存在相應的輸入或輸出寄存器中。輸入端口寄存器的極性可以用極性反轉寄存器反轉。所有寄存器均可由系統主控器讀取。 當任何輸入狀態與其對應的輸入端口寄存器狀態不同時,這些設備開漏中斷(/INT)輸出被激活,并用于向系統主機指示輸入狀態已改變。在超時或其他不當操作的情況下,系統主設備可以利用上電重置功能重置這些設備。通電重置將寄存器設置為默認值,并初始化I2C/SMBus狀態機。三個硬件引腳(A0、A1和A2)改變固定的I2C總線地址,并允許多達八個設備共享同一I2C總線/SMBus。

二 特性

I2C總線至16位GPIO擴展器

工作電源電壓范圍為2.3 V至5.5 V

低待機電流消耗

5 V容錯I/O端口

400 kHz快速模式I2C總線時鐘頻率

SCL/SDA輸入上的噪聲濾波器

內部通電復位

通電時無故障

極性反轉寄存器

開漏有源低中斷輸出

16個I/O引腳,默認為16個輸入

三 引腳配置和功能

wKgZombztCCAKtW4AAJybxJ7opk654.jpg

wKgaombztCGAQaGQAAHFtrmLsyg144.jpg

四 功能框圖

wKgZombztCKALC_7AAD_hu4EAhQ700.jpg

五 XL9535組件的使用

1 Gitee鏈接地址

Demo位于amaziot_bloom_os_sdksample3rd1.0_XL9535

Gitee源碼地址:https://gitee.com/ning./hongdou

Github源碼地址:https://github.com/ayumid/hongdou

編譯指令:.build.bat -l .amaziot_bloom_os_sdksample3rd1.0_XL9535

2 組件功能介紹

驅動XL9535芯片,實現輸入IO檢測

3 代碼講解

1 drv_xl9535_i2c_init

功能:該函數用于,將發送數據長度寫入xl9535寄存器。

參數:五

返回值:無

示例:

//初始化i2c總線
ret = drv_xl9535_i2c_init();

2 drv_xl9535_i2c_read

功能:該函數用于,讀取I2C從機。

參數:五

返回值:無

示例:

RegAddr       = 0x00;
ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);

3 drv_xl9535_i2c_write

功能:該函數用于,發送數據到I2C從機。

參數:五

返回值:無

示例:

RegAddr       = 0x06;
RegWriteValue = 0xFF;
ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);

4 Demo實戰

4.1 概述

上電后,按下按鍵,串口會打印出按下了哪一個按鍵

4.2 測試

測試步驟:

參考編譯教程,和文檔開頭的編譯指令,進行編譯

按照編譯教程選擇對應的選項

燒錄

4.3 宏定義介紹

sample_xl9535_uart_printf

輸出日志到DEBUG 串口,日志比較少,可以輸出到這個串口,如果日志比較多,需要輸出到usb口,以免不必要的問題出現

sample_xl9535_catstudio_printf

輸出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新對應版本mdb.txt文件,軟件打開filtter過濾日志,只查看用戶輸出的日志

SAMPLE_XL9535_STACK_SIZE

棧空間宏定義

4.4 全局變量介紹

sample_xl9535_int_detect_stack_ptr

任務棧空間,本例使用數組實現,用戶在做項目時,可以預先估算下當先任務需要的大致棧空間,OS沒有提供可以查看棧空間使用情況的API

sample_xl9535_int_detect_task_ref

任務指針

4.5 函數介紹

Phase1Inits_enter

底層初始化,本例空

Phase1Inits_exit

底層初始化,本例空

Phase2Inits_enter

底層初始化,本例空

Phase2Inits_exit

創建主任務,初始化INT 引腳

代碼片段:

int ret = 0;
GPIOConfiguration config = {0};

//創建定時器
OSATimerCreate(&sample_xl9535_int_detect_timer_ref);
//創建中斷事件
OSAFlagCreate( &sample_xl9535_int_detect_flg_ref);  
Os_Create_HISR(&sample_xl9535_int_detect_hisr, "sample_xl9535_int_detect_hisr", sample_xl9535_detect_handler, 2);
//創建中斷處理任務
OSATaskCreate(&sample_xl9535_int_detect_task_ref, sample_xl9535_int_detect_stack_ptr, SAMPLE_XL9535_STACK_SIZE, 100, "detect_task", sample_xl9535_detect_task, NULL);

//初始化int引腳,這里使用70腳 gpio126
config.pinDir = GPIO_IN_PIN;
config.pinEd = GPIO_RISE_EDGE;
config.pinPull = GPIO_PULLUP_ENABLE;
config.isr = sample_xl9535_irq_handler;
GpioInitConfiguration(SAMPLE_GPIO_ISR_PIN_NUM, config);

sample_xl9535_detect_task

主任務,代碼發分為兩部分,一部分是發送不定長數據;另一部分是上電后等待其它模塊發送的數據,收到后打印到串口。

代碼片段:

void sample_xl9535_detect_task(void *param)
{
    GPIO_ReturnCode ret = 0;
    UINT32 value = 0;
    OSA_STATUS status = OS_SUCCESS;
    UINT32 flag_value = 0;
    unsigned char RegAddr = 0;
    unsigned char RegWriteValue = 0;
    unsigned char RegReadValue0 = 0;
    unsigned char RegReadValue1 = 0;
    UINT8 down_en = 0;
    UINT8 up_en = 0;
    UINT8 sig_en = 0;
    UINT8 mul_en = 0;
    UINT8 read_en = 0;
    UINT8 de_en = 0;
    UINT8 ck_en = 0;
    UINT8 sim_en = 0;
    UINT8 gnss_en = 0;
    UINT8 nb_en = 0;
    UINT8 fourg_en = 0;

    //初始化i2c總線
    ret = drv_xl9535_i2c_init();
    sample_xl9535_catstudio_printf("ql_i2c_init ret %d", ret);

    //上電后,讀xl9535 io擴展芯片的8個寄存器,測試用
    RegAddr       = 0x00;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x01;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x02;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 02 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x03;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 03 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x04;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 04 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x05;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 05 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x06;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 06 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x07;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 07 i2c value=0x%x, ret=%dn", RegReadValue0, ret);

    //等1s
    OSATaskSleep(1 * 200);

    //初始化xl0535 io擴展芯片的06 07寄存器,設置所有的io都是輸入
    RegAddr       = 0x06;
    RegWriteValue = 0xFF;
    ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);
    RegAddr       = 0x07;
    RegWriteValue = 0xFF;
    ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);
    
    while(1)
    {
//        sample_xl9535_catstudio_printf("sample_xl9535_detect_taskrn");
        status = OSAFlagWait(sample_xl9535_int_detect_flg_ref, 0x01, OSA_FLAG_OR_CLEAR, &flag_value, OSA_SUSPEND);

        //紅豆版,設置了邊沿,但是還是會上升沿,下降沿都觸發,所以會執行兩次
        if(flag_value & 0x01)
        {
            RegAddr       = 0x00;
            //ret = ql_i2c_read(i2c_no, SAMPLE_I2C_SLAVE_ADDR, RegAddr, &RegReadValue0, 1);
            ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
//            sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
            RegAddr       = 0x01;
            //ret = ql_i2c_read(i2c_no, SAMPLE_I2C_SLAVE_ADDR, RegAddr, &RegReadValue0, 1);
            ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue1);
//            sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%dn", RegReadValue1, ret);

            //寄存器值非默認值,表示有io輸入,否則表示是上升沿中斷
            if(RegReadValue0 != 0xff || RegReadValue1 != 0x07)
            {
                event_ticks = OSAGetTicks();
                int_status = 0;

                //判斷是那個IO這里使用寄存器值判斷,后續可以改為根據位判斷
                if(RegReadValue1 == DRV_XL9535_BUTTON_DOWN_EN)
                {
//                    sample_xl9535_catstudio_printf("down int");
                    down_en = 1;
                }
                else if(RegReadValue1 == DRV_XL9535_BUTTON_UP_EN)
                {
//                    sample_xl9535_catstudio_printf("up int");
                    up_en = 1;
                }
                else if(RegReadValue1 == DRV_XL9535_BUTTON_SIG_EN)
                {
//                    sample_xl9535_catstudio_printf("sig int");
                    sig_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_MUL_EN)
                {
//                    sample_xl9535_catstudio_printf("mul int");
                    mul_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_READ_EN)
                {
//                    sample_xl9535_catstudio_printf("read int");
                    read_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_DE_EN)
                {
//                    sample_xl9535_catstudio_printf("de int");
                    de_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_CK_EN)
                {
//                    sample_xl9535_catstudio_printf("ck int");
                    ck_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_SIM_EN)
                {
//                    sample_xl9535_catstudio_printf("sim int");
                    sim_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_GNSS_EN)
                {
//                    sample_xl9535_catstudio_printf("gnss int");
                    gnss_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_NB_EN)
                {
//                    sample_xl9535_catstudio_printf("nb int");
                    nb_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_4G_EN)
                {
//                    sample_xl9535_catstudio_printf("4g int");
                    fourg_en = 1;
                }
            }
            else
            {
                if(int_status == 0)
                {
                    UINT32 keep_ticks = OSAGetTicks() - event_ticks;
                    
                    if(keep_ticks > 20)
                    {
                        //檢測到某個IO被按下后,可以在這里,或者發送信號,消息等去其它任務執行相應操作
//                        sample_xl9535_catstudio_printf("keep_ticks:%d, event_ticks:%d", keep_ticks, event_ticks);
                        if(down_en == 1)
                        {
                            sample_xl9535_catstudio_printf("down en");
                        }
                        else if(up_en == 1)
                        {
                            sample_xl9535_catstudio_printf("up en");
                        }
                        else if(sig_en == 1)
                        {
                            sample_xl9535_catstudio_printf("sig en");
                        }
                        else if(mul_en == 1)
                        {
                            sample_xl9535_catstudio_printf("mul en");
                        }
                        else if(read_en == 1)
                        {
                            sample_xl9535_catstudio_printf("read en");
                        }
                        else if(de_en == 1)
                        {
                            sample_xl9535_catstudio_printf("de en");
                        }
                        else if(ck_en == 1)
                        {
                            sample_xl9535_catstudio_printf("ck en");
                        }
                        else if(sim_en == 1)
                        {
                            sample_xl9535_catstudio_printf("sim en");
                        }
                        else if(gnss_en == 1)
                        {
                            sample_xl9535_catstudio_printf("gnss en");
                        }
                        else if(nb_en == 1)
                        {
                            sample_xl9535_catstudio_printf("nb en");
                        }
                        else if(fourg_en == 1)
                        {
                            sample_xl9535_catstudio_printf("4g en");
                        }
                    }
                    down_en = 0;
                    up_en = 0;
                    sig_en = 0;
                    mul_en = 0;
                    read_en = 0;
                    de_en = 0;
                    ck_en = 0;
                    sim_en = 0;
                    gnss_en = 0;
                    nb_en = 0;
                    fourg_en = 0;
                }
                int_status = 1;
            }
            
        }
    }
}

4.6 固件

上電后,按下按鍵,串口會打印出按下了哪一個按鍵

wKgZombztCWAVHb9AABMmTPippQ555.jpg

點擊下載 Lora Demo固件

本文章源自奇跡物聯開源的物聯網應用知識庫Cellular IoT Wiki,更多技術干貨歡迎關注收藏Wiki:Cellular IoT Wiki 知識庫(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)

歡迎同學們走進AmazIOT知識庫的世界!

這里是為物聯網人構建的技術應用百科,以便幫助你更快更簡單的開發物聯網產品

Cellular IoT Wiki初心:

在我們長期投身于蜂窩物聯網 ODM/OEM 解決方案的實踐過程中,一直被物聯網技術碎片化與產業資源碎片化的問題所困擾。從產品定義、芯片選型,到軟硬件研發和測試,物聯網技術的碎片化以及產業資源的碎片化,始終對團隊的產品開發交付質量和效率形成制約。為了減少因物聯網碎片化而帶來的重復開發工作,我們著手對物聯網開發中高頻應用的技術知識進行沉淀管理,并基于 Bloom OS 搭建了不同平臺的 RTOS 應用生態。后來我們發現,很多物聯網產品開發團隊都面臨著相似的困擾,于是,我們決定向全體物聯網行業開發者開放奇跡物聯內部沉淀的應用技術知識庫 Wiki,期望能為更多物聯網產品開發者減輕一些重復造輪子的負擔。

Cellular IoT Wiki沉淀的技術內容方向如下:

wKgaombqoM2AYL2RAAQrZ8e-uz8392.jpg

奇跡物聯的業務服務范圍:基于自研的NB-IoT、Cat1、Cat4等物聯網模組,為客戶物聯網ODM/OEM解決方案服務。我們的研發技術中心在石家莊,PCBA生產基地分布在深圳、石家莊、北京三個工廠,滿足不同區域&不同量產規模&不同產品開發階段的生產制造任務。跟傳統PCBA工廠最大的區別是我們只服務物聯網行業客戶。

連接我們,和10000+物聯網開發者一起 降低技術和成本門檻

讓蜂窩物聯網應用更簡單~~

哈哈你終于滑到最重要的模塊了,

千萬不!要!劃!走!忍住沖動!~

歡迎加入飛書“開源技術交流”,隨時找到我們哦~

點擊鏈接如何加入奇跡物聯技術話題群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以獲取加入技術話題群攻略

Hey 物聯網從業者,

你是否有了解過奇跡物聯的官方公眾號“eSIM物聯工場”呢?

這里是奇跡物聯的物聯網應用技術開源wiki主陣地,歡迎關注公眾號,不迷路~

及時獲得最新物聯網應用技術沉淀發布

注:本文部分內容來源于網絡,如有侵權,請及時聯系我們。

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

    關注

    456

    文章

    51019

    瀏覽量

    425366
  • 接口
    +關注

    關注

    33

    文章

    8667

    瀏覽量

    151523
  • 物聯網
    +關注

    關注

    2911

    文章

    44824

    瀏覽量

    375101
收藏 人收藏

    評論

    相關推薦

    ADC實現一個IO上掛多個按鍵

    有時候做設計時,我們會遇到外部按鍵比較多,IO不夠用的情況。這時大部分人會考慮通過其它芯片擴展IO
    發表于 09-01 13:25 ?3032次閱讀

    單片機IO擴展實例

    我們在做單片機的小項目時,經常會碰到IO不夠用的時候,比如控制多個7段數碼管,或者要采集多路AD,要連接多個串口傳感器等等。這時,更換單片機不一定是最好的選擇,使用其他芯片擴展
    發表于 03-27 14:02 ?3653次閱讀
    單片機<b class='flag-5'>IO</b>口<b class='flag-5'>擴展</b>實例

    利用74373芯片進行單片機IO擴展的方法

    在電路設計的某些時候,微處理器(如單片機)IO不夠用了,此時該怎么辦呢?利用輔助芯片進行IO擴展是個簡單直接的方法,能用較少的成本增多
    的頭像 發表于 11-02 14:20 ?2360次閱讀
    利用74373<b class='flag-5'>芯片</b>進行單片機<b class='flag-5'>IO</b>口<b class='flag-5'>擴展</b>的方法

    求圖中IO擴展的程序!

    本帖最后由 herochenzhao 于 2012-10-25 19:37 編輯 最近在做一個項目,發現單片機的IO不夠用,然后得知如上圖可以在節省IO口的情況下進行IO
    發表于 10-25 19:35

    液晶顯示,IO不夠用怎么辦?

    我最近在做一個東西,需要用到3.2英寸的tft屏,但IO不夠用了,只剩下兩個8位IO,但手上的TFT屏都是30針的,請教各位高手該選用什么型號的屏,謝謝啦
    發表于 01-07 09:43

    IO不夠用,有沒有這種擴展IC,8個按鍵對應IO口的值為000-111

    IO不夠用,有沒有這種擴展IC,8個按鍵對應IO口的值為000-111
    發表于 03-31 14:58

    DSP的PWM口不夠用怎么擴展

    如題,DSP的PWM口不夠用,也不合適用定時器做。有沒有那種PWM發生芯片,由DSP通過并行口之類的把占空比信號給到PWM發生芯片芯片產生對應的PWM波形?
    發表于 06-04 14:41

    想用單片機獨立控制100盞呼吸燈 IO不夠用 求解決辦法

    想用單片機獨立控制100盞呼吸燈IO不夠用嘗試過用595聯級太繁復 未成功
    發表于 06-29 11:04

    IO不夠用怎么辦?

    C51單片機————總線與系統擴展Created with Rapha?l 2.1.2張三張三李四李四四哥,IO不夠用怎么辦?你可以進行系統擴展!什么鬼?那是什么東西?。。。看書去1
    發表于 07-19 07:21

    單片機IO口如何擴展

    單片機IO擴展方法1.使用分壓電阻分壓,然后用單片機的ADC端口讀取不同的電壓值。適合應用于多個按鍵的方案,需要多個輸入端口,導致GPIO不夠用的情況。使用串入并出芯片(serial
    發表于 11-18 08:41

    CPLD或FPGA擴展IO口與處理器自帶IO的區別?

    1.處理器上有64個可復用的IO口,我們需要64個IO口,因為是復用的,我么也會用到部分復用功能,所以IO不夠用,有人提出用CPLD或FPGA擴展
    發表于 04-23 14:10

    單片機IO擴展方法

    單片機IO擴展方法1.使用分壓電阻分壓,然后用單片機的ADC端口讀取不同的電壓值。適合應用于多個按鍵的方案,需要多個輸入端口,導致GPIO不夠用的情況。使用串入并出芯片(serial
    發表于 11-11 10:36 ?14次下載
    單片機<b class='flag-5'>IO</b>口<b class='flag-5'>擴展</b>方法

    采用ADC掃描實現一個IO上掛多個按鍵

    有時候做設計時,我們會遇到外部按鍵比較多,IO不夠用的情況。這時大部分人會考慮通過其它芯片擴展IO
    的頭像 發表于 08-11 09:16 ?2442次閱讀
    采用ADC掃描實現一個<b class='flag-5'>IO</b>上掛多個按鍵

    硬件設計如何實現一個IO上掛多個按鍵?

    有時候做設計時,我們會遇到外部按鍵比較多,IO不夠用的情況。這時大部分人會考慮通過其它芯片擴展IO
    發表于 08-11 09:16 ?1320次閱讀
    <b class='flag-5'>硬件</b>設計如何實現一個<b class='flag-5'>IO</b>上掛多個按鍵?

    單片機的IO不夠用了怎么辦?如何擴展單片機的IO口?

    單片機的IO不夠用了怎么辦?如何擴展單片機的IO口? 單片機是應用廣泛的微處理器,其具有較高的可編程性、靈活性和成本效益等優點,在嵌入式系統中得到了廣泛的應用。然而,由于每一個單片機
    的頭像 發表于 10-24 11:49 ?7587次閱讀
    主站蜘蛛池模板: 午夜高清在线| 午夜视频在线看| 欧美福利精品| 男人都懂得网址| 久久亚洲免费视频| 国产一区二区三区四卡| 国产精品情人露脸在线观看| 8050网午夜一级毛片免费不卡 | 热99在线视频| 中韩日欧美电影免费看| 亚洲色图欧美视频| 色色色色网| 久久综合九色综合精品| 国产美女视频一区二区二三区| 越南黄色录像| 中文字幕天堂网| 亚洲综合春色另类久久| 色欧美综合| 久久久夜色精品国产噜噜| 成人99| 天天看天天碰| 色综合小说天天综合网| 成人免费一区二区三区| 亚洲欧美视频一区二区三区| 亚洲综合色婷婷| 欧美污网站| 大量喷潮free| 久久人人干| 午夜免费网址| 深爱激情成人| 国产三级在线观看视频| 天堂中文网| 欧美网站在线| 高清一区二区三区视频| 日韩免费在线视频| 波多野结衣在线免费视频| 人人公开免费超级碰碰碰视频| 欧美激情综合色综合啪啪五月| 亚洲最大黄色网址| 美女艹逼视频| 天堂网www在线资源|