日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SPI概述

Serial Peripheral interface 通用串行外圍設備接口

是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。

SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間。

SPI特點

采用主-從模式(Master-Slave) 的控制方式

SPI 規定了兩個 SPI 設備之間通信必須由主設備 (Master) 來控制次設備 (Slave). 一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備, SPI 協議還規定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock, 沒有 Clock 則 Slave 設備不能正常工作。

而這里的SPI中的時鐘和相位,指的就是SCLk時鐘的特性,即保證主從設備兩者的時鐘的特性一致了,以保證兩者可以正常實現SPI通訊。

采用同步方式(Synchronous)傳輸數據

Master 設備會根據將要交換的數據來產生相應的時鐘脈沖(Clock Pulse), 時鐘脈沖組成了時鐘信號(Clock Signal) , 時鐘信號通過時鐘極性 (CPOL) 和 時鐘相位 (CPHA) 控制著兩個 SPI 設備間何時數據交換以及何時對接收到的數據進行采樣, 來保證數據在兩個設備之間是同步傳輸的.

工作機制

概述

首先看下SPI Data Transfer模塊圖。

上圖只是對 SPI 設備間通信的一個簡單的描述, 下面詳細解釋一下圖中所示的幾個組件(Module):

SSPBUF

Synchronous Serial Port Buffer, 泛指 SPI 設備里面的內部緩沖區, 一般在物理上是以 FIFO 的形式, 保存傳輸過程中的臨時數據;

我們知道, 在每個時鐘周期內, Master 與 Slave 之間交換的數據其實都是 SPI 內部移位寄存器從 SSPBUF 里面拷貝的. 我們可以通過往 SSPBUF 對應的寄存器 (Tx-Data / Rx-Data register) 里讀寫數據, 間接地操控 SPI 設備內部的 SSPBUF。

例如, 在發送數據之前, 我們應該先往 Master 的 Tx-Data 寄存器寫入將要發送出去的數據, 這些數據會被 Master-SSPSR 移位寄存器根據 Bus-Width 自動移入 Master-SSPBUF 里, 然后這些數據又會被 Master-SSPSR 根據 Channel-Width 從 Master-SSPBUF 中移出, 通過 Master-SDO 管腳傳給 Slave-SDI 管腳, Slave-SSPSR 則把從 Slave-SDI 接收到的數據移入 Slave-SSPBUF 里. 與此同時, Slave-SSPBUF 里面的數據根據每次接收數據的大小(Channel-Width), 通過 Slave-SDO 發往 Master-SDI, Master-SSPSR 再把從 Master-SDI 接收的數據移入 Master-SSPBUF.在單次數據傳輸完成之后, 用戶程序可以通過從 Master 設備的 Rx-Data 寄存器讀取 Master 設備數據交換得到的數據。

SSPSR

Synchronous Serial Port Register, 泛指 SPI 設備里面的移位寄存器(Shift Regitser), 它的作用是根據設置好的數據位寬(bit-width) 把數據移入或者移出 SSPBUF;

SSPSR 是 SPI 設備內部的移位寄存器(Shift Register). 它的主要作用是根據 SPI 時鐘信號狀態, 往 SSPBUF 里移入或者移出數據, 每次移動的數據大小由 Bus-Width 以及 Channel-Width 所決定。 Bus-Width 的作用是指定地址總線到 Master 設備之間數據傳輸的單位. 例如, 我們想要往 Master 設備里面的 SSPBUF 寫入 16 Byte 大小的數據: 首先, 給 Master 設備的配置寄存器設置 Bus-Width 為 Byte; 然后往 Master 設備的 Tx-Data 移位寄存器在地址總線的入口寫入數據, 每次寫入 1 Byte 大小的數據(使用 writeb 函數); 寫完 1 Byte 數據之后, Master 設備里面的 Tx-Data 移位寄存器會自動把從地址總線傳來的1 Byte 數據移入 SSPBUF 里; 上述動作一共需要重復執行 16 次。

Channel-Width 的作用是指定 Master 設備與 Slave 設備之間數據傳輸的單位. 與 Bus-Width 相似, Master 設備內部的移位寄存器會依據 Channel-Width 自動地把數據從 Master-SSPBUF 里通過 Master-SDO 管腳搬運到 Slave 設備里的 Slave-SDI 引腳, Slave-SSPSR 再把每次接收的數據移入 Slave-SSPBUF里.通常情況下, Bus-Width 總是會大于或等于 Channel-Width, 這樣能保證不會出現因 Master 與 Slave 之間數據交換的頻率比地址總線與 Master 之間的數據交換頻率要快, 導致 SSPBUF 里面存放的數據為無效數據這樣的情況

Controller

泛指 SPI 設備里面的控制寄存器, 可以通過配置它們來設置 SPI 總線的傳輸模式。 通常情況下, 我們只需要對上圖所描述的四個管腳(pin) 進行編程即可控制整個 SPI 設備之間的數據通信。

Master 設備里面的 Controller 主要通過時鐘信號(Clock Signal)以及片選信號(Slave Select Signal)來控制 Slave 設備. Slave 設備會一直等待, 直到接收到 Master 設備發過來的片選信號, 然后根據時鐘信號來工作。

Master 設備的片選操作必須由程序所實現. 例如: 由程序把 SS/CS 管腳的時鐘信號拉低電平, 完成 SPI 設備數據通信的前期工作; 當程序想讓 SPI 設備結束數據通信時, 再把 SS/CS 管腳上的時鐘信號拉高電平.

SCK

Serial Clock, 主要的作用是 Master 設備往 Slave 設備傳輸時鐘信號, 控制數據交換的時機以及速率;

SS/CS

Slave Select/Chip Select, 用于 Master 設備片選 Slave 設備, 使被選中的 Slave 設備能夠被 Master 設備所訪問。

SDO/MOSI

Serial Data Output/Master Out Slave In, 在 Master 上面也被稱為 Tx-Channel, 作為數據的出口, 主要用于 SPI 設備發送數據。

SDI/MISO

Serial Data Input/Master In Slave Out, 在 Master 上面也被稱為 Rx-Channel, 作為數據的入口, 主要用于SPI 設備接收數據。

SPI 設備在進行通信的過程中, Master 設備和 Slave 設備之間會產生一個數據鏈路回環(Data Loop), 就像上圖所畫的那樣, 通過 SDO 和 SDI 管腳, SSPSR 控制數據移入移出 SSPBUF, Controller 確定 SPI 總線的通信模式, SCK 傳輸時鐘信號。

極性和相位

要想搞清楚SPI的數據傳輸,首先要搞清楚相位和極性的概念,即SPI的極性Polarity和相位Phase。

最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:

  • (1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鐘)極性
  • (2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (時鐘)相位
  • (3) SCK=SCLK=SPI的時鐘
  • (4) Edge=邊沿,即時鐘電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)

對于一個時鐘周期內,有兩個edge,分別稱為:

  • (1)Leading edge=前一個邊沿=第一個邊沿,對于開始電壓是1, 那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;
  • (2)Trailing edge=后一個邊沿=第二個邊沿,對于開始電壓是1, 那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1), 對于開始電壓是0,那么就是1變成0的時候;

本博文采用如下用法:

  • 極性=CPOL
  • 相位=CPHA
  • SCLK=時鐘
  • 第一個邊沿和第二個邊沿
  • CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:

    ble data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">

    CPOL=0,CPHA=0

    脈沖傳輸前和完成后都保持在低電平狀態,所以 CPOL=0,即低電平是空閑時的電平。在第一個邊沿(上升沿)采樣數據,第二個邊沿(下降沿)輸出數據,對應著CPHA=0。

    CPOL=0,CPHA=1

    脈沖傳輸前和完成后都保持在低電平狀態,所以 CPOL=0,即低電平是空閑時的電平。在第二個邊沿(下降沿)采樣數據,第一個邊沿(上升沿)輸出數據,對應著CPHA=1。

    CPOL=1,CPHA=0

    脈沖傳輸前和完成后都保持在高電平狀態,所以 CPOL=1,即高電平是空閑時的電平。在第一個邊沿(下降沿)采樣數據,第二個邊沿(上升沿)輸出數據,對應著CPHA=0。

    CPOL=1,CPHA=1

    脈沖傳輸前和完成后都保持在高電平狀態,所以 CPOL=1,即高電平是空閑時的電平。在第二個邊沿(上升沿)采樣數據,第一個邊沿(下降沿)輸出數據,對應著CPHA=1。

    軟件中如何設置SPI的極性和相位

    SPI分主設備和從設備,兩者通過SPI協議通訊。 而設置SPI的模式,是從設備的模式,決定了主設備的模式。 所以要先去搞懂從設備的SPI是何種模式,然后再將主設備的SPI的模式,設置和從設備相同的模式,即可正常通訊。

    對于從設備的SPI是什么模式,有兩種:

    • (1)固定的,有SPI從設備硬件決定的 SPI從設備,具體是什么模式,相關的datasheet中會有描述,需要自己去datasheet中找到相關的描述,即: 關于SPI從設備,在空閑的時候,是高電平還是低電平,即決定了CPOL是0還是1; 然后再找到關于設備是在上升沿還是下降沿去采樣數據,這樣就是,在定了CPOL的值的前提下,對應著可以推算出CPHA是0還是1了。
    • (2)可配置的,由軟件自己設定 從設備也是一個SPI控制器,4種模式都支持,此時只要自己設置為某種模式即可。 然后知道了從設備的模式后,再去將SPI主設備的模式,設置為和從設備模式一樣即可。 對于如何配置SPI的CPOL和CPHA的話,不多細說,多數都是直接去寫對應的SPI控制器中對應寄存器中的CPOL和CPHA那兩位,寫0或寫1即可。

    數據交換(Data Exchanges)

    SPI只有主模式和從模式之分,沒有讀和寫的說法,因為實質上每次SPI是主從設備在交換數據。也就是說,你發一個數據必然會收到一個數據;你要收一個數據必須也要先發一個數據。

    SPI 設備間的數據傳輸之所以又被稱為數據交換, 是因為 SPI 協議規定一個 SPI 設備不能在數據通信過程中僅僅只充當一個 "發送者(Transmitter)" 或者 "接收者(Receiver)"。 在每個 Clock 周期內, SPI 設備都會發送并接收一個 bit 大小的數據, 相當于該設備有一個 bit 大小的數據被交換了。

    一個 Slave 設備要想能夠接收到 Master 發過來的控制信號, 必須在此之前能夠被 Master 設備進行訪問 (Access)。 所以, Master 設備必須首先通過 SS/CS pin 對 Slave 設備進行片選, 把想要訪問的 Slave 設備選上。 在數據傳輸的過程中, 每次接收到的數據必須在下一次數據傳輸之前被采樣. 如果之前接收到的數據沒有被讀取, 那么這些已經接收完成的數據將有可能會被丟棄, 導致 SPI 物理模塊最終失效。

    因此, 在程序中一般都會在 SPI 傳輸完數據后, 去讀取 SPI 設備里的數據, 即使這些數據(Dummy Data)在我們的程序里是無用的。

    SPI舉例

    下面舉一個例子幫助大家理解。

    SPI是一個環形總線結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數據交換。

    假設下面的8位寄存器裝的是待發送的數據10101010,上升沿發送、下降沿接收、高位先發送。 那么第一個上升沿來的時候 數據將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在 8個時鐘脈沖以后,兩個寄存器的內容互相交換一次。這樣就完成里一個spi時序。

    舉例: 假設主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數據情況演示一遍:假設上升沿發送數據

    這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言的。

    下一步就是把 上面的過程轉為動畫

    請仔細比較下交換后的bit順序。

    了解了SPI協議說明之后,下面我們基于Cortex-A9架構的exynos-4412,講解SPI控制器的使用。

    Cortex-A9 SPI控制器

    硬件設計

    本例是基于FS4412開發板,SPI控制器外接了MCP2515,MCP2515與exynos-4412的硬件連接圖如下圖所示。

    管腳連接說明

    由上圖可知SPI個引腳與SOC的pin連接關系:

    • CS <---------> BUF_BK_LED <---------> GPC1_2
    • SO <---------> BUF_I2C_SDA6 <---------> GPC1_3
    • SI <---------> BUF_I2C_SCL6 <---------> GPC1_4
    • SCK <---------> BUF_GPC1_1 <---------> GPC1_1
    • INT <-------------------------------------------> BUF_GPX0_0
    • MCP2515芯片連接在4412芯片的SPI2上。
    • 中斷連接在GPX0_0上; CS、SO、SI、SCK復用了GPIO引腳GPC1的引腳。

    MCP2515輸出連接SN65HVD230 CAN總線收發器,SN65HVD230是德州儀器公司生產的3.3V CAN收發器。為了節省功耗,縮小電路體積,MCP2515 CAN總線控制器的邏輯電平采用LVTTL,SN65HVD230就是與其配套的收發器。

    Cortex-A9 SPI控制器

    exynos4412 scp中的串行外設接口(SPI)通過各種外設來傳輸串行數據。SPI包括兩個8、16和32位移位寄存器,用于傳輸和接收數據。在SPI傳輸過程中,它同時傳輸(串行移出)和接收(串行移位)數據。

    特性

    • 全雙工
    • 用于Tx/Rx的8/16/32位移位寄存器
    • 支持8位/16位/32位總線接口
    • 支持摩托羅拉SPI協議和National Semiconductor Microwire
    • 兩個獨立的32位寬的發送和接收FIFO:端口0的深度為64,端口1和2中的深度為16
    • 主模式和從模式
    • 接收而不發送操作
    • 發送/接收最高頻率為50 MHz

    SPI的操作

    SPI在Exynos 4412 SCP和外部設備之間傳輸1位串行數據。 Exynos 4412 SCP中的SPI支持CPU或DMA分別同時發送或接收FIFO和雙向傳輸數據。 SPI有兩個信道,即Tx信道和Rx信道。Tx信道有來自Tx的路徑

    FIFO到外部設備。Rx通道有從外部設備到Rx FIFO的路徑。

    CPU(或DMA)必須將數據寫入寄存器SPI_TX_DATA,才能將數據寫入FIFO。寄存器上的數據會自動移動到Tx FIFO。要從Rx FIFO讀取數據,CPU(或DMA)必須訪問寄存器SPI_RX_DATA,數據會自動發送到SPI_RX_DATA寄存器。

    CMU寄存器可以控制SPI的工作頻率。

    操作模式

    SPI有兩種模式,即主模式和從模式。 在主模式下,生成SPICLK并將其傳輸到外部設備。XspiCS#是選擇從機的信號,它指示在設置XspiCS時數據有效低水平。在發送或接收數據包之前,必須將XspiCS設置為低。

    FIFO存取

    SPI支持對fifo的CPU訪問和DMA訪問。 對fifo的CPU訪問和DMA訪問的數據大小從8位、16位或32位數據中選擇。當它選擇8位數據大小時,有效位是0到7比特。用戶可以定義觸發閾值來引發CPU中斷。端口0中每個FIFO的觸發電平由從0到252字節的步進為4個字節,端口1中每個FIFO的字節從0到63字節按1個字節的步長設置。 SPI_MODE_CFG寄存器的TxDMAOn或RxDMAOn位必須設置為使用DMA訪問。DMA訪問支持只有單次傳輸和4突發傳輸。在Tx FIFO中,DMA請求信號是高的,直到Tx FIFO滿為止。在Rx FIFO中,如果FIFO不為空,DMA請求信號高。

    片選控制

    芯片選擇XspiCS是激活的低信號。換句話說,當XspiCS輸入為0時,選擇芯片。 您可以自動或手動控制XspiCS。不需要改變。 手動模式 當您使用手動控制模式時,您應清除AUTO_N_MANUAL(默認值為0)。NSSOUT位控制XspiCS級別。 自動模式 使用自動控制模式時,必須將AUTO_N_MANUAL設置為1。XspiCS在數據包和自動打包。NCS_TIME_COUNT 控制XspiCS的非激活期。NSSOUT在此時不可用。

    SPI寄存器說明

    配置寄存器CH_CFGn

    【bit:5】 軟件復位的時候必須先將此位設置為1,給一個延時后再設置為0; 【bit:4】 設置SPI端口是主機還是從機,0:主機,1:從機; 【bit:2-3】設置相位和極性; 【bit:1】接收數據的通道使能位; 【bit:0】發送數據的通道使能位。

    數據寬度寄存器MODE_CFGn

    設置總線數據寬度,一般設置為1個字節。

    片選寄存器CS_REGn

    只有NSSOUT 拉低,才會進行數據的傳輸

    移位寄存器狀態寄存器SPI_STATUSn

    發送操作開始,如果移位寄存器空了,該值置1,通過該值判斷數據是否發送出去。

    發送緩沖寄存器SPI_TX_DATA

    接收緩沖寄存器SPI_RX_DATA

    SPI初始化流程

  • 設置GPIO引腳為SPI模式;
  • 設置clock;
  • 軟件復位;
  • 設置CPOL CPHA 為 00 模式,并設置為主機模式;
  • 設置數據位;
  • 片選。
  • 1. 設置GPIO引腳為SPI模式

    因為CS、SO、SI、SCK復用了GPIO引腳GPC1的引腳。首先需要設置GPIO引腳為SPI模式。

    如上所示,該寄存器設置方式如下:

    GPC1.CON = (GPC1.CON & ~0xffff0) | 0x55550;//設置IO引腳為SPI模式

    Step 1 設置CPOL CPHA 為 00 模式

    SPI2.CH_CFG&=~((0x1<< 4)|(0x1<<3)|(0x1<< 2)|0x3);

    //master mode, CPOL = 0, CPHA = 0 (Format A)

    2 設置clock

    時鐘的設置需要依賴鎖相環(PLL)時鐘產生器。

    從30.2.1節可知,時鐘配置需要參考CMU這一章。

    由上圖可知SPI 的clock源是SCLK_SPI。

    搜索SCLK_SPI

    從第七章搜所有的SPI

    繼續搜索

    由此可知SPI0~2的之中受CLKMPLL_USER_T 控制,繼續搜索。 而此時鐘位于寄存器CLK_SRC_PERIL1的bit[27:24]。

    繼續搜索SPI2。

    搜索到CLK_SRC_MASK_PERIL1、CLK_DIV_PERIL2。 可知寄存器CLK_SRC_MASK_PERIL1默認是打開的,所以不用設置。 CLK_DIV_PERIL2用來設置SPI2分頻的,于是寄存器設置如下:

    CLK_SRC_PERIL1 = (CLK_SRC_PERIL1 & ~(0xF<<24)) | 6<<24; // 0x6: 0110 = SCLKMPLL_USER_T 800Mhz CLK_DIV_PERIL2 = 19 <<8 | 3;//SPI_CLK = 800/(19+1)/(3+1)

    3. 軟件復位

    void soft_reset(void) { SPI2.CH_CFG |= 0x1 << 5;delay(1); //延時SPI2.CH_CFG &= ~(0x1 << 5); }

    4. 設置CPOL CPHA 為 00 模式,并設置為主機模式

    SPI2.CH_CFG &= ~( (0x1 << 4) | (0x1 << 3) | (0x1 << 2) | 0x3);

    5. 設置數據位MODE_CFG

    SPI2.MODE_CFG &= ~((0x3 << 17) | (0x3 << 29));//BUS_WIDTH=8bit,CH_WIDTH=8bit

    6. 片選

    SPI2.CS_REG &= ~(0x1 << 1); //選擇手動選擇芯片

    初始化搞定后,下面我們來看如何利用SPI收發數據。

    收發數據流程

    收發數據流程如下:

  • spi復位
  • 片選從機
  • 收發數據
  • 取消片選
  • 【注意】一下代碼為設置每次只讀寫1個byte數據,每次讀寫1個byte數據都要按照上述步驟操作。

    1 spi復位

    void soft_reset(void) { SPI2.CH_CFG |= 0x1 << 5;delay(1); //延時SPI2.CH_CFG &= ~(0x1 << 5); }

    2 片選從機

    void slave_enable(void) {SPI2.CS_REG &= ~0x1; //enable salvedelay(3); }

    3.1 發送數據

    void send_byte(unsigned char data) {SPI2.CH_CFG |= 0x1; // enable Tx Channeldelay(1);SPI2.SPI_TX_DATA = data;while( !(SPI2.SPI_STATUS & (0x1 << 25)) );SPI2.CH_CFG &= ~0x1; // disable Tx Channel }

    3.2 接收數據

    unsigned char recv_byte() {unsigned char data;SPI2.CH_CFG |= 0x1 << 1; // enable Rx Channeldelay(1);data = SPI2.SPI_RX_DATA;delay(1);SPI2.CH_CFG &= ~(0x1 << 1); //disable Rx Channelreturn data; }

    取消片選

    void slave_disable(void) {SPI2.CS_REG |= 0x1; //disable salvedelay(1); }

    OK,到底為止,如何通過SPI收發數據,我們已經可以實現了,但是SPI往往外部回接各種各樣的從設備。下面我們來看SPI如何操作從設備。

    上面我們說了,fs4412開發板的SPI2外設外接了MCP2515,現在我們來分析一下MCP2515。

    MCP2515

    MCP2515詳細資料,大家自行搜索 MCP2515 datasheet 《帶有 SPI 接口的獨立 CAN 控制器》。

    簡介

    MCP2515是一種獨立的CAN總線通信控制器,是Microchip公司首批獨立CAN解決方案的升級器件,其傳輸能力較Microchip公司原有CAN控制器(MCP2510)高兩倍,高通信速率可達到1Mbps。MCP2515能夠接收和發送標準數據幀和擴展數據幀以及遠程幀,通過兩個接收屏蔽寄存器和六個接收過濾寄存器濾除無關報文,從而減輕CPU負擔。

    特性

    MCP2515主要功能參數及電氣特性如下:

    • (1)支持CAN技術規范2.0A/B, 高傳輸速率達到1Mbps;
    • (2)支持標準數據幀、擴展數據幀和遠程幀,每幀數據域長度可為0~8個字節;
    • (3)內含兩個的接收緩沖器和三個發送緩沖器,并且可編程設定優先級;
    • (4)內含六個29位(bit)的接收過濾寄存器和兩個29位(bit)的接收屏蔽寄存器;
    • (5)高速SPI接口,支持SPI 0,0和1,1模式;
    • (6)一次性模式可確保報文被一次性傳輸;
    • (7)具有可編程時鐘脈沖輸出引腳,可作為其他芯片時鐘信號源;
    • (8) 幀起始(SOF)信號輸出功能可被用于在確定的系統中(如時間觸發CAN-TTCAN)執行時隙功能,或在CAN總線診斷中決定早期總線出級;
    • (9) 采用低功耗CMOS技術,工作電壓:2.7V~5.5V, 工作電流:5mA(待機狀態1μA);
    • (10)工作溫度范圍:(I)-40℃到+85℃,(E)-40℃到+125℃。

    結構框圖

    CAN模塊

    MCP2515 是一款獨立 CAN 控制器, 可簡化需要與 CAN總線連接的應用。如上圖 簡要顯示了 MCP2515 的結構框圖。該器件主要由三個部分組成:

  • CAN 模塊,包括 CAN 協議引擎、驗收濾波寄存 器、驗收屏蔽寄存器、發送和接收緩沖器。
  • 用于配置該器件及其運行的控制邏輯和寄存器。
  • SPI 協議模塊。
  • CAN 模塊的功能是處理所有 CAN 總線上的報文接收和發送。報文發送時,首先將報文裝載到正確的報文緩沖器和控制寄存器中。通過 SPI 接口設置控制寄存器中的相應位或使用發送使能引腳均可啟動發送操作。通過讀取相應的寄存器可以檢查通訊狀態和錯誤。 會對在 CAN總線上檢測到的任何報文進行錯誤檢查,然后與用戶定義的濾波器進行匹配,以確定是否將報文移到兩個接收緩沖器中的一個。

    SPI 協議模塊

    MCU通過SPI接口與該器件連接。使用標準的SPI讀/寫指令以及專門的 SPI 命令來讀 / 寫所有的寄存器。 MCP2515 設計可與許多單片機的串行外設接口( SPI)直接相連,支持 0,0 和 1,1 運行模式。外部數據和命令通過 SI 引腳傳送到器件中,且數據在 SCK 時鐘信號的上升沿傳送進去。 MCP2515 在 SCK 的下降沿通過 SO引腳傳送出去。在進行任何操作時, CS 引腳都必須保持為低電平。

    與MCP2515通信

    SPI指令集

    我們要想操作MCP2515,只能用過SPI總線向MCP2515發送一些數據,根據規定,發送不同的數據就代表不同的操作,于是就形成了對應的指令集。

    如上圖所示,比如我們要執行復位操作,那么我只需要通過SPI總線寫入11000000,即0xC0即可。

    下面我們來詳細分析如何向MCP2515發送復位命令,如何讀寫數據。

    復位

    因為復位只需要發送0XC0即可,并不需要其他額外操作,所以我們只需要根據我們之前章節所講的SPI發送數據流程操作接口。

    void reset_2515() {soft_reset(); //復位spi控制器slave_enable() ; //片選從機send_byte(0xc0); //發送復位命令slave_disable() ; //取消片選}

    讀取數據

    由上圖可知,讀取數據流程如下:

  • 片選從機
  • 通過SPI發送指令0x03
  • 發送地址
  • 讀取數據
  • 取消片選
  • unsigned char read_byte_2515(unsigned char Addr) {unsigned char ret;slave_enable();send_byte(0x03);send_byte(Addr);ret = recv_byte();slave_disable();return(ret); }

    發送數據

    由上圖可知,發送數據流程如下:

  • 片選從機
  • 通過SPI發送指令0x02
  • 發送地址
  • 發送數據
  • 取消片選
  • void write_byte_2515(unsigned char addr,unsigned char data) {slave_enable();send_byte(0x02);send_byte(addr);send_byte(data);slave_disable(); }

    讀RX緩沖器

    裝載TX緩沖器

    請求發送(RTS)指令

    位修改指令

    有些寄存器要修改對應的bit,必須先發送該指令,發送屏蔽字節,然后才可以修改屏蔽字節中對應位為1的值,后面會有例子給出。

    CAN

    知道該如何和CAN通信,下面我們來看如何初始化CAN。

    CAN初始化

    CAN的初始化步驟如下:

  • MCP2515復位
  • 設置MCP2515為配置模式
  • 位定時配置,有配置寄存器CNF1,CNF2,CNF3控制
  • 中斷使能
  • 接收緩沖器配置
  • 引腳控制寄存器和狀態寄存器
  • 此外為方便測試,我們再加一步: 7. 回環模式,用于測試

    1. MCP2515復位

    上一節已經實現。

    void reset_2515()

    2. 設置MCP2515為配置模式

    由上圖所示,只需要向地址0X0F寫入數據0x80即可。

    write_byte_2515(0x0f, 0x80); //CANCTRL寄存器--進入配置模式 中文DATASHEET 58頁

    3. 位定時配置,有配置寄存器CNF1,CNF2,CNF3控制

    CAN總線上的所有節點都必須具有相同的標稱比特率。CAN 協議采用不歸零( Non Return to Zero, NRZ)編碼方式,在數據流中不對時鐘信號進行編碼。因此,接收時鐘信號必須由接收節點恢復并與發送器的時鐘同步。

    由于不同節點的振蕩器頻率和傳輸時間不同,接收器應具有某種能與數據傳輸邊沿同步的鎖相環( Phase Lock Loop, PLL)來同步時鐘并保持這種同步。

    鑒于數據采用 NRZ 編碼,有必要進行位填充以確保至少每 6 位時間發生一次邊沿,使數字鎖相環 ( Digital Phase LockLoop, DPLL)同步。MCP2515 通過 DPLL 實現位定時。 DPLL 被配置成同輸入數據同步,并為發送數據提供標稱定時。 DPLL 將每一 個 位 時 間 分 割 為 由 最 小 單 位 為 時 間 份 額 ( Time Quanta, TQ)所組成的多個時間段。

    在位時間幀中執行的總線定時功能,例如與本地振蕩器同步、網絡傳輸延遲補償和采樣點定位等,都是由DPLL 的可編程位定時邏輯來規定的。

    CNF1 BRP<5:0> 控制波特率預分頻比的設置。這些位根據OSC1 輸入頻率設置 TQ 的時間長度。當 BRP<5:0> =‘b000000’, TQ 最小值取 2 TOSC。通過 SJW<1:0> 選擇以 TQ 計的同步跳轉寬度。

    CNF2 PRSEG<2:0> 位設定以 TQ 計的傳播段時間長度。PHSEG1<2:0>位設定以TQ計的相位緩沖段PS1的時間長度。

    CNF3 如果 CNF2.BTLMODE 位為 1,則相位緩沖段 PS2 的時間長度將由 PHSEG2<2:0> 位設定,以 TQ 計。如果BTLMODE 位為 0,則 PHSEG2<2:0> 位不起作用。

    MCP2515 波特率配置以16M晶振為例, SJW 段數(1+PRSEG+PRSEG1+PRSEG2)

    #define CNF1_20K 0xd3 //4 20(1+4+8+7) #define CNF2_20K 0xfb #define CNF3_20K 0x46 //可以設置的波特率 5K 10K 15K 20K 25K 40K 50K 80K 100K 125K 200K 400K 500K 667K 800K 1M write_byte_2515(0x2A, CNF1_20K); //CNF1位定時配置寄器 write_byte_2515(0x29, CNF2_20K); //CNF2位定時配置寄器 write_byte_2515(0x28, CNF3_20K); //CNF3位定時配置寄器

    4. 中斷使能

    MCP2515 有八個中斷源。 CANINTE 寄存器包含了使能各中斷源的中斷使能位。 CANINTF 寄存器包含了各中斷源的中斷標志位。當發生中斷時, INT 引腳將被MCP2515 拉為低電平, 并保持低電平狀態直至 MCU 清除中斷。中斷只有在引起相應中斷的條件消失后,才會被清除。 建議在對 CANINTF 寄存器中的標志位進行復位操作時,采用位修改命令而不要使用一般的寫操作。這是為了避免在寫命令執行過程中無意間修改了標志位,進而導致中斷丟失。 應該注意的是, CANINTF 中的中斷標志位是可讀寫位,因此在相關 CANINTE 中斷使能位置 1 的前提下,對上述任一位置 1 均可使 MCU 產生中斷請求。

    write_byte_2515(0x2B, 0x1f); //CANINTE中斷使能寄存器

    5. 接收緩沖器配置

    MCP2515 具有兩個全接收緩沖器。每個接收緩沖器配備 有多 個 驗 收濾 波 器。除 上述 專 用 接收 緩 沖 器外,MCP2515 還具有單獨的報文集成緩沖器 ( Message Assembly Buffer, MAB) ,可作為第三個接收緩沖器。

    bit5:6設置為1,其余位暫時不用,設置為0.

    write_byte_2515(0x60, 0x60); //RXB0CTRL接收緩沖器0 控制寄存器

    6. 引腳控制寄存器和狀態寄存器

    當引腳配置為數字輸出引腳時,相應的接收緩沖器中的BFPCTRL.BxBFM位應被清零, 而BFPCTRL.BnBFE位應被置 1。在這種工作模式下,引腳的狀態由 BFPCTRL.BnBFS位控制。 BnBFS位寫入1時,將使相應的緩沖器滿中斷引腳輸出高電平,寫入 0 將使該引腳輸出低電平。當引腳處于這種模式時,該引腳的狀態只應通過位修改 SPI 命令來修改,以避免任何緩沖器滿中斷引腳出現干擾。

    void bit_modify_2515(unsigned char addr, unsigned char mask, unsigned char data) { // CS_SPI = 0 ;slave_enable() ;send_byte(0x05) ;send_byte(addr) ;send_byte(mask) ;send_byte(data) ;slave_disable() ; // CS_SPI = 1 ; } bit_modify_2515(0x0C, 0x0f, 0x0f); //BFPCTRL_RXnBF 引腳控制寄存器和狀態寄存器 中文DATASHEET 29 頁

    7. 回環模式,用于測試

    write_byte_2515(0x0f, 0x40); //CAN控制寄存器--回環模式,用于測試

    can緩沖區數據收發

    MCP2515 采用三個發送緩沖器。每個發送緩沖器占用14 字節的 SRAM,并映射到器件存儲器中。 其中第一個字節 TXBnCTRL 是與報文緩沖器相關的控制寄存器。該寄存器中的信息決定了報文在何種條件下發送,并在報文發送時指示其狀態 。

    用 5 個字節來裝載標準和擴展標識符以及其他報文仲裁信息(見寄存器 3-3 到寄存器 3-7) 。最后 8 個字節用于裝載等待發送報文的 8 個可能的數據字節 。

    至少須將 TXBnSIDH、 TXBnSIDL 和 TXBnDLC 寄存器裝載數據。如果報文包含數據字節,還需要對 TXBnDm寄存器進行裝載。若報文采用擴展標識符,應對 TXBnEIDm 寄存器進行裝載,并將 TXBnSIDL.EXIDE 位置1。

    下面我們看如何向CAN的緩沖區0發送和接收數據。

    數據發送

    can緩沖區0數據發送流程如下:

  • 設置為發送最高優先級
  • 設置發送緩沖器0標準標識符高位
  • 設置發送緩沖器0標準標識符低位
  • 設置發送緩沖器0數據長度碼8字節
  • 向緩沖區寫入數據,地址從0x36起
  • 發送請求命令0x81,發送數據
  • 1. 設置為發送最高優先級

    write_byte_2515(0x30, 0x03); //設置為發送最高優先級

    2. 設置發送緩沖器0標準標識符高位

    write_byte_2515(0x31, 0xff); //發送緩沖器0標準標識符高位

    3. 設置發送緩沖器0標準標識符低位

    write_byte_2515(0x32, 0x00); //發送緩沖器0標準標識符低位

    4. 設置發送緩沖器0數據長度碼8字節

    write_byte_2515(0x35, 0x08); //發送緩沖器0數據長度碼8字節

    5. 向緩沖區寫入數據,地址從0x36起

    write_byte_2515(0x36+i ,tx_buff[i]); //向txb緩沖器中寫入8個字節

    6. 發送請求命令0x81,發送數據

    void send_req_2515() {// CS_SPI = 0; //復位soft_reset(); //復位spi控制器slave_enable() ; //片選從機send_byte(0x81); //發送請求命令slave_disable() ; //取消片選 // CS_SPI=1; }

    Can數據的接收

    從CAN緩沖區讀取數據流程如下:

  • 讀取中斷標志寄存器0x2c的value,判斷bit0是否為1
  • 從接收緩沖區讀走數據,地址從0X66開始
  • 軟復位
  • 向中斷標志寄存器0x2c寫入位掩碼
  • 向中斷標志寄存器0x2c,寫入數據0,清終端
  • 1. 讀取中斷標志寄存器0x2c的value,判斷bit0是否為1

    當報文傳送至某一接收緩沖器時,與該接收緩沖器對應的 CANINTF.RXnIF 位將置 1。一旦緩沖器中的報文處理完畢, MCU 就必須將該位清零以接收下一條報文。該控制位提供的鎖定功能確保 MCU 尚未處理完上一條報文前, MCP2515 不會將新的報文載入接收緩沖器。

    如果 CANINTE.RXnIE 位被置 1,器件會在 INT 引腳產生一個中斷,顯示接收到報文有效。另外,如果被配置為接收緩沖器滿中斷引腳,與之相應的 RXnBF 引腳會被拉低。

    MCP2515 有八個中斷源。 CANINTE 寄存器包含了使能各中斷源的中斷使能位。 CANINTF 寄存器包含了各中斷源的中斷標志位。當發生中斷時, INT 引腳將被MCP2515 拉為低電平, 并保持低電平狀態直至 MCU 清除中斷。中斷只有在引起相應中斷的條件消失后,才會被清除。

    建議在對 CANINTF 寄存器中的標志位進行復位操作時,采用位修改命令而不要使用一般的寫操作。這是為了避免在寫命令執行過程中無意間修改了標志位,進而導致中斷丟失。

    應該注意的是, CANINTF 中的中斷標志位是可讀寫位,因此在相關 CANINTE 中斷使能位置 1 的前提下,對上述任一位置 1 均可使 MCU 產生中斷請求。

    2. 從接收緩沖區讀走數據

    rx_buff[i]= read_byte_2515(0x66+i);

    3. 軟復位

    soft_reset();

    4. 向中斷標志寄存器0x2c寫入位掩碼

    bit_modify_2515(0x2c,0x01,0x00);//修改bit 0

    5.清中斷

    write_byte_2515(0x2c, 0x00);

    最終操作代碼如下

    節省篇幅,重復函數不貼了。

    #define CNF1_20K 0xd3 //4 20(1+4+8+7) #define CNF2_20K 0xfb #define CNF3_20K 0x46 void Init_can(void) {reset_2515(); //復位write_byte_2515(0x0f, 0x80); //CANCTRL寄存器--進入配置模式 中文DATASHEET 58頁//可以設置的波特率 5K 10K 15K 20K 25K 40K 50K 80K 100K 125K 200K 400K 500K 667K 800K 1Mwrite_byte_2515(0x2A, CNF1_20K); //CNF1位定時配置寄器 中文DATASHEET 41-42頁write_byte_2515(0x29, CNF2_20K); //CNF2位定時配置寄器 中文DATASHEET 41-42頁write_byte_2515(0x28, CNF3_20K); //CNF3位定時配置寄器 中文DATASHEET 41-43頁write_byte_2515(0x2B, 0x1f); //CANINTE中斷使能寄存器 中文DATASHEET 50 頁write_byte_2515(0x60, 0x60); //RXB0CTRL接收緩沖器0 控制寄存器 中文DATASHEET 27 頁//write_byte_2515(0x70, 0x20); //接收緩沖器1控制寄存器bit_modify_2515(0x0C, 0x0f, 0x0f); //BFPCTRL_RXnBF 引腳控制寄存器和狀態寄存器 中文DATASHEET 29 頁write_byte_2515(0x0f, 0x40); //CAN控制寄存器--回環模式,用于測試 } void send_byte(unsigned char data) {SPI2.CH_CFG |= 0x1; // enable Tx Channeldelay(1);SPI2.SPI_TX_DATA = data;while( !(SPI2.SPI_STATUS & (0x1 << 25)) );SPI2.CH_CFG &= ~0x1; // disable Tx Channel } unsigned char recv_byte() {unsigned char data;SPI2.CH_CFG |= 0x1 << 1; // enable Rx Channeldelay(1);data = SPI2.SPI_RX_DATA;delay(1);SPI2.CH_CFG &= ~(0x1 << 1); //disable Rx Channelreturn data; } void bit_modify_2515(unsigned char addr, unsigned char mask, unsigned char data) { // CS_SPI = 0 ;slave_enable() ;send_byte(0x05) ;send_byte(addr) ;send_byte(mask) ;send_byte(data) ;slave_disable() ; // CS_SPI = 1 ; } void Can_send(unsigned char *tx_buff) {unsigned char i;write_byte_2515(0x30, 0x03); //設置為發送最高優先級write_byte_2515(0x31, 0xff); //發送緩沖器0標準標識符高位write_byte_2515(0x32, 0x00); //發送緩沖器0標準標識符低位write_byte_2515(0x35, 0x08); //發送緩沖器0數據長度碼8字節for(i = 0; i < 8; i++){write_byte_2515(0x36+i ,tx_buff[i]); //向txb緩沖器中寫入8個字節 // printf("%x ",tx_buff[i]);}send_req_2515();}unsigned char Can_receive(unsigned char *rx_buff) {unsigned char i,flag;flag = read_byte_2515(0x2c); //CANINTF——中斷標志寄存器printf("flag=%xn",flag);// printf(" SPI2.SPI_STATUS =%xn", SPI2.SPI_STATUS );// soft_reset();if (flag&0x1) //接收緩沖器0滿中斷標志位{for(i = 0; i < 16; i++){rx_buff[i]= read_byte_2515(0x66+i);// printf("%x ",rx_buff[i]);// printf(" SPI2.SPI_STATUS =%xn", SPI2.SPI_STATUS );soft_reset();}bit_modify_2515(0x2c,0x01,0x00);write_byte_2515(0x2c, 0x00);if (!(rx_buff[1]&0x08)) return(1); //接收標準數據幀}return(0); } int main(void) {GPX2.CON = 0x1 << 28;uart_init();unsigned char ID[4],buff[8]; //狀態字unsigned char key;unsigned char ret;//,j,k,ret0,ret1,ret2,ret3,ret4,ret5,ret6,ret7,ret8,ret9;unsigned int rx_counter;volatile int i=0;GPC1.CON = (GPC1.CON & ~0xffff0) | 0x55550;//設置IO引腳為SPI模式/*spi clock config*/CLK_SRC_PERIL1 = (CLK_SRC_PERIL1 & ~(0xF<<24)) | 6<<24;// 0x6: 0110 = SCLKMPLL_USER_T 800MhzCLK_DIV_PERIL2 = 19 <<8 | 3;//SPI_CLK = 800/(19+1)/(3+1)soft_reset(); // 軟復位SPI控制器SPI2.CH_CFG &= ~( (0x1 << 4) | (0x1 << 3) | (0x1 << 2) | 0x3);//master mode, CPOL = 0, CPHA = 0 (Format A)SPI2.MODE_CFG &= ~((0x3 << 17) | (0x3 << 29)); //BUS_WIDTH=8bit,CH_WIDTH=8bitSPI2.CS_REG &= ~(0x1 << 1); //選擇手動選擇芯片mydelay_ms(10); //延時Init_can(); //初始化MCP2515printf("n************ SPI CAN test!! ************n");while(1){//Turn on ledGPX2.DAT = GPX2.DAT | 0x1 << 7;mydelay_ms(50);printf("nplease input 8 bytesn");for(i=0;i<8;i++){src[i] = getchar();putc(src[i]);}printf("n");Can_send(src); //發送標準幀mydelay_ms(100);ret = Can_receive(dst); //接收CAN總線數據printf("ret=%xn",ret);printf("src=");for(i=0;i<8;i++) printf(" %x", src[i]);//將CAN總線上收到的數據發到串行口printf("n");printf("dst=");for(i=0;i<8;i++) printf(" %x",dst[6+i]); //將CAN總線上收到的數據發到串行口printf("n");//Turn offGPX2.DAT = GPX2.DAT & ~(0x1 << 7);mydelay_ms(100);} //while(1)return 0; } //main

    問題

    1 什么是feddback 時鐘?

    2 Can的緩沖寄存器組 原理 更多信息,請關注 公號 一口Linux

    總結

    以上是生活随笔為你收集整理的SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    免费成人av在线看 | 久草在线看片 | 天天操天天射天天舔 | 日韩午夜网站 | 国产亚洲人成网站在线观看 | 中文在线免费观看 | 精品欧美乱码久久久久久 | 日韩成人精品一区二区 | 日韩一区二区三区高清免费看看 | 色婷婷福利 | 国产在线看 | 久久久精品| 久草剧场 | 日韩欧美电影网 | 亚洲精品小视频 | 成人免费在线播放视频 | 欧美色图亚洲图片 | 韩国av免费在线观看 | 日韩av电影手机在线观看 | 精品国产a| 色吊丝在线永久观看最新版本 | 日本三级不卡 | 91福利社在线观看 | 久久论理| 97视频免费 | 午夜精品久久久久久99热明星 | av在线电影网站 | 精品久久久久久久久久久久久 | 中文字幕.av.在线 | 欧洲成人av| 亚洲精品综合一区二区 | 麻豆传媒视频在线免费观看 | 国产97在线看 | 久久久久久久免费 | 久久久国产在线视频 | 中午字幕在线观看 | 国产成人av福利 | 中文字幕免费 | 国产美女视频免费观看的网站 | 国产成人资源 | 五月婷婷综合网 | 亚洲黄色小说网 | 91一区一区三区 | 亚洲美女在线国产 | 日本夜夜草视频网站 | 精品uu| 色偷偷888欧美精品久久久 | 亚洲欧洲精品视频 | 日韩久久精品 | 亚洲激情 在线 | 婷婷伊人综合亚洲综合网 | 国产精品美女久久久 | 国内精品久久久久影院一蜜桃 | 91桃色在线播放 | av成人在线网站 | 日韩精品最新在线观看 | 久久婷亚洲五月一区天天躁 | 久久激情视频 | 亚洲综合精品在线 | 精品久久久久_ | 西西444www大胆高清视频 | 国产成人一区二区三区在线观看 | www.com久久| 日韩一区精品 | 午夜免费久久看 | 久人人 | 国产精品igao视频网入口 | 天天操天天干天天插 | 狠狠干 狠狠操 | 最新日韩电影 | 91免费在线视频 | 黄色网址av| 激情综合站 | 麻豆视频国产精品 | 国产精品二区三区 | 中文字幕人成不卡一区 | 欧美一级爽 | 成人免费影院 | 欧美一级性生活视频 | 久久这里只有精品首页 | 亚州天堂 | 精品免费久久久久 | 91精品久久久久久久99蜜桃 | 国产精品久久久久久一区二区三区 | 一区二区三区在线免费观看视频 | 久久国产视频网站 | 香蕉网站在线观看 | 亚洲精品美女视频 | 日本少妇久久久 | 五月婷婷在线观看视频 | 激情开心色 | 黄色成人av网址 | 国产成人三级在线观看 | 在线观看国产成人av片 | 国产视频精品免费播放 | 亚洲午夜小视频 | 超级碰视频 | 日韩在线观看三区 | 国产超碰在线 | 99视频播放| 国产亚洲精品久久久久久网站 | 亚洲天天草 | 麻豆国产精品va在线观看不卡 | 激情开心网站 | av大片免费 | 黄色一级免费网站 | 亚洲一区免费在线 | 日韩欧美有码在线 | 久久国产免| 日韩成人精品一区二区 | 亚洲国产97在线精品一区 | 免费一区在线 | 一级黄色大片在线观看 | 国产日韩视频在线观看 | www.成人久久 | 成人小视频在线观看免费 | 久久九九九九 | 开心激情网五月天 | 操老逼免费视频 | 国产福利精品视频 | 亚洲欧洲精品久久 | 日韩精品久久久免费观看夜色 | 免费久久视频 | 天天操天天是 | 草久草久 | 女人高潮一级片 | 欧美日韩中文字幕视频 | 久久精品国产久精国产 | 国产视频中文字幕 | 成+人+色综合 | 久久国产精品影视 | 国产99久久精品一区二区永久免费 | 免费久久网 | 久久精品中文字幕 | 最近日韩免费视频 | 国产剧情av在线播放 | 五月天激情开心 | 欧美在线91 | 久久久久久久国产精品影院 | 日本超碰在线 | 高清不卡一区二区在线 | 狠狠色丁香久久婷婷综合丁香 | 乱男乱女www7788 | 亚洲国产午夜 | 国产性天天综合网 | 欧美另类z0zx| 婷婷激情五月综合 | 久久精品123 | 五月婷婷综合久久 | 日韩中文字幕一区 | 国产又黄又爽又猛视频日本 | 成人网色 | 一区二区三区四区五区在线视频 | 亚洲精品国产第一综合99久久 | 国产精品免费久久久久 | 亚洲无人区小视频 | 成人小视频在线免费观看 | av短片在线 | 国产色婷婷在线 | av短片在线| 国产理论在线 | 国产精品网红福利 | 中文字幕在线不卡国产视频 | 国产 欧美 日产久久 | 韩国av免费| 国产在线观看免费av | 超碰在97 | 久草综合在线 | 99精品福利视频 | 91人人澡人人爽人人精品 | 人人干人人搞 | 中文国产成人精品久久一 | 日韩av五月天 | 精品国产一区二区三区四区vr | 91视频高清完整版 | 99精品欧美一区二区 | 亚洲艳情 | 日本最新一区二区三区 | 午夜精品久久久久99热app | 色婷婷综合在线 | 久视频在线 | 欧美国产在线看 | 亚洲视频aaa | 亚洲第一区在线播放 | 色欧美综合 | 亚洲四虎 | 国产一级淫片免费看 | 不卡av在线免费观看 | 日韩a在线观看 | 99久久精品国产亚洲 | 午夜在线国产 | 免费www视频 | 久久久久免费视频 | 国产午夜在线 | av片一区| 91chinese在线| 欧美激情综合五月色丁香小说 | 久久黄色网| 精品国产精品一区二区夜夜嗨 | 一区二区中文字幕在线观看 | 国产成人av电影在线观看 | www.色婷婷| 久草在线资源网 | 久久久黄色免费网站 | 欧洲精品一区二区 | 丁香婷婷激情五月 | 久久精品国产精品 | 国产性天天综合网 | 免费大片av| 香蕉视频最新网址 | 午夜精品剧场 | 日韩在线视频观看免费 | 欧美三级高清 | 四虎在线免费观看视频 | 日韩深夜在线观看 | 久久综合九色综合97_ 久久久 | 亚洲黄色一级大片 | 人人草在线视频 | 天天狠狠操| 综合久久五月天 | 久久久黄色免费网站 | 亚洲精品免费在线视频 | 国产精品爽爽久久久久久蜜臀 | 国产精品18久久久久久vr | 精品国产三级a∨在线欧美 免费一级片在线观看 | www.福利视频| 国产美女视频免费 | 黄色美女免费网站 | 九九热av | 不卡的av在线 | 夜夜夜影院 | 白丝av在线 | 日韩欧美aaa| 免费一级片在线 | 天天夜夜亚洲 | 国产综合视频在线观看 | 久久精品一 | 久久伊人精品一区二区三区 | 精品国产1区 | 又粗又长又大又爽又黄少妇毛片 | 91成人精品| 成人国产精品久久久久久亚洲 | 亚洲欧美在线视频免费 | 激情久久影院 | 亚洲精品资源在线观看 | 国产欧美综合在线观看 | 日本久久久久久久久久 | 国产视频一区二区在线播放 | 成人免费在线电影 | 九九在线视频免费观看 | 欧美日韩aaaa | 天堂av免费观看 | 亚洲精品视频二区 | 国产精品9999久久久久仙踪林 | 三级动图| 亚洲国产中文字幕在线观看 | 波多野结衣一区 | 国产在线成人 | 麻豆 91 在线| 亚洲成人av片在线观看 | 不卡的一区二区三区 | 99热这里精品| 亚洲经典视频在线观看 | av国产在线观看 | 国产精品久久久久久久久久免费 | 中文在线√天堂 | 97人人模人人爽人人喊中文字 | 四虎4hu永久免费 | 国产麻豆成人传媒免费观看 | 手机在线日韩视频 | 亚洲国产精久久久久久久 | 欧美一二区在线 | 亚洲国产午夜视频 | 欧美一级看片 | 亚洲精品乱码久久久久久按摩 | 国产中文字幕网 | 久久久久久视频 | 国产美女免费看 | 日韩欧美视频二区 | 色av婷婷| 亚洲另类视频 | 99热手机在线观看 | 青青啪| 美女网站在线免费观看 | 欧美日韩性 | 91九色老| 久久精品视频网站 | 国产精品1000| 久久成人精品 | jizz18欧美18| 中文字幕一区二区三 | 婷婷日 | 国产视频97 | 午夜视频在线观看一区二区三区 | 欧美a级在线免费观看 | 日日夜夜操av | 久久综合狠狠 | 亚洲精品婷婷 | 午夜精品电影 | www九九热| 中文一区二区三区在线观看 | 人人超碰免费 | 久操97| 午夜在线观看一区 | 国产又粗又长的视频 | 五月婷婷操 | 国产亚洲精品久久久久久久久久久久 | 99在线热播精品免费 | 中文字幕在线观看第二页 | 成年人视频免费在线 | 国产经典三级 | 天天草天天草 | 人人插人人看 | 国产精品1区2区3区 久久免费视频7 | 欧美另类sm图片 | 在线观看911视频 | 国产精品免费一区二区 | 亚洲成av人片在线观看 | 中文av网 | 国产乱视频 | 色五月成人 | 五月开心激情 | 日韩精品在线观看视频 | 亚洲综合激情小说 | 欧美aaa大片 | 亚洲一区二区精品 | 91av视频免费在线观看 | 亚洲综合精品视频 | 成人网大片| 国产99re | 中国一区二区视频 | 97超碰人人干 | 视频在线观看日韩 | 免费黄色网止 | 国产亚洲一区二区三区 | 久久久久国产成人精品亚洲午夜 | 懂色av一区二区在线播放 | 欧美精品网站 | 国产精品久久久久久影院 | 免费一级日韩欧美性大片 | 97超在线 | 在线免费观看国产视频 | 国内精品视频在线 | 亚洲国产欧洲综合997久久, | 久青草国产在线 | 色就是色综合 | 日日爱999| 99久久精品国产观看 | www.玖玖玖 | 五月婷婷在线观看 | 91影视成人| 欧美视频一区二 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产精品淫| 色综合久久五月天 | 黄色一级片视频 | 日韩精品欧美专区 | 国产成人av | 欧美久久久久久 | 免费涩涩网站 | 又黄又爽又刺激视频 | 日韩欧美专区 | 91精品国产91p65 | 日韩综合一区二区三区 | 欧美激情综合五月色丁香小说 | 91污污| 日韩成人黄色av | 91视频91自拍| 黄色大片免费播放 | 国产精品18久久久久vr手机版特色 | 2019天天干天天色 | 丁香久久久 | 午夜精品福利一区二区三区蜜桃 | 永久免费视频国产 | 五月香视频在线观看 | 精品日韩在线 | 在线一区观看 | 国内精品视频在线 | 精品国产网址 | 国产福利午夜 | 国产视频第二页 | 91视频中文字幕 | 亚洲天堂精品 | 婷婷综合成人 | 久操97| 久久99国产精品 | 99热这里精品 | 日日日干 | 欧美国产日韩激情 | 欧美a性 | 免费在线观看亚洲视频 | 久久久免费网站 | 99热99 | 国产成人免费在线 | 国产亚洲精品久久19p | 成人永久视频 | 亚洲成人免费在线观看 | 亚洲第一区精品 | 久久经典国产 | 国产一级大片免费看 | 在线观看91视频 | 一区二区三区不卡在线 | 日韩美女免费线视频 | 成年人电影免费在线观看 | 在线视频 日韩 | 国产一级免费电影 | 国产一级精品在线观看 | 亚洲天堂激情 | av三区在线 | 国产精品欧美久久久久久 | 欧美日产在线观看 | 激情开心网站 | 中文字幕 国产专区 | 亚洲精品av中文字幕在线在线 | 最近最新最好看中文视频 | 久操操 | 亚洲天天 | 久久久久一区二区三区四区 | 免费黄色av电影 | 日韩精品一区二区三区第95 | 国产精品v欧美精品 | 久久草草热国产精品直播 | 欧产日产国产69 | 91精品久久久久久 | 成年人网站免费观看 | 国产一级电影 | 中文字幕亚洲综合久久五月天色无吗'' | 中文字幕资源网在线观看 | 久久成人高清视频 | 日韩大片免费观看 | 97在线看 | 少妇自拍av | 欧美精品乱码久久久久久 | 97**国产露脸精品国产 | 美女精品网站 | 国产成人综合精品 | 国产一级二级三级视频 | 国产亚洲精品成人av久久影院 | 久久精品99精品国产香蕉 | 四虎影视欧美 | 欧美精品一区二区在线播放 | 国产不卡免费av | 91精品国产综合久久福利不卡 | 色视频网站在线观看一=区 a视频免费在线观看 | 精品资源在线 | 91麻豆精品国产91久久久无需广告 | 亚洲日本一区二区在线 | 国产一级片直播 | 国产精品国产三级国产aⅴ9色 | 免费观看视频的网站 | 在线免费高清视频 | 欧美极品xxxx| 久久免费视频在线观看 | a在线免费观看视频 | 五月婷婷综合在线视频 | av中文字幕亚洲 | 毛片888 | 一区二区精品在线视频 | 中文字幕在线视频一区二区 | 日韩免费在线观看 | 国产爽视频 | 免费观看性生活大片 | 国产亚洲片 | 色婷婷97 | 久久第四色| 黄网站色视频免费观看 | 午夜精品视频免费在线观看 | 五月激情站 | 新版资源中文在线观看 | 人人草人 | 超薄丝袜一二三区 | 色婷婷狠狠五月综合天色拍 | 在线国产视频一区 | 国产99久久久精品 | 99re国产视频 | 久久在线看 | 黄色在线免费观看网址 | 在线观看黄网站 | 婷婷六月网| 色多多视频在线 | 91精品国产综合久久久久久久 | 中文字幕在线看视频 | 中文资源在线官网 | 久久久99精品免费观看乱色 | 成人在线免费视频观看 | 亚洲综合国产精品 | 最近中文字幕在线播放 | 欧美在线99 | 免费国产一区二区视频 | 国产97碰免费视频 | 国产成人精品免高潮在线观看 | 国产a级片免费观看 | 精品亚洲成人 | 久久99久国产精品黄毛片入口 | 亚洲美女在线国产 | 欧美激情视频三区 | 日本精品一区二区三区在线播放视频 | 久草在线高清视频 | 国产精品9999久久久久仙踪林 | 热久精品 | 在线观看韩日电影免费 | 日韩精品一区二区三区视频播放 | 高清av中文字幕 | 日韩a在线看 | 国产特级毛片aaaaaa高清 | 国产黄色美女 | 91chinese在线 | 欧美精品久久久久性色 | 9草在线| 成人av视屏 | 丁香影院在线 | 久久人人干 | 7799av| 91久久爱热色涩涩 | 亚洲精品日韩在线观看 | 999视频网 | 激情久久伊人 | 国产精品aⅴ | 高清av在线| 亚洲欧美日韩一区二区三区在线观看 | 久久久国产网站 | 日韩最新av在线 | 欧美成人黄 | 97av视频 | 日本高清xxxx | av免费试看 | 黄色影院在线免费观看 | 天天搞夜夜骑 | 日韩一区二区免费视频 | 日韩欧美一区二区在线观看 | 国产又黄又硬又爽 | 国产福利av在线 | 国产电影一区二区三区四区 | 久久精品视频2 | 久久一区二区三区国产精品 | 五月婷网站 | 国产日产欧美在线观看 | 天天射天天干天天 | 国产在线一区观看 | 久久嗨 | 视频在线99| 在线视频18在线视频4k | 国产高清不卡在线 | 色午夜影院 | 欧美日韩在线视频一区二区 | 精品欧美乱码久久久久久 | 日韩久久午夜一级啪啪 | 91麻豆精品国产91 | 91中文字幕视频 | 免费看一级特黄a大片 | 国产精品久久久久久久久久久久冷 | 久久久国产精品网站 | 在线播放亚洲 | 久久香蕉电影网 | 在线 视频 亚洲 | 日韩在线观看精品 | 久久久久免费精品视频 | 成人黄色影片在线 | 国际精品网 | 久久久久久高潮国产精品视 | 亚洲精品国产综合久久 | 美女视频久久黄 | 91麻豆看国产在线紧急地址 | 麻花豆传媒mv在线观看网站 | 国产精品入口久久 | 日韩女同一区二区三区在线观看 | 成人一级影视 | 999国产 | 中文字幕日韩有码 | 一区二区三区在线免费观看 | 91天天视频| 黄色一级大片在线免费看产 | www成人精品| 天天干夜夜想 | 人人干在线观看 | a久久久久 | 伊人国产在线播放 | 在线观看免费91 | 玖玖在线精品 | 精品无人国产偷自产在线 | 久久的色| 国产黄色片免费看 | 亚洲精品综合欧美二区变态 | 久影院| 天天做天天爱天天爽综合网 | 国产精品亚洲精品 | 亚洲精品九九 | 黄色毛片视频免费观看中文 | 亚洲精品中文在线 | 激情综合婷婷 | 国产尤物一区二区三区 | 一级欧美日韩 | 天天爽天天爽夜夜爽 | 在线亚洲成人 | 91麻豆网站| 最新一区二区三区 | 2021国产在线 | 久久中文字幕视频 | 97综合网 | 婷婷亚洲最大 | av网站地址| 国产热re99久久6国产精品 | 亚洲成人免费观看 | 久久系列 | 手机在线中文字幕 | 91成人午夜 | av成人免费在线看 | 国产精品一区二区在线观看 | 最新的av网站 | 国产裸体永久免费视频网站 | 国产在线国偷精品产拍免费yy | 欧美极度另类 | 人交video另类hd | 欧美巨大| 香蕉在线影院 | 国产美女精品人人做人人爽 | www.com久久久 | av免费观看高清 | 欧美不卡视频在线 | 亚洲免费av电影 | 欧美一级艳片视频免费观看 | 免费观看mv大片高清 | 亚洲精品美女久久 | 国产精品理论视频 | 特级a老妇做爰全过程 | 亚洲视频电影在线 | 亚洲精品成人免费 | 99热 精品在线 | 日韩av一卡二卡三卡 | 美女黄频网站 | 成人欧美在线 | 国产亚洲一区二区在线观看 | 国产麻豆剧果冻传媒视频播放量 | 亚洲国内精品在线 | 国产亚洲精品中文字幕 | 亚洲综合丁香 | 久久看看| 久久久久麻豆 | 国产精品毛片久久久久久久久久99999999 | 国产成人精品久久亚洲高清不卡 | 毛片在线网 | 亚洲欧美婷婷六月色综合 | 国产精品久久久毛片 | 干av在线 | 国产视频不卡一区 | 天天天干夜夜夜操 | 开心色婷婷| 亚洲国产一区av | 91av在线免费| 三级视频国产 | 97精品国产91久久久久久久 | 日韩午夜电影院 | 亚洲一区二区高潮无套美女 | 亚洲精品中文字幕在线 | 成人播放器 | 91成人精品一区在线播放69 | 国产一区二区三精品久久久无广告 | 成人午夜电影在线播放 | 国模视频一区二区 | 日日夜夜操av | 超碰国产97 | 欧美激情视频一区二区三区 | 激情文学丁香 | 99久久一区 | 婷婷丁香在线视频 | 日韩大陆欧美高清视频区 | 午夜免费在线观看 | 天天色综合1 | 成人一区二区三区在线观看 | 99视频在线精品 | 狠狠操狠狠操 | 久99久中文字幕在线 | 天天干天天干天天干天天干天天干天天干 | 黄色91免费观看 | 色视频国产直接看 | 中文字幕在线看视频 | 国产精品v欧美精品v日韩 | 色综合久久99 | 久久成人亚洲欧美电影 | 五月激情丁香婷婷 | 国产免费观看视频 | 久草在线免费色站 | 久插视频| 日本性生活一级片 | 毛片区| 亚洲精品午夜一区人人爽 | 色一级片 | 亚洲第一区在线播放 | 亚洲三级影院 | 黄污视频网站 | 国产亚洲精品久久久久久无几年桃 | 色婷婷国产精品 | 成人av高清在线 | 999成人国产 | 日本久久久亚洲精品 | 尤物97国产精品久久精品国产 | 99国内精品久久久久久久 | 日韩在线免费视频 | 在线涩涩| 一区二区三区手机在线观看 | 国产资源网 | 久久国产精品小视频 | 久久成人在线 | 欧美日韩国产精品爽爽 | 久久久久国产精品厨房 | 精品亚洲网 | 日本xxxx裸体xxxx17 | 亚洲综合成人在线 | 日日夜夜精品免费视频 | 在线观看91久久久久久 | 久草视频在 | 成人精品一区二区三区中文字幕 | 视频在线观看一区 | 久久精品牌麻豆国产大山 | 日韩黄色免费 | 超碰在线日本 | 激情丁香综合 | 国产91aaa | 91精品久久久久久久久久久久久 | 久久精品久久精品久久39 | 久久久国产影院 | 免费精品视频在线 | 97av视频| 日韩欧美精品一区二区三区经典 | 精品久久久久久久 | 手机av片 | 国产精品国产亚洲精品看不卡15 | 美女视频黄色免费 | 91视频啊啊啊 | 日韩网站在线看片你懂的 | 九九久久久久久久久激情 | 国产福利91精品一区二区三区 | 欧美激情综合网 | 日本视频精品 | 国产精品资源 | 在线观看色网站 | 在线天堂8√ | 在线观看免费成人av | 日本激情视频中文字幕 | 国产91精品高清一区二区三区 | 6080yy精品一区二区三区 | 一区二区毛片 | 国产热re99久久6国产精品 | 操高跟美女 | 亚洲综合欧美日韩狠狠色 | 成 人 黄 色 视频免费播放 | 日本久久不卡视频 | 亚洲黄色网络 | 天天爱天天操天天爽 | 国产成人资源 | 日韩小视频 | 亚洲综合视频在线 | 激情视频一区二区 | 中文不卡视频在线 | 国产一区二区久久久 | 公与妇乱理三级xxx 在线观看视频在线观看 | 综合色影院| 97av在线视频免费播放 | 午夜丁香网 | 国产在线a免费观看 | 色五月色开心色婷婷色丁香 | 国产精品久久久久久久久久白浆 | 在线观看一区二区视频 | 久久字幕网 | 天天舔天天射天天操 | 成年人毛片在线观看 | 在线免费av电影 | 在线看中文字幕 | 欧美一区二区三区特黄 | 国产精品久久久一区二区三区网站 | 亚洲一区二区精品视频 | 国产一级电影在线 | 中文字幕中文字幕在线一区 | 天天操天天舔天天干 | 狠狠干夜夜操 | 特级毛片在线免费观看 | 欧美在线视频a | 91精品老司机久久一区啪 | 992tv人人草 黄色国产区 | 欧美成亚洲 | 在线免费av播放 | 亚洲视频在线免费观看 | 欧美国产日韩在线视频 | 色操插| 五月婷婷激情 | 爱干视频 | 超级碰视频 | 亚洲精品在线免费播放 | 亚洲第一久久久 | 国产午夜三级一区二区三 | 天天操天天草 | 性色视频在线 | 在线观看日韩免费视频 | 免费视频91蜜桃 | 天天舔夜夜操 | 国产乱老熟视频网88av | 欧美视频日韩 | 中文字幕在线视频一区二区三区 | 97超碰在线免费观看 | 日日夜夜综合网 | 中文字幕资源在线观看 | 激情五月伊人 | 一区二区激情视频 | 97超碰免费在线观看 | 免费看片网站91 | 亚洲欧美国产精品18p | 蜜臀久久99静品久久久久久 | 国产99在线免费 | 日韩色av色资源 | 久久午夜免费视频 | 久草资源免费 | 日批视频 | 九九视频精品免费 | 在线蜜桃视频 | 国产成人av在线 | 日本aaa在线观看 | 亚洲精品视频www | 久久久久久久久久久久亚洲 | 91夫妻自拍 | 91精品国产自产91精品 | 麻豆视频大全 | 国产91av视频在线观看 | 91最新网址在线观看 | 国产精品久久久久久久久久99 | 99热免费在线 | 一区二区三区免费 | 精品国产成人av | 黄色片网站大全 | 色激情在线| 国产精品日韩在线播放 | 国产日韩欧美在线 | 精品成人在线 | 日韩成人精品 | 色婷婷av一区 | 波多野结衣一区二区三区中文字幕 | 日韩在线视频观看 | 九九免费在线观看视频 | 精品一区二区精品 | 人人草在线视频 | 99r国产精品| 五月天堂网| 国产一级二级在线观看 | 欧美性生活小视频 | 久久高清视频免费 | 久久久久二区 | 久久9999久久免费精品国产 | 在线看片成人 | 亚洲区另类春色综合小说校园片 | 日本高清xxxx | 欧美激情精品久久久 | 91网页版在线观看 | 成年人网站免费在线观看 | 亚洲精品国产精品国自产在线 | 亚洲人精品午夜 | 亚洲涩涩一区 | 午夜.dj高清免费观看视频 | 国产乱视频 | 国产中文字幕精品 | 日韩三级av| 亚洲天天 | 国产夫妻性生活自拍 | 亚洲永久精品一区 | 伊人五月综合 | 97视频免费观看 | 成人在线视频一区 | 亚洲一区二区三区精品在线观看 | 探花视频在线版播放免费观看 | 一区二区三区在线免费观看视频 | 国产女教师精品久久av | 麻豆一精品传二传媒短视频 | 五月天婷婷视频 | 99精品视频在线播放免费 | 黄色a视频 | 97超碰人人澡人人 | 丝袜美女在线观看 | www视频在线免费观看 | 国产区久久 | 国产99久久九九精品 | 久久久精品一区二区 | 亚洲日韩中文字幕 | 在线观看完整版 | 亚洲免费观看在线视频 | 三级av在线播放 | 在线视频观看你懂的 | 国产精品99久久久久久人免费 | 在线国产视频一区 | 丁香激情五月 | 久久999久久 | av丝袜制服 | 狠狠狠色丁香婷婷综合激情 | 激情喷水| 亚洲高清91| 亚洲视频观看 | 国产精品久久视频 | 国产一区二三区好的 | 久久久精品久久日韩一区综合 | 国产精品观看在线亚洲人成网 | 欧美一区二区三区在线视频观看 | 国产精品毛片一区二区三区 | 国产精品一二三 | 91色一区二区三区 | 99这里都是精品 | 日韩视频一二三区 | 国产精品尤物视频 | 久久精品国产精品亚洲 | 99热最新地址 | 天天干天天搞天天射 | 天天草天天插 | 中文字幕在线高清 | 免费在线看成人av | 91女子私密保健养生少妇 | 色婷婷精品大在线视频 | 亚洲精品小区久久久久久 | 亚洲性少妇性猛交wwww乱大交 | av免费观看网站 | 中文字幕欧美日韩va免费视频 | 久久网站av| 色爱区综合激月婷婷 | 亚洲成色| 日本久久精品视频 | 亚洲国产大片 | 欧美激情精品久久久久久免费 | 99riav1国产精品视频 | 日韩在线字幕 | 久久精品中文视频 | 狠狠干夜夜操天天爽 | 99r在线精品 | 在线视频一区二区 | 色综合色综合久久综合频道88 | 免费日韩一区二区 | 91在线视频免费播放 | 亚洲综合在线五月天 | 国产一区免费观看 | 黄色国产成人 | 国产传媒一区在线 | 久久a v视频 | 在线亚洲激情 | 中文字幕在线播放日韩 | 国产一区二区高清视频 | 欧美精品免费一区二区 | 欧美性护士| 欧洲黄色片 | av大片网站 | 色视频在线观看免费 | 国产一区欧美日韩 | 美女av免费看 | 国产婷婷视频在线 | 麻豆影视网站 | 美女av免费看 | 91视频在线观看下载 | 麻豆国产精品永久免费视频 | 一本一本久久aa综合精品 | 日韩美女高潮 | 国产免费高清视频 | av 一区二区三区四区 | 99久久超碰中文字幕伊人 | 开心激情久久 | 久久综合婷婷国产二区高清 | 色资源中文字幕 | 精品v亚洲v欧美v高清v | 啪啪午夜免费 | 国产一级免费片 | 亚洲精品久久久久中文字幕二区 | 欧美一级久久久 | 色偷偷网站视频 | 久久极品| 人人爽人人射 | 夜夜躁狠狠躁日日躁视频黑人 | 国产精品久久麻豆 | 狠狠狠狠狠狠狠狠干 | 国产69精品久久99的直播节目 | 婷婷视频在线 | 精品一区二区三区在线播放 | 天天插日日插 | 久久99热精品这里久久精品 | 蜜桃视频日韩 | 久久免费激情视频 | 欧美精品乱码久久久久久按摩 | 国产手机视频在线播放 | 色综合久久中文字幕综合网 | 午夜10000| 亚洲视频aaa| 亚洲一区二区视频在线 | 又爽又黄又刺激的视频 | www.天天操.com| 青春草免费在线视频 | 成人三级av | 黄色片亚洲| 亚州av成人 | 在线免费av网站 | 91在线播放综合 | 丁香六月av| 国产中文字幕精品 | 中文字幕在线视频国产 | 免费日韩三级 | 久久免费一 | 亚洲精品三级 | 97超级碰碰 |