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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

S32K FTM(FlexTimer module)详解

發布時間:2023/12/16 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 S32K FTM(FlexTimer module)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介

FTM(FlexTimer)是由一個簡單的定時器——HCS08 定時器 PWM(TPM)模塊建立而來的,在飛思卡爾 8bit 微控制器上已經使用多年。Flextimer模塊應用領域包括馬達控制,照明控制和電源等。

FTM是一個2到8通道定時器,支持輸入捕獲,輸出比較,pwm信號發生和正交解碼功能。

2. Features

  • FTM source clock is selectable

  • 可選的FTM時鐘源

    • Source clock can be the FTM input clock, the fixed frequency clock, or an external clock.

    • 時鐘源可以是FTM輸入時鐘/固定頻率時鐘/外部時鐘。

    • Fixed frequency clock is an additional clock input to allow the selection of an on chip clock source other than the FTM input clock.

    • 固定頻率時鐘允許使用片上其他時鐘源作為時鐘輸入補充。

    • Selecting external clock connects FTM clock to a chip level input pin therefore allowing to synchronize the FTM counter with an off chip clock source

    • 選擇外部時鐘即連接FTM時鐘到外部管腳,允許使用外部時鐘同步FTM計數器。

  • Prescaler divide-by 1, 2, 4, 8, 16, 32, 64, or 128.

  • 預分頻支持1,2,4,8,16,32,64,128。

  • 16-bit counter

  • 16bit計數器。

    • It can be a free-running counter or a counter with initial and final value.

    • 自由運行計數器或擁有初始值和終止值的計數器。

    • The counting can be up or up-down.

    • 可以遞增或遞減。

  • Each channel can be configured for input capture, output compare, or edge-aligned PWM mode.

  • 每個通道可以配置為輸入捕獲、輸出比較或邊沿對齊PWM模式。

  • In Input Capture mode:

  • 輸入捕獲模式下:

    • The capture can occur on rising edges, falling edges or both edges.

    • 可以是上升沿、下降沿或邊沿捕獲。

    • An input filter can be selected for some channels. One unique prescaler is available for all filters.

    • 一些通道可以選擇輸入濾波器,所有的濾波器可選一個唯一的分頻器。

  • In Output Compare mode the output signal can be set, cleared, or toggled on match.

  • 在輸出比較模式,輸出信號在匹配觸發時可以置位,復位,或翻轉。

  • All channels can be configured for center-aligned PWM mode

  • 所有的通道可以配置為中心對齊PWM模式。

  • Each pair of channels can be combined to generate a PWM signal with independent control of both edges of PWM signal.

  • 每一對通道可以組合生成一個PWM信號,對PWM信號兩個邊沿進行獨立控制。

  • The FTM channels can operate as pairs with equal outputs, pairs with complementary outputs, or independent channels with independent outputs

  • FTM通道可以成對相同輸出,成對輸出互補,或各通道獨立輸出。

  • The deadtime insertion is available for each complementary pair.

  • 每個互補輸出可以設置死區。

  • Generation of match triggers.

  • 匹配觸發發生器(生成匹配觸發器??????)

  • Software control of PWM outputs.

  • 軟件可控的PWM輸出。

  • The polarity of each channel is configurable

  • 所有通道極性可配。

  • Up to 4 fault inputs for global fault control.

  • 最多支持4個故障輸入作為全局故障控制。

  • The generation of an interrupt per channel

  • 每個通道可產生中斷。

  • The generation of an interrupt when the counter overflows

  • 計數器溢出中斷。

  • The generation of an interrupt when the fault condition is detected.

  • 故障條件觸發中斷。

  • The generation of an interrupt when a register reload point occurs.

  • 寄存器重新加載點觸發中斷。

  • Synchronized loading of write buffered FTM registers.

  • FTM寫緩沖寄存器同步加載。

  • Half cycle and Full cycle register reload capacity.

  • 半周期/全周期寄存器重載能力。

  • Write protection for critical registers

  • 關鍵寄存器寫保護。

  • Backwards compatible with TPM.

  • 向后兼容TPM。

  • Testing of input capture mode.

  • 輸入捕獲模式測試。

  • Direct access to input pin states.

  • 輸入引腳狀態直接訪問。

  • Dual edge capture for pulse and period width measurement.

  • 用于脈沖寬度和周期測量的雙邊沿捕獲模式。

  • Quadrature decoder with input filters, relative position counting, and interrupt on position count or capture of position count on external event.

  • 帶有輸入濾波器的正交譯碼器,相對位置計數,位置計數中斷或位置計數捕獲。

  • The FTM channels can be selected to generate a trigger pulse on channel output instead of a PWM.

  • 可以選擇FTM通道來產生通道輸出的觸發脈沖,而不是PWM。

  • Dithering capability to simulate fine edge control for both PWM period or PWM duty cycle.

  • 抖動功能可模擬PWM周期或PWM占空比的精細邊沿控制。

3. S32K144 FTM結構框圖

?

Flextimer模塊圖,左上角為Flextimer基準時鐘信號,默認狀態為無時鐘選擇,即Flextimer計數器關閉。

右上角為時鐘分頻控制,可以控制Flextimer計數時鐘頻率。框圖中包括中斷控制,模式選擇,故障信號檢測以及輸出信號。

Flextimer工作模式包括:輸入捕獲,輸出比較,PWM波形輸出,正交解碼器。

FTM模塊的核心是一個16bit計數器,該計數器的時鐘源可以選擇,如果我們選擇由FTM來實現PWM,輸入捕捉,或者輸出比較,定時中斷,脈寬測量等功能,則一般選擇system clock。如果我們選擇由FTM實現對外部脈沖的計數,也可選擇外部時鐘,如果是外部編解碼器輸入的AB相脈沖,用于電機正反轉測速,則可以使用PHA和PHB輸入,由計數器自動加減計數。

每個FTM模塊擁有一個FTM Couter計數器,所有通道共用同一計數器。

  • CNTIN - 初始值

  • MOD - 結束值

三種計數方式

  • 遞增計數。

  • 先加后減,循環往復。

  • 正交解碼模式下自動遞增或遞減。

  • 4. 功能描述

    4.1 時鐘源

    • FTM時鐘

    • 固定頻率時鐘

    • 外部時鐘

    4.2 分頻

    支持1、2、4、8、16、32、64、128分頻。

    4.3 計數器

    16bit計數器

    • 向上遞增模式,主要用于EPWM。

      • CNTIN定義計數開始值,MOD定義技術終止值。FTM使能后會加載CNTIN值,累加計數直到達到MOD終止值。之后會重新裝載CNTIN計數開始值。當計數值重新加載CNTIN值時,TOF(計數器溢出標志位)置位。

    • 向上遞增再向下遞減循環模式,主要用于CPWM模式。

      • CNTIN定義計數開始值,MOD定義技術終止值。FTM使能后會加載CNTIN值,累加計數直到達到MOD終止值,之后計數器將遞減計數值直到計數值為CNTIN。之后會重復遞增遞減計數的過程。

    • 正交解碼模式,根據AB相序增減計數。

    4.4 通道模式

    下表顯示了通道的模式選擇

    ??

    每個通道都可以配置成輸入捕獲,輸出比較或者邊沿對齊PWM波輸出。

    輸入捕獲可以配置捕獲方式:上升沿、下降沿或者雙沿捕獲。

    一些通道可以配置輸入信號濾波。

    輸出比較模式下,輸出信號可以配置為輸出高或低或者每次匹配翻轉。

    所有通道都可以配置成PWM中心對齊輸出。

    每對通道均可以結合輸出PWM波。

    每對通道可以配置相同輸出,相反(互補)輸出或者作為獨立通道。

    每對互補通道可以提供死區插入功能。

    4.5 FTM操作模式

    4.5.1 邊沿對齊PWM(EPWM)模式

    在邊沿對齊PWM模式下, FTM計數器從FTM_CNTIN值向上計數到FTM_MOD值。當FTM計數器從MOD值變為CNTIN值時,所有FTM通道的信號都在邊緣對齊。 當QUADEN = 0, DECAPEN = 0, MCOMBINE = 0, COMBINE = 0, CPWMS = 0和MSnB =1時,選擇邊沿對齊PWM模式。 邊沿對齊PWM周期由MOD – CNTIN + 0x0001決定,脈沖寬度(或占空比)由 CnV – CNTIN or MOD – CNTIN – CnV決定,具體取決于控制位 ELSnB:ELSnA。

    在中,示波器通道CH1, CH2, CH3和 CH4 分別代表FTM模塊的FTM_CH0,FTM_CH1, FTM_CH2和 FTM_CH3。第一個通道對(FTM_CH0/FTM_CH1)和第二 個通道對(FTM_CH2/FTM_CH3)在互補模式下工作,分別具有50%和25%的占空比。 第二個通道對(FTM_CH2/FTM_CH3)演示了邊緣對齊。

    4.5.2 中心對齊PWM(CPWM)模式

    在中心對齊PWM模式下, FTM計數器從FTM_CNTIN向上計數到FTM_MOD,然后從FTM_MOD向下計數到FTM_CTNIN。所有FTM通道的信號在FTM計數器達到FTM_MOD值的點對齊。當 QUADEN = 0, DECAPEN = 0, MCOMBINE = 0, COMBINE = 0和CPWMS = 1時,選擇中心對齊PWM模式。

    中心對齊PWM的占空比確定為 2 × (CnV - CNTIN)。周期確定為 2 × (MOD - CNTIN)。

    ?

    圖中,示波器通道CH1、 CH2、 CH3和CH4分別代表FTM模塊的FTM_CH0、FTM_CH1、 FTM_CH2和FTM_CH3。第一個通道對(FTM_CH0/FTM_CH1)和第二 個通道對(FTM_CH2/FTM_CH3)在互補模式下工作, 分別具有50%和25%的占空比。 第二個通道對(FTM_CH2/FTM_CH3)演示了中心對齊。

    4.5.3 互補模式和死區時間插入

    FTM模式支持互補模式。如果通過FTM_COMBINE寄存器中的COMP位啟用互補模式,則輸出信號僅由偶數FTM通道生成。奇數輸出信號由互補邏輯生成,作為偶數FTM通道的補碼。 對于FTM的每個通道對,是否輸出互補信號是可以單獨配置的。

    ?為避免短路,死區時間必須插入互補信號中。死區插入由死區邏輯提供,遵循互補邏輯。該功能可以通過FTMxCOMBINEm寄存器中的DTEN位使能。死區邏輯將每個上升沿延遲一段時間,該時間由FTM_DEADTIME寄存器設置。死區時間由兩部分組成,前兩個最高有效位DTPS[1:0]定義系統時鐘的預分頻器。位DTVAL[5:0]使用預分頻時鐘定義占空比值。 互補模式和死區插入應用于邊沿對齊PWM和中心對齊PWM模式,如前幾節所述。

    4.5.4 組合模式

    組合模式提供了更高的靈活性,因為PWM通道( n)輸出是通過組合偶數通道( n)和相鄰的奇數通道(n+1)產生的。這意味著偶數和奇數通道必須在互補模式下工作。

    組合模式僅允許使用遞增計數器、非對稱PWM或相移PWM來生成EPWM和CPWM。相移PWM通常用于移相全橋轉換器和電機控制應用,其中三相定子電流由采樣電阻得到。有關更多詳細信息,請參閱使用Kinetis KEA128的三相 BLDC電機無傳感器控制參考設計(文檔DRM151)。

    當QUADEN = 0, DECAPEN = 0, MCOMBINE = 0, COMBINE = 1和CPWMS = 0時,選擇組合模式。

    要生成具有高真脈沖的相移PWM,請將控制位設置為ELSnB:ELSnA = 1: 0。

    void Phase_Shifted_PWM() {/* Enable clock for FTM1 */PCC->PCCn[PCC_FLEXTMR1_INDEX] = PCC_PCCn_PCS(6) | PCC_PCCn_CGC_MASK;/* Enable clock for PORTB */PCC->PCCn[PCC_PORTB_INDEX] = PCC_PCCn_CGC_MASK;/* Enable clock for PORTD */PCC->PCCn[PCC_PORTD_INDEX] = PCC_PCCn_CGC_MASK;PORTB->PCR[2] = PORT_PCR_MUX(2); // Set PTB2 for FTM1 – Channel0 PORTB->PCR[3] = PORT_PCR_MUX(2); // Set PTB3 for FTM1 – Channel1 PORTD->PCR[8] = PORT_PCR_MUX(6); // Set PTD8 for FTM1 – Channel4 PORTD->PCR[9] = PORT_PCR_MUX(6); // Set PTd9 for FTM1 –Channel5/* Enable combine, complementary mode and dead-time for channel pair CH0/CH1 and CH4/CH5 */FTM1->COMBINE = FTM_COMBINE_COMBINE0_MASK | FTM_COMBINE_COMP0_MASK | FTM_COMBINE_DTEN0_MASK | FTM_COMBINE_COMBINE2_MASK | FTM_COMBINE_COMP2_MASK | FTM_COMBINE_DTEN2_MASK;FTM1->CONTROLS[0].CnSC=FTM_CnSC_ELSB_MASK; // Select high-true pulses FTM1->CONTROLS[1].CnSC=FTM_CnSC_ELSB_MASK; // Select high-true pulsesFTM1->CONTROLS[4].CnSC=FTM_CnSC_ELSB_MASK; // Select high-true pulses FTM1->CONTROLS[5].CnSC=FTM_CnSC_ELSB_MASK; // Select high-truepulses/* Set Modulo (10kHz PWM frequency @112MHz system clock) */FTM1->MOD = FTM_MOD_MOD(11200-1); // Set moduloFTM1->CONTROLS[0].CnV=FTM_CnV_VAL(2800); // Set channel ValueFTM1->CONTROLS[1].CnV=FTM_CnV_VAL(8400); // Set channel Value FTM1->CONTROLS[4].CnV=FTM_CnV_VAL(5600); // Set channel ValueFTM1->CONTROLS[5].CnV=FTM_CnV_VAL(11200); // Set channel Value FTM1->CNT = 0; ?// Counter reset/* Insert DeadTime (1us) */FTM1->DEADTIME = FTM_DEADTIME_DTPS(3) | FTM_DEADTIME_DTVAL(7);FTM1->SC|=FTM_SC_CLKS(1)|FTM_SC_PWMEN0_MASK | FTM_SC_PWMEN1_MASK | FTM_SC_PWMEN4_MASK | FTM_SC_PWMEN5_MASK; // Select clock and enable PWM }

    圖中,示波器通道 CH1、 CH2、 CH3和CH4分別代表FTM1模塊通道FTM1_CH0、FTM1_CH1、 FTM_CH4和FTM_CH5。第一個通道對( FTM_CH0/FTM_CH1)和第二個通道對( FTM_CH4/FTM_CH5)都在互補模式下工作,占空比為50%。第二個通道對(FTM_CH4/FTM_CH5)與第一個通道對(FTM_CH0/FTM_CH1)相移90°。

    圖中還顯示了PWM生成的靈活性,因為50%的占空比可以根據特定的應用要求進行 邊沿對齊、中心對齊或各種偏移。

    4.5.4B 改進組合模式

    改進的組合PWM模式是為了生成周期不變但是占空比會變得PWM。通道n和n+1結合生成PWM信號,通常通道n匹配邊沿是固定的,通道n+1匹配邊沿可以被修改。

    一般使用多個通道時,配置每個通道n的匹配邊沿帶有固定偏移的輸出,這樣在產生照明PWM控制信號時是有用的,當需要的邊緣不與其他對一致,以幫助消除噪聲產生。

    4.5.5 單邊輸入捕獲模式

    FTM 捕獲模式主要用于測量信號的脈沖寬度或周期。 FTM 捕獲模式的另一個選擇是檢測外部信號的上升/下降沿并產生中斷以通知外部事件出現。 FTM 捕獲模式也用于BLDC電機控制應用,其中霍爾傳感器用于檢測轉子位置并計算轉子速度,從而可以穩定速度環。 霍爾傳感器連接到獨立的FTM (FTM_CHx) 的通道。然后, FTM 可以檢測霍爾傳感器信號的下降沿和上升沿并生成捕獲中斷。在捕獲中斷程序中, PWM 信號的占空比會根據霍爾傳感器邏輯進行更新。 當 DECAPEN = 0、 MCOMBINE = 0、 COMBINE = 0、 CPWMS = 0、 MSnB:MSnA =0:0 且 ELSnB:ELSnA ≠ 0:0 時,選擇單邊沿捕獲模式。 要測量信號的脈沖寬度或周期,請選擇FTM模塊 FTM_CHx 的輸入通道,并通過控制位 ELSnB:ELSnA 選擇邊沿觸發。當通道輸入上出現所選邊沿時, FTM計數器的當前值將被存儲到 CnV 寄存器中并產生通道中斷(如果 CH(n)IE = 1)。在例程中斷中,將 CnV 寄存器的值保存到一個變量中,并將當前值與前一個中斷例程中保存的值進行區分。如果所選捕獲模式在上升沿 (ELSnB:ELSnA= 0:1) 或下降沿 (ELSnB:ELSnA= 1:0) 觸發,則差值等于信號周期。如果所選的捕獲模式在兩個邊沿都觸發 (ELSnB:ELSnA = 1:1),則差值等于被測信號的脈沖寬度。

    此示例顯示FTM0的輸入捕獲模式,該模式測量通過FTM0_CH0通道的輸入信號的時間周期。

    在圖 5中,示波器通道CH0表示輸入到FTM0_CH0通道的測試信號。 每次出現上升沿,都會產生捕獲中斷,并在中斷程序中計算信號周期。

    4.5.6 雙邊捕獲模式

    雙邊沿捕獲模式使用兩個 FTM 通道,可以測量信號的正極或負極脈沖寬度。在此模式下,信號必須通過偶數 FTM 通道輸入,而忽略奇數通道。

    DECAPEN = 1 時選擇雙邊沿捕獲模式。 FTM 的雙邊沿捕獲模式可以工作在一次性捕獲模式或連續捕獲模式。 MS(n)A = 0 時選擇一次性捕獲模式。如果使能 DECAP 位,則捕獲邊沿。對于每次新的測量,必須清除 CH(n)F 和 CH(n+1)F,并且必須再次設置 DECAP位。 MS(n)A = 1 時選擇連續捕獲模式。在這種模式下,如果 DECAP 位被設置,則邊沿被連續捕獲。對于每次新的測量,都需要清除 CH(n)F 和 CH(n+1)F 位。

    要測量被測信號的正極脈寬(無論是單次模式還是連續模式),通道(n)必須配置為捕獲上升沿( ELS( n) B: ELS( n) A = 1:0) 和通道 (n+1) 必須配置為捕獲下降沿(ELS(n+1)B:ELS(n+1)A = 0:1)。當檢測到被測信號的第二個下降沿時, CH(n+1)F 置位,DECAP 位清零,并產生中斷(如果 CH(n+1)IE=1)。在中斷程序中,將C(n+1)V和C(n)V寄存器中保存的值相減,確定被測信號的正極脈寬,并清除CH(n+1)F 位。

    如 果 應 用 需 要 測 量 信 號 的 負 極 性 脈 寬 , 則 通 道 (n) 必 須 配 置 為 捕 獲 下 降 沿(ELS(n)B:ELS(n)A = 0:1)和通道(n) +1) 必須配置為捕獲上升沿 (ELS(n+1)B:ELS(n+1)A =1:0)。 要確定被測信號周期,通道 (n) 和通道 (n+1) 必須在相同的邊沿上敏感。

    此示例顯示了 FTM0 模塊的雙邊沿捕獲模式,該模式用于確定兩個輸入信號的正脈沖度。

    圖中顯示了通過 FTM0_CH0 和 FTM0_CH2 通道輸入 FTM0 模塊的兩個測量信號。它們的正極性脈沖寬度為 17.8 μs 和 50 μs。

    4.5.7 輸出比較模式

    輸出比較模式下,FTM可以產生位置、極性、持續時長和周期可編程的時間脈沖。當計數器值匹配CnV寄存器的值,通道n輸出可以被設置、清除或翻轉。

    當一個通道被配置為翻轉模式,通道輸出前一個值會保持,直到下一個比較事件發生。

    4.5.8 捕獲測試模式

    捕獲測試模式允許對CnV寄存器、FTM計數器以及FTM計數器與CnV寄存器之間的對接邏輯進行測試。

    該模式下,所有通道必須配置為輸入捕獲模式,FTM計數器必須配置為向上遞增。

    當捕獲測試模式被啟用(CAPTEST = 1)時,FTM計數器被凍結,任何對CNT寄存器的寫入都直接更新FTM計數器;見下圖。

    在寫入后,所有CnV寄存器都將寫入的值更新為CNT寄存器,并設置CHF位。因此,根據FTM計數器的配置,它的下一個值將被更新。它的下一個值取決于CNTIN、MOD和寫入FTM計數器的值。

    4.5.9 DMA

    支持CHF通過DMA傳輸

    4.6 其他特性

    4.6.1 屏蔽、反相和軟件控制功能

    屏蔽和軟件控制功能強制 FTM 通道的輸出處于非活動/需要狀態,保持通道輸出的恒定邏輯。 這些 FTM 功能可以通過軟件打開/關閉電源設備。反相功能翻轉 FTM 通道對的信號。 屏蔽功能用于 BLDC 電機控制應用。三相 BLDC 電機通常由配備六個 MOSFET 或六個 IGB(絕緣柵雙極晶體管)的三相功率逆變器供電。 BLDC 電機常用的控制技術是 6 步換向法。在這種控制技術中,兩相通電,第三相斷開。因此,必須關閉相應逆變器支路的兩個功率器件。 FTM 模塊的屏蔽特性可以在這個應用程序中實現來實現這樣的功能。 每個FTM 通道在FTM_OUTMASK 寄存器中有一個對應的位。對 OUTMASK 寄存器的任何寫操作只是將值鎖存到其寫緩沖區中。

    當FTM時鐘被禁用(在FTM_SYNC[SYNCHOM]=0時在FTM輸入時鐘的每個上升沿)或著在軟件或硬件同步更新FTM_SYNCONF 寄存器中的 SWOM 位或 HWOM 位時候,FTM 通道的輸出邏輯可以在寫入 FTM_OUTMASK 寄存器后立即更新(參見Section 4.3,“Updating FTM registers”)。 當 FTM_CHx 通道被屏蔽時,根據 FTM_POL 寄存器中使能的位來控制輸出邏輯保持高/低。

    軟件控制功能通過設置或清除 FTM_SWOCTRL 寄存器中的 CHxOC 位來強制 FTM 通道的輸出為軟件定義的值。如果 CHxOC 位清零, FTM 通道的輸出仍由 PWM 或其他源驅動。如果CHxOC 位被置位,相應的 FTM 通道的輸出受軟件影響。 FTM_SWOCTRL 寄存器中的 CHxOCV 位控制各個 FTM 通道的邏輯。當 CHxOCV = 1 時, FTM_CHx 通道的輸出為1,否則為 0。

    反相功能通常用于直流電機控制應用。直流電機由 H 橋供電,一個通道對(FTM_CH0/CH1) 連接到一個分支,而另一對通道 (FTM_CH2/CH3) 連接到另一個分支。兩個通道對都在互補模式下工作。此類應用要求對角線功率器件同時開啟/關閉,這意味著 FTM_CH0 和FTM_CH3 必須具有相同的時序。為了保證這樣的條件, FTM_CH1 和 FTM_CH3 必須工作在反相模式。 FTM_INVCTRL 寄存器中的 INVmEN 位使能相應通道對的反相。從寫入緩沖區的值更新FTM_INVCTRL 寄存器的值與更新FTM_OUTMASK 寄存器值的方式相同。

    4.6.2 故障控制功能

    FTM 模塊的故障控制在電機控制應用中發揮著重要作用,因為它提供了在關鍵時刻保護功率設備以及整個電力驅動系統的機會,當出現過溫、過壓、 或發生過電流。在這種情況下,故障信號可以通過傳感器或特殊電路產生。一旦在 FTM 故障引腳的輸入端檢測到故障信號,故障控制就能夠停止所有 PWM 通道。接收到故障信號后可以產生中斷以減輕故障損失。

    所有 FTM 中斷源(故障中斷、 FTM 計數器溢出和重裝載中斷、通道比較事件中斷和捕獲中斷)共享相同的中斷向量號。當出現故障信號時, FTM 通道的輸出被禁用并保持在FTM_POL 寄存器中定義的安全邏輯電平。例如,如果 POL0 = 1并且存在故障,則FTM_CH0 被禁用并強制為高電平。相反,如果 POL0 = 0 并且存在故障,則 FTM_CH0 被禁用,但被強制為低電平。

    FTM 有多個通道。然而, FTM 不能通過特定的故障信號來禁用特定的通道。故障信號是由所有進入的故障信號OR 運算的結果。 FTM 通道是否可以被故障信號禁用取決于FTM_COMBINE 寄存器中的 FAULTENx 位。由此產生的故障信號可以禁用所有 FTM 通道或僅禁用偶數通道 (FTM_CH0/CH2/CH4/CH6),這取決于 FTM_MODE 寄存器中的FAULTM 位字段 。

    PWM 通 道 的 輸 出 恢 復 有 兩 種 方 式 : FAULTM[1:0]=11 設 置 的 自 動 故 障 清 除 和FAULTM[1:0]=0:1或1:0時的手動故障清除。從下一個PWM周期中的安全狀態恢復PWM信號,在選擇自動故障清除模式時,無需任何軟件干預。要在手動清除模式下恢復 PWM 信號,必須清除 FTM_MODE 寄存器中的 FAULTF 位,然后在下一個 PWM 周期使能 PWM。

    在以下代碼示例中,啟動了兩個 FTM 模塊以演示故障控制功能。 FTM0 配置為中心對齊 PWM模式, FTM1 用于生成故障信號,該信號通過故障引腳 FTM0_FLT0 從外部影響FTM0 通道的輸出。

    在圖中,示波器通道 CH1、 CH2 和 CH3 分別代表 FTM0 模塊通道 FTM0_CH0、FTM0_CH1 和 FTM0_CH2。 FTM0_CH0 和 FTM0_CH1 工作在互補和組合模式,與FTM0_CH2 和 FTM0_CH3 相同。通道 CH4 顯示外部故障信號(由 FTM1 產生),其頻率為 FTM0 頻率的十分之一。 當在 FTM0_FLT0 故障輸入引腳上檢測到上升沿時,所有 FTM0通道都被強制為安全(低)邏輯。 圖 11 還顯示,當故障輸入信號為 0 時,所有 FTM0 通道都在下一個計數器周期恢復。

    4.6.3 更新FTM寄存器

    在電機控制或開關電源應用中,施加在負載上的電壓必須由 PWM 占空比控制。 PWM占空比可以通過在 FTM_CnV 和 FTM_CNTIN 寄存器中設置適當的值來控制。某些應用還需要更改 PWM 的周期。該周期由 FTM_MOD 寄存器中的值控制。

    FTM_CnV、 FTM_CNTIN 和 FTM_MOD 是雙緩沖寄存器,這意味著對這些寄存器的寫入只是將它們的值鎖存到它們的寫入緩沖區中。 FTM 模塊的雙緩沖寄存器有通道 (n) 值(FTM_CnV) 、 計 數 器 初 始 值 (FTM_CNTIN) 、 模 數 (FTM_MOD) 、 半 周 期 寄 存 器(FTM_HCR)、輸出掩碼 (OUTMASK)、軟件輸出控制 (SWOCTRL ) 和反相控制寄存器(INVCTRL)。然后可以根據選擇的更新方案用它們的緩沖值更新雙緩沖寄存器。 S32K 器件上的當前實現更新寄存器方法有使用半周期或全周期重載策略、軟件或硬件 PWM 同步,或者直接禁用緩沖器。下表總結了所有雙緩沖寄存器及其更新方法:

    更新雙緩沖FTM寄存器

    Update techniqueDouble-buffered FTM registersNote
    Initialization stage CLKS[1:0] = 0:0CnV, CNTIN, MOD, HCRThe registers are loaded immediately.
    TPM compatibility CLKS[1:0] ≠ 0:0, FTMEN = 0CnV, CNTIN, MOD, HCRThe CNTIN register is loaded immediately and the CnV, MOD, and HCR registers at the end of the FTM counter period. The CnV register is loaded immediately in the output compare mode.
    Software synchronization CLKS[1:0] ≠ 0:0, FTMEN=1, SYNCMODE = 1CnV, CNTIN, MOD, HCR (SWWRBUF = 1)The registers are updated by the software trigger-enabling SWSYNC bit. If SWRSTCNT = 1, the software trigger resets the FTM counter reset.
    ..SWOCTRL (SWOC = 1, SWSOC = 1)The registers are updated by the software trigger-enabling SWSYNC bit.
    ..OUTMASK (SYNCHOM = 1, SWOM = 1)..
    ..INVCTRL (INVC = 1, SWINVC = 1)..
    Hardware synchronization CLKS[1:0] ≠ 0:0, FTMEN=1, SYNCMODE = 1CnV, CNTIN, MOD, HCR (HWWRBUF = 1)The registers are updated when TRIGn = 1 and the hardware trigger is detected at the trigger (n) input signal. If HWTRIGMODE = 1, the hardware trigger clears the TRIGn bit.
    ..SWOCTRL (SWOC = 1, HWSOC = 1)..
    ..OUTMASK (SYNCHOM = 1, HWOM = 1)..
    ..INVCTRL (INVC = 1, HWINVC = 1)..
    Half and full cycle reload strategy CLKS[1:0] ≠ 0:0, FTMEN=1,CnV, CNTIN, MOD, HCRIn the up-counting mode, the synchronization points are when the FTM counter changes from MOD to CNTIN, enable CNTMIN, or CNTMAX bit. For the up/down-counting mode, see Table below.

    向上/向下計數模式下的重新加載機會

    FTM_SYNC bitsReload opportunities selected
    CNTMIN = 0 and CNTMAX = 0When the counter turns from up to down (compatibility mode).
    CNTMIN = 1 and CNTMAX = 0When the counter turns from down to up.
    CNTMIN = 0 and CNTMAX = 1When the counter turns from up to down.
    CNTMIN = 1 and CNTMAX = 1When the counter turns from down to up and when the counter turns from up to down.

    (1)在初始化階段更新FTM寄存器

    (2)半周期和全周期重裝策略

    (3)通過軟件觸發更新FTM寄存器--軟件同步

    (4)通過硬件觸發更新FTM寄存器--硬件同步

    4.6.4 全局時基(GTB)

    芯片上有多個FTM,但多個FTM模塊是獨立的。如果應用需要的 PWM 通道多于一個FTM 所能提供的通道數,則可以使用多個 FTM 模塊,但它們必須同步。兩個(或多個)FTM 模塊的同步意味著它們的計數器在任何時刻都具有相同的值。

    S32K 設備提供了 GTB 機制來同步多個 FTM。 GTB 是由主 FTM 生成的同步信號,它啟動所有使用的 FTM 的計數器。使用 GTB 功能時必須滿足這兩個條件:每個 FTM 必須具有相同的時鐘源,并且每個 FTM 必須同時啟動。

    要使能 GTB 功能,請對每個參與的 FTM 模塊執行以下步驟:

  • 停止FTM計數器(將00b寫入SC[CLKS])。

  • 將FTM編程為預期配置。 FTM 計數器模式必須在所有參與模塊中保持一致。

  • 向CONF[GTBEEN]寫入1,同時向CONF[GTBEOUT]寫入0。

  • 在 SC[CLKS] 中選擇預期的 FTM 計數器時鐘源。 所有參與模塊的時鐘源必須一致。

  • 重置FTM計數器(向CNT寄存器寫入一些值)。

    以下示例顯示了FTM0 和 FTM2 的同步。兩個 PWM 的占空比都調整為非常低的值,以更好地展示 GTB 機制的功能。

  • 在圖 16 和圖 17 中,示波器通道 CH1、 CH2、 CH3 和 CH4 分別代表 FTM0 和 FTM2模塊的通道 FTM0_CH0、 FTM0_CH1、 FTM2_CH0 和 FTM2_CH1。 FTM0_CH0 和FTM0_CH1 工作在互補模式,與 FTM2_CH0 和 FTM2_CH1 相同。調整示波器的時基,以便在示波器顯示屏上可以清楚地看到通道 FTM0 和 FTM2 的 1% 占空比。如果全局時基未激活,則所使用的 FTM 的加減計數器不會完全對齊,它們的通道信號也不會對齊(參見圖16)。通過將 GTB 功能應用于 FTM 模塊來處理此類問題(參見圖 17)。 注意 GTB 功能不提供 FTM 計數器的連續同步,這意味著 FTM 計數器可能會在 FTM 操作期間失去同步。 GTB 功能僅允許 FTM 計數器啟動時同步 。

    4.6.5 ADC由FTM和PDB模塊觸發

    在電機控制應用以及開關電源應用中,有必要測量 PWM 信號中心的電流。功率器件在這個瞬間沒有切換,因此分流電阻上檢測到的壓降是穩定的。

    S32K 設備的所有四個 FTM 模塊都有多達八個通道。六個通道通常足以生成控制常用三相電機所需的 PWM 信號。 FTM 模塊的其余兩個通道隨后可用于控制 ADC 轉換的時間點。

    FTM 模塊的觸發信號可以在 FTM_EXTTRIG 寄存器中選擇。所有 FTM 通道均可用于觸發 ADC 模塊。例如,如果在 FTM_EXTTRIG 寄存器中設置 CH0,則 FTM 計數器計數,直到達到寫入 C0V 寄存器中的值。此時, CH0 產生一個信號,在每個 FTM 計數器周期觸發 ADC 模塊。如果 FTM_EXTTRIG 寄存器中的 INITTRIG 位被設置,則每次 FTM 計數器達到 CNTIN 寄存器的值時都會產生觸發信號。

    ADC 模塊的默認和建議硬件觸發方案是通過可編程延遲塊 (PDB)。 S32K配備了兩個成對工作的 ADC 模塊和兩個 PDB 模塊。這意味著 PDB0 與 ADC0 鏈接, PDB1 與 ADC1 鏈接。每個 PDB 模塊都可以由軟件或硬件觸發。 FTM 模塊是可以通過 TRGMUX 寄存器TRGMUX_PDB0 和 TRGMUX_PDB1 選擇的觸發源之一。

    要在中心對齊 PWM模式下 并通過 FTM0 到 PDB0 觸發 ADC0,請執行以下步驟:

  • 初始化FTM0模塊為中心對齊PWM模式并使能FTM0_EXTTRIG寄存器中的 INITTRIGEN 位產生ADC0模塊的硬件觸發信號。

  • 通過向TRGMUX_PDB0寄存器中的SEL0位域寫入0x16,配置TRGMUX模塊由 FTM0通過PDB0模塊觸發ADC0。

  • 通過將適當的值寫入 PDB0_MOD 和 PDB0_CH0DLY0 寄存器,延遲 PDB0 模塊的 FTM0 初始化觸發,以在 PWM 周期的中心觸發 ADC0。

  • 初始化ADC0模塊,使能ADC0_SC2寄存器中的ADTRG位,由FTM0模塊觸發 ADC0。 以下代碼示例演示了 FTM0、 PDB0 和 ADC0 模塊的配置,其中 FTM0 用于生成中心對齊 PWM信號并通過 PDB0 模塊觸發 ADC0。

  • 在圖中,示波器通道 CH1 和 CH2 分別代表 FTM0 通道 FTM0_CH0 和 FTM0_CH1。通道對 FTM0_CH0/FTM0_CH1 工作在互補模式,與通道對 FTM0_CH2/FTM0_CH3 相同。示波器通道 CH3 和 CH4 演示了 FTM0、 PDB0 和 ADC0 模塊之間的互連。通道 CH3 表示每次 FTM0 計數器達到 CNTIN 寄存器的值時 PDB0 中斷程序中讓PTD2 引腳翻轉,每次ADC0 轉換完成(COCO = 1)時,通道 CH4 顯示 ADC0 中斷程序中讓 PTD3 引腳翻轉。FTM0 觸發信號由 PDB0 模塊延遲,以便 ADC0 轉換發生在 PWM 信號的中心。

    4.6.6 精細控制

    FTM實現了一個分數延遲,以實現對產生的PWM信號的精細分辨率控制。抖動可用于需要一個單位以上的FTM計數器分辨率的應用程序。

    支持兩種抖動方式:PWM周期抖動和邊沿抖動

    4.6.6.1 PWM周期抖動

    5. FTM的寄存器

    5.1 寄存器特性

    • 寄存器具有buffer,寫入后并不能立即更新。

    • 系統設置載入點(load point),配合軟硬件觸發來從緩沖器更新寄存器的值。

    • 很多寄存器具有寫保護功能。

    5.2 寄存器

    5.2.1 狀態和控制寄存器(FTMx_SC)

    • TOF

    • TOIE

    • CPWMS

    • CLKS

    • PS

    5.2.2 計數器(FTMx_CNT)

    向該寄存器寫入任何值將會使該寄存器回到初始設定值。

    BDM模式下,FTM計數器被凍結。

    5.2.3 模數寄存器(FTMx_MOD)

    5.2.4 通道n狀態及控制寄存器(FTMx_CnSC)

    每個通道都有一個CnSC寄存器。該寄存器中包含通道中斷標志位、中斷使能控制位、通道設置以及引腳功能設置。

    • CHF

    • CHIE

    • MSB/MSA

    • ELSB/ELSA

    • DMA

    • 提前提到的 DECAPEN/COMBINE

    5.2.5 通道n計數值寄存器(FTMx_CnV)

    每個通道有一個CnV寄存器。

    輸入捕獲模式下

    當捕捉到設置的邊沿時,此時FTM計數器的值自動保存到CnV寄存器中,該值可用于反映捕捉事件發生的時刻。

    輸出模式下

    Cnv寄存器保存輸出匹配值,該值用于和FTM計數器的值進行比較,當相等時,則比較成功。

    在輸入捕捉、捕捉測試和雙邊沿捕捉模式下,任何對該寄存器的寫入操作都無效。在輸出模式下,寫入該寄存器的值會先鎖存到緩沖器內,何時更新寄存器更新設置有關。

    5.2.6 計數器初始值寄存器(FTMx_CNTIN)

    該寄存器保存FTM計數器的初始值。

    5.2.7 捕捉和比較狀態寄存器(FTMx_STATUS)

    該寄存器中包含了每個通道的FTMx_CSC寄存器中的CHnF位的拷貝,以方便編程。這樣一次就可以讀出一個FTM模塊的所有通道的標志位。

    5.2.8 特性模式選擇寄存器(FTMx_MODE)

    該寄存器主要設置錯誤中斷、錯誤控制、捕捉測試模式、PWM同步、寫保護、通道輸出初始化、FTM增強特性使能。這些控制和所有通道都有關。

    • FAULTIE:錯誤中斷使能。

    • FAULTM:定義錯誤控制模式。

    • CAPTEST:捕捉測試使能。

    • PWMSYNC:PWM同步模式,即如何將某些寄存器的值從Buffer中更新的一種機制。

    • WPDIS:寫保護禁止,與WPEN相反。

    • INIT:通道輸出初始化。

    • FTMEN:FTM使能。

    5.2.9 同步寄存器(FTMx_SYNC)

    該寄存器用于設置PWM同步。一個同步事件能夠執行MOD,CV,OUTMASK寄存器的同步,即使用緩沖器中的值更新這幾個寄存器,這是FTM計數器也可以重新初始化。當FTMEN=1時,該寄存器必須合理設置。

    • SWSYNC:PWM同步軟件觸發。

    • TRIG2:PWM同步硬件觸發器2。使能硬件觸發器2觸發PWM同步,觸發器2輸入引腳上出現上升沿時硬件觸發。

    • TRIG1:PWM同步硬件觸發器1。使能硬件觸發器2觸發PWM同步,觸發器1輸入引腳上出現上升沿時硬件觸發。

    • TRIG0:PWM同步硬件觸發器0。使能硬件觸發器2觸發PWM同步,觸發器0輸入引腳上出現上升沿時硬件觸發。

    • SYNCHOM:輸出屏蔽同步,選擇OUTMASK寄存器是否從緩沖器里更新。

    • RENINT:FTM計數器重新初始化。

    • CNTMAX:最大載入點使能,當觸發事件發生后,知道FTM計數器達到某一個值時,這一時刻才會發生更新寄存器值的同步,這一時刻就是載入點。

      當該位為1時,當FTM計數器達到最大值時,即MOD值,這一時刻將作為一個同步的載入點。

    • CNTMIN:最小裝載點使能。當該位為1時,當FTM計數器達到最小值時,即CNTIN值,這一時刻將作為一個同步的載入點。

    5.2.10 通道輸出初始狀態(FTMx_OUTINIT)

    • CHxOI:通道x輸出初始值。

    5.2.11 輸出屏蔽寄存器(FTMx_OUTMASK)

    • CHxOM:通道x輸出屏蔽

    5.2.12 通道聯合功能寄存器(FTMx_COMBINE)

    該寄存器包含:錯誤控制、同步、死區插入、雙邊沿捕捉模式、補償、雙通道聯合等功能。該寄存器在使用雙通道聯合功能時,主要是非對稱PWM輸出,雙通道互補輸出,雙邊沿捕捉等功能時需要合理設置。

    • FAULTENn:使能通道2n和2n+1的錯誤控制。

    • SYNCENn:使能寄存器C(2n)V和C(2n+1)V的PWM同步,即這兩個寄存器能否被觸發事件觸發更新。

    • DTENn:死區使能。

    • DECAPn:雙邊沿捕獲。(何為通道的雙邊沿)

    • COMPn:使能通道2n和2n+1的互補模式,即兩個通道波形相反。

    • COBINEn:通道2n和2n+1聯合設置。只有COMBINEn=1,才可使用上面那些位設置的功能。

    5.2.13 死區插入控制寄存器(FTMx_DEADTIME)

    該寄存器設置死區時間分頻系數和死區值。所有的FTM通道都使用這個時鐘分頻和死區值。

    • DTPS:分頻設置。死區時間的定時也是由對BusClock計數實現的,DTPS對BusClock分頻的設置。

    • DTVAL:DTVAL設置對DTPS分頻后的時鐘計數值以確定死區插入的時間。死區插入的時間=DTPS x DTVAL x 總線時鐘周期。

    5.2.14 通道極性寄存器(FTMx_POL)

    當各通道處于非活動狀態,給寄存器設置各通道非活動狀態下的值。

    5.2.15 輸入捕捉濾波控制寄存器(FTMx_FILTER)

    該寄存器設置輸入通道的濾波值,通道4、5、6、7無輸入濾波器。

    濾波模式一般只在輸入捕捉時使用,當啟用濾波功能時,如果輸入端發生變化,則濾波器內部的5bit計數器開始累加計數,一旦溢出,輸入端變化才提交給邊沿檢測器。如果計數過程中,輸入端再次發生相反變化,則計數器會被復位并重新開始計數,這樣一些比過濾時間短的脈沖則會被視為干擾且不會提交給邊沿計數器,只有濾波模塊計數期間保持穩定的信號才會提交給邊沿計數器。

    5.2.16 正交解碼控制和狀態寄存器(FTMx_QDCTRL)

    正交解碼一般用于正反向脈沖計數,由旋轉編碼器輸入A相和B相脈沖,由FTM模塊根據相位自動增加或減少。在電機正反轉測速時非常有用。

    • PHAFLTREN:A相輸入濾波使能設置。

    • PHBFLTREN:B相輸入濾波使能設置。

    • PHAPOL:A相輸入極性選擇。

    • PHBPOL:B相輸入極性選擇。

    • QUADMODE:正交解碼模式。

    • QUADIR:正交解碼模式下的FTM計數方向狀態位,查詢該位可獲知當前計數方向。

    • TOFDIR:正交解碼模式下FTM計數器溢出方向。在溢出時,查詢該位可獲知溢出方向。

    • QUADEN:正交編解碼模式使能位。

    5.2.17 設置寄存器(FTMx_CONF)

    • GTBEOUT:全局時間基準輸出,使能全局時間基準信號給其他FTM。

    • GTBEEN:全局時間基準使能,設置FTM使用一個其它FTM模塊產生的外部的全局時間基準。

    • BDMMODE:選擇FTM在BDM模式下的行為。

    • NUMOF:設置計數器溢出次數和TOF標志置位次數的比值,NUMTOF=n,每溢出n+1次,TOF置位一次。

    5.2.18 同步設置寄存器(FTMx_SYNCONF)

    該寄存器主要設置軟件觸發和硬件觸發對于某些寄存器的影響。

    5.2.19 FTM反相設置寄存器(FTMx_INVCTRL)

    該寄存器中的各位設置通道2n和通道2n+1顛倒使用,即n通道成為n+1通道的輸出,n+1通道輸出n通道的輸出。可用于控制電機正反轉切換。該功能在雙通道聯合互補輸出時可用。

    • INVnEN:通道2n和通道2n+1切換輸出使能。

    5.2.20 FTM軟件輸出控制寄存器(FTMx_SWOCTRL)

    該寄存器設置各通道強制輸出高電平或低電平。

    • CHnOS=1時對于通道n強制輸出:

    • CHnOCV=0,當強制輸出時,輸出低電平;

    • CHnOCV=1,當強制輸出時,輸出高電平。

    5.2.21 FTMPWM裝載寄存器(FTMx_PWMLOAD)

    使能PWM的自動載入功能,當FTM計數計到MOD設定值并變化到下一個值或該通道設置為輸出比較且比較成功時,MOD、CNTIN、C(n)V、C(n+1)V載入緩沖器中的值。

    • LDOK:載入使能。

    • CHnSEL:載入時是否包括通道n

    6. Demo

    6.0 外設引腳配置示例

    /* Generate array of configured pin structures */ pin_settings_config_t g_pin_mux_InitConfigArr_ftm_pwm1[NUM_OF_CONFIGURED_PINS_FTM_PWM1] = {{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 22U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 21U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 3U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 2U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTB,.pinPortIdx ? ? ?= 0U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 31U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 30U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 23U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 14U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 13U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 18U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 16U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 28U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,},{.base ? ? ? ? ? ?= PORTA,.pinPortIdx ? ? ?= 29U,.pullConfig ? ? ?= PORT_INTERNAL_PULL_NOT_ENABLED,.driveSelect ? ? = PORT_STRENGTH_DISABLED,.mux ? ? ? ? ? ? = PORT_MUX_ALT2,.hysteresisSelect = PORT_HYSTERESYS_DISABLED,.gpioBase ? ? ? ?= NULL,.direction ? ? ? = GPIO_UNSPECIFIED_DIRECTION,.initValue ? ? ? = 0,.intConfig ? ? ? = PORT_INT_DISABLED,.clearIntFlag ? ?= false,.debounceEnable ?= false,}, }; /******************************************************************************************************** EOF *******************************************************************************************************/

    6.1 EPWM

    /*** @page misra_violations MISRA-C:2012 violations** @section [global]* Violates MISRA 2012 Advisory Rule 8.7, External variable could be made static.* The external variables will be used in other source files in application code.**/ ? /* Global configuration of flexTimer_pwm_1 InitConfig */ ftm_user_config_t flexTimer_pwm_1_InitConfig_pwm = {{true, /* Software trigger state */false, /* Hardware trigger 1 state */false, /* Hardware trigger 2 state */false, /* Hardware trigger 3 state */false, /* Max loading point state */false, /* Min loading point state */FTM_PWM_SYNC, /* Update mode for INVCTRL register */FTM_PWM_SYNC, /* Update mode for SWOCTRL register */FTM_PWM_SYNC, /* Update mode for OUTMASK register */FTM_PWM_SYNC, /* Update mode for CNTIN register */true, /* Automatic clear of the trigger*/FTM_UPDATE_NOW, /* Synchronization point */},FTM_MODE_EDGE_ALIGNED_PWM, /* Mode of operation for FTM */FTM_CLOCK_DIVID_BY_1, /* FTM clock prescaler */FTM_CLOCK_SOURCE_SYSTEMCLK, ? /* FTM clock source */FTM_BDM_MODE_11, /* FTM debug mode */false, ? ?/* Interrupt state */false ? ? /* Initialization trigger */ }; ? /* PWM configuration for flexTimer_pwm_1 */ ftm_pwm_param_t flexTimer_pwm_1_PwmConfig_pwm = {1U, /* Number of independent PWM channels */0U, /* Number of combined PWM channels */FTM_MODE_EDGE_ALIGNED_PWM, /* PWM mode */0U, /* Dead time value */FTM_DEADTIME_DIVID_BY_1, /* Dead time prescale */1000U, /* PWM frequency */flexTimer_pwm_1_IndependentChannelsConfig_pwm, /* The independent PWM channels configuration structure */NULL, /* Combined PWM channels configuration structure */&flexTimer_pwm_1_FaultConfig /* PWM fault configuration structure */ }; ? /*!\brief The FTMTestEdgePwm function for the project.\details The startup initialization sequence is the following:* - startup asm routine* - FTMTestEdgePwm() */ int FTMTestEdgePwm(void) {/* Write your local variable definition here */ftm_state_t ftmStateStruct;uint16_t dutyCycle = flexTimer_pwm_1_IndependentChannelsConfig_pwm[0].uDutyCyclePercent; ?/* Initialize pins */PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_PWM1, g_pin_mux_InitConfigArr_ftm_pwm1); ?/* Initialize FTM instance */FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig_pwm, &ftmStateStruct); ?/* Initialize FTM PWM */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig_pwm); ?/* Infinite loop */for ( ;; ){dutyCycle += 50;if (dutyCycle >= 0x8000U){dutyCycle = 1U;}FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1,flexTimer_pwm_1_IndependentChannelsConfig_pwm[0].hwChannelId,FTM_PWM_UPDATE_IN_DUTY_CYCLE, dutyCycle,0U,true);OS_DelayMs(5);} ?return exit_code; }

    6.2 CPWM

    /*!\brief The FTMTestCenterPwm function for the project.\details The startup initialization sequence is the following:* - startup asm routine* - FTMTestCenterPwm() */ int FTMTestCenterPwm(void) {/* Write your local variable definition here */ftm_state_t ftmStateStruct;uint16_t dutyCycle = flexTimer_pwm_1_IndependentChannelsConfig_pwm[0].uDutyCyclePercent; ?/* Initialize pins */PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_PWM1, g_pin_mux_InitConfigArr_ftm_pwm1); ?flexTimer_pwm_1_PwmConfig_pwm.mode = FTM_MODE_CEN_ALIGNED_PWM; ?/* Initialize FTM instance */FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig_pwm, &ftmStateStruct); ?/* Initialize FTM PWM */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig_pwm); ?/* Infinite loop */for ( ;; ){dutyCycle += 50;if (dutyCycle >= 0x8000U){dutyCycle = 1U;}FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1,flexTimer_pwm_1_IndependentChannelsConfig_pwm[0].hwChannelId,FTM_PWM_UPDATE_IN_DUTY_CYCLE, dutyCycle,0U,true);OS_DelayMs(5);}return exit_code; }

    6.3 Input Capture

    /* Global configuration of flexTimer_ic_1 InitConfig */ ftm_user_config_t flexTimer_ic_1_InitConfig = {{true, ? ?/* Software trigger state */false, ?/* Hardware trigger 1 state */false, ?/* Hardware trigger 2 state */false, ?/* Hardware trigger 3 state */false, /* Max loading point state */false, /* Min loading point state */FTM_SYSTEM_CLOCK, /* Update mode for INVCTRL register */FTM_SYSTEM_CLOCK, /* Update mode for SWOCTRL register */FTM_SYSTEM_CLOCK, /* Update mode for OUTMASK register */FTM_SYSTEM_CLOCK, /* Update mode for CNTIN register */false, /* Automatic clear of the trigger */FTM_UPDATE_NOW, /* Synchronization point */},FTM_MODE_INPUT_CAPTURE, /* Mode of operation for FTM */FTM_CLOCK_DIVID_BY_1, /* FTM clock prescaler */FTM_CLOCK_SOURCE_SYSTEMCLK, ? /* FTM clock source */FTM_BDM_MODE_11, /* FTM debug mode */false, ? ?/* Interrupt state */false ? ? /* Initialization trigger */ }; ? ? /* Input capture configuration for flexTimer_ic_1 */ ftm_input_param_t flexTimer_ic_1_InputCaptureConfig = {1U, /* Number of channel configurations */65535U, /* Maximum count value */flexTimer_ic_1_InputCaptureChannelConfig /* Channels configuration*/ }; ? /*!\brief The ftm_signal_measure_entry function for the project.\details The startup initialization sequence is the following:* - startup asm routine */ int FTMTestCapture(void) {ftm_state_t ftm1StateStruct;ftm_state_t ftm2StateStruct;/* Variables used to store PWM frequency,* input capture measurement value*/uint16_t inputCaptureMeas = 0U;uint32_t frequency; ?bool conversionComplete = false;/* Buffer for string processing */char txBuff[255]; ?/* Initialize pins* ? - ? See PinSettings component for more info*/PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_SG0, g_pin_mux_InitConfigArr_ftm_sg0);PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_SG1, g_pin_mux_InitConfigArr_ftm_sg1); ?/* Initialize FTM instances, PWM and Input capture* - ? See ftm component for more details*/FTM_DRV_Init(INST_FLEXTIMER_IC_1, &flexTimer_ic_1_InitConfig, &ftm1StateStruct);FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig, &ftm2StateStruct); ?/* Setup input capture */FTM_DRV_InitInputCapture(INST_FLEXTIMER_IC_1, &flexTimer_ic_1_InputCaptureConfig); ?/* Start PWM */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig); ?/* Get the FTM frequency to calculate* the frequency of the measured signal.*/frequency = FTM_DRV_GetFrequency(INST_FLEXTIMER_IC_1); ?/* Send the hello message */log_info("This example will show you how to use FTM's signal measurement feature.\r\n""To achieve that we will generate a modifiable frequency PWM and read it with Input Capture.\r\n"); ?/* Infinite loop* - ? Wait for user input* - ? Measure and calculate the signal frequency* - ? Send original and measured freq via LPUART* - ? Modify the PWM frequency*/for ( ;; ){//log_info("Press any key to initiate a new conversion...\r\n");OS_DelayS(5);/* Wait for user input *///LPUART_DRV_ReceiveDataBlocking(INST_LPUART_1, (uint8_t *)&txBuff, 1U, 1 << 31U);conversionComplete = false; ?while (conversionComplete == false){/* Wait a number of cycles for the PWM to reach stability */delayCycles(0x7FFFFU); ?/* Get the latest value */inputCaptureMeas = FTM_DRV_GetInputCaptureMeasurement(INST_FLEXTIMER_IC_1, 0U);/* Calculate the signal frequency using recorded data*/inputCaptureMeas = frequency / (inputCaptureMeas); ?/* Stop PWM */FTM_DRV_DeinitPwm(INST_FLEXTIMER_PWM_1); ?/* Convert the integer to char array and send it*/sprintf(txBuff, "PWM frequency:%6lu, Measured frequency:%6u [Hz]\r\n",flexTimer_pwm_1_PwmConfig.uFrequencyHZ, inputCaptureMeas);log_info("%s\n", txBuff); ?/* Increase frequency */if (flexTimer_pwm_1_PwmConfig.uFrequencyHZ < 3000U){flexTimer_pwm_1_PwmConfig.uFrequencyHZ += 100U;}else{flexTimer_pwm_1_PwmConfig.uFrequencyHZ = 1000U;conversionComplete = true;} ?/* Restart PWM with new settings */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig);}} ?return exit_code; }

    6.4 中斷

    /*!\brief The ftm_periodic_interrupt function for the project.\details The startup initialization sequence is the following:* - startup asm routine* - FTMTestInterrupt() */ int FTMTestInterrupt(void) {/* Write your local variable definition here */ftm_state_t state; ?/* Initialize pins */PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_INT0, g_pin_mux_InitConfigArr_int0); ?/* Initialize FTM */FTM_DRV_Init(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_InitConfig_0, &state); ?/* Initialize counter */FTM_DRV_InitCounter(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_TimerConfig_0); ?/* Start Counter */FTM_DRV_CounterStart(INST_FLEXTIMER_MC_1); ?/* Loop */for (;;){/* Do no thing, just wait for the interrupt */} ?return exit_code; }

    6.5 Combined pwm

    /*** @page misra_violations MISRA-C:2012 violations** @section [global]* Violates MISRA 2012 Advisory Rule 8.7, External variable could be made static.* The external variables will be used in other source files in application code.**/ ? /* Global configuration of flexTimer_pwm_1 InitConfig */ ftm_user_config_t flexTimer_pwm_1_InitConfig_cb = {{true, /* Software trigger state */false, /* Hardware trigger 1 state */false, /* Hardware trigger 2 state */false, /* Hardware trigger 3 state */false, /* Max loading point state */false, /* Min loading point state */FTM_PWM_SYNC, /* Update mode for INVCTRL register */FTM_PWM_SYNC, /* Update mode for SWOCTRL register */FTM_PWM_SYNC, /* Update mode for OUTMASK register */FTM_PWM_SYNC, /* Update mode for CNTIN register */true, /* Automatic clear of the trigger*/FTM_UPDATE_NOW, /* Synchronization point */},FTM_MODE_EDGE_ALIGNED_PWM, /* Mode of operation for FTM */FTM_CLOCK_DIVID_BY_1, /* FTM clock prescaler */FTM_CLOCK_SOURCE_SYSTEMCLK, ? /* FTM clock source */FTM_BDM_MODE_11, /* FTM debug mode */false, ? ?/* Interrupt state */false ? ? /* Initialization trigger */ }; ? /* PWM configuration for flexTimer_pwm_1 */ ftm_pwm_param_t flexTimer_pwm_1_PwmConfig_cb = {0U, /* Number of independent PWM channels */1U, /* Number of combined PWM channels */FTM_MODE_EDGE_ALIGNED_PWM, /* PWM mode */48U, /* Dead time value */FTM_DEADTIME_DIVID_BY_4, /* Dead time prescale */10000U, /* PWM frequency */NULL, /* The independent PWM channels configuration structure */flexTimer_pwm_1_CombinedChannelsConfig, /* Combined PWM channels configuration structure */&flexTimer_pwm_1_FaultConfig /* PWM fault configuration structure */ }; ? /*!\brief The ftm_combined_pwm function for the project.\details The startup initialization sequence is the following:* - startup asm routine* - ftm_combined_pwm() */ int FTMTestCombinedPwm(void) {/* Write your local variable definition here */ftm_state_t ftmStateStruct;bool increaseDutyCycle = true;uint32_t dutyCycle ?= 0UL; ?/* Initialize pins */PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_PWM0, g_pin_mux_InitConfigArr_ftm_pwm0); ?/* Initialize FTM */FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig_cb, &ftmStateStruct); ?/* Initialize FTM PWM */FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig_cb); ?/* Infinite loop* - ? increment or decrement duty cycleU* - ? Update channel duty cycle* - ? Wait for a number of cycles to make* ? ? the change visible*/for ( ;; ){if (increaseDutyCycle == false){dutyCycle -= 1U;if (dutyCycle < 1U)increaseDutyCycle = true;}else{dutyCycle += 1U;if (dutyCycle > 0x7FFF)increaseDutyCycle = false;} ?/* Update PWM channels */FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1, 0U, FTM_PWM_UPDATE_IN_DUTY_CYCLE, 0UL, dutyCycle, true);delayCycles(0xFFU);} ?return exit_code; }

    6.6 Deadtime PWM

    6.7 Fault Control

    int FTMTestFaultControl(void) {/* Write your local variable definition here */ftm_state_t ftmStateStruct;ftm_state_t ftmStateStruct_1;bool increaseDutyCycle = true;uint32_t dutyCycle ?= 0UL;bool result = false;int32_t idx = 0U; ?OS_IoWrite32((void *)0x40080230, 0xffffffff);OS_IoWrite32((void *)0x40080234, 0xffffffff);OS_IoWrite32((void *)0x40080238, 0xffffffff);OS_IoWrite32((void *)0x4008023C, 0xffffffff);OS_IoWrite32((void *)0x40080240, 0xffffffff);OS_IoWrite32((void *)0x40080244, 0xffffffff);OS_IoWrite32((void *)0x400800A8, 0x1);OS_IoWrite32((void *)0x400800B4, 0x1);OS_IoWrite32((void *)0x400800C0, 0x1);OS_IoWrite32((void *)0x400800CC, 0x1); ?/* Initialize pins */PINS_DRV_Init(NUM_OF_CONFIGURED_PINS_FTM_PWM0, g_pin_mux_InitConfigArr_ftm_pwm0); ?/* Initialize FTM */ ?//flexTimer_pwm_1_InitConfig_cb.BDMMode = FTM_BDM_MODE_00;FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig_cb, &ftmStateStruct); ?//FTM_DRV_EnableInterrupts(INST_FLEXTIMER_PWM_1, FTM_FAULT_INT_ENABLE); ?/* Initialize FTM PWM */flexTimer_pwm_1_PwmConfig_cb.faultConfig->faultMode = FTM_FAULT_CONTROL_AUTO_ALL;flexTimer_pwm_1_PwmConfig_cb.faultConfig->pwmFaultInterrupt = false;FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig_cb); ?/* Infinite loop* - ? increment or decrement duty cycleU* - ? Update channel duty cycle* - ? Wait for a number of cycles to make* ? ? the change visible*/delayCycles(1000U); ?FTM_DRV_Init(INST_FLEXTIMER_PWM_2, &flexTimer_pwm_1_InitConfig_cb, &ftmStateStruct_1);flexTimer_pwm_1_PwmConfig_cb.faultConfig->faultMode = FTM_FAULT_CONTROL_DISABLED;flexTimer_pwm_1_PwmConfig_cb.uFrequencyHZ = flexTimer_pwm_1_PwmConfig_cb.uFrequencyHZ / 10;FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_2, &flexTimer_pwm_1_PwmConfig_cb); ?while (1); ?return result; }

    7. 應用舉例

    7.1 步進電機驅動

    步進電機控制示意圖,通過FTM模塊控制電機的兩個H橋,比較器可以用作電機線圈過流保護,ADC模塊提供過流檢測參考信號。

    7.2 基于霍爾傳感器的BLDC驅動

    直流無刷電機控制示意圖,六路FTM通道控制電機的三相線圈,霍爾傳感器提供電機轉速信息(使用一路FTM來測量脈沖周期)。

    7.3 ACIM/PMSM電機控制

    永磁同步電機控制示意圖,使用六路FTM控制電機三相橋,正交信號提供電機轉速信息(使用FTM正交譯碼功能)

    ?

    總結

    以上是生活随笔為你收集整理的S32K FTM(FlexTimer module)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    免费网站色| 伊人国产视频 | 免费亚洲精品 | 欧美孕交vivoestv另类 | 日韩高清免费在线 | 色99之美女主播在线视频 | 日韩一级黄色av | 精品久久久久久一区二区里番 | 天天草天天草 | 午夜精品福利在线 | 国产视频精品在线 | 有没有在线观看av | 国产精品久久久777 成人手机在线视频 | www.夜夜| 久久www免费人成看片高清 | www.天天射.com | 国产高清在线免费 | 天天色综合久久 | 91视频在线免费 | 日本69hd| 久草色在线观看 | 亚洲经典视频在线观看 | 免费黄色网址网站 | 国产精品一区二区三区99 | av线上免费观看 | 天天操天天摸天天干 | 在线播放 亚洲 | 99这里都是精品 | 国产精品久久久久9999吃药 | 国产一区二区精品91 | 免费情趣视频 | 五月天激情开心 | 欧美电影黄色 | 免费日韩av片 | 国内精品久久久 | 久久这里 | 一本—道久久a久久精品蜜桃 | 激情网五月 | 久久亚洲福利视频 | 黄色大片免费播放 | www日韩在线观看 | 亚洲精品综合一二三区在线观看 | 色资源网免费观看视频 | 99久久国产免费免费 | av在线免费在线 | 久久男人免费视频 | 亚洲免费av一区二区 | 国产精品美女久久久久久网站 | 国产精品久久久久久久久毛片 | 91成人免费在线视频 | 91精品中文字幕 | 国产精品av久久久久久无 | 日日天天av | 日韩中文在线电影 | 精品国产免费久久 | 波多野结衣电影一区二区 | 99精彩视频在线观看免费 | 最新色站| 日韩中文字幕亚洲一区二区va在线 | 天天摸天天操天天舔 | 国产中文字幕视频在线观看 | 91传媒激情理伦片 | 欧美日韩亚洲国产一区 | www.天天成人国产电影 | 日本公妇色中文字幕 | 亚洲黄色小说网 | 精品国产区在线 | 国产69精品久久久久99尤 | 九九视频网站 | 免费中文字幕 | 国产免费叼嘿网站免费 | 久久综合九色九九 | 婷婷中文字幕在线观看 | 婷婷久久五月天 | 精品福利av | www.操.com| 久久久综合九色合综国产精品 | 久久免费的精品国产v∧ | 在线香蕉视频 | 国产精品毛片久久蜜 | 欧美韩国日本在线 | 久久夜靖品 | 国产精品久久久久久久久久久久午夜 | 久草在线在线精品观看 | 日韩电影一区二区三区 | 日韩剧| 成人中文字幕在线 | 天天综合天天做 | 91视频麻豆| 国产精品久久久一区二区三区网站 | 96久久 | 黄色av一区 | 国产精品久久久久久69 | 亚洲老妇xxxxxx | 欧美久久久久久久久久久久久 | 丁香婷婷在线 | 国产一级黄色免费看 | 97视频人人澡人人爽 | 91爱爱网址 | 国产69久久 | 国产在线视频一区二区 | 97国产情侣爱久久免费观看 | 在线播放 日韩专区 | 久久高视频| 天天干天天操天天 | 午夜精品久久久久久久99 | 亚洲精品1234区 | 欧美日韩亚洲在线 | 9797在线看片亚洲精品 | 国产99久久| 色网站在线看 | av在线网站大全 | 久久免费视频这里只有精品 | 五月天天在线 | 欧美 日韩 视频 | 91伊人久久大香线蕉蜜芽人口 | 欧美另类高清 videos | 国产在线2020 | 国产精品自产拍在线观看网站 | 九九视频网站 | 国产你懂的在线 | 免费在线观看午夜视频 | 国内一级片在线观看 | 四虎影视成人永久免费观看亚洲欧美 | a在线视频v视频 | 精品国产色 | 天天射天天爽 | 狠狠色狠狠综合久久 | 777视频在线观看 | 欧美亚洲精品在线观看 | 亚洲国产综合在线 | 在线91网| 欧美孕妇与黑人孕交 | 又黄又爽又色无遮挡免费 | 欧美色图亚洲图片 | 国产小视频在线观看免费 | 欧美日本不卡 | 99精品国产一区二区三区不卡 | 在线影视 一区 二区 三区 | 亚洲 成人 欧美 | 99精品小视频| 久久综合亚洲鲁鲁五月久久 | 免费网站观看www在线观看 | 亚洲成人av在线 | 国产精品亚洲片夜色在线 | 国产精品亚洲人在线观看 | 黄色一级免费电影 | 欧美日韩国产精品爽爽 | 麻豆91在线观看 | 国产91小视频 | 免费一级黄色 | 国产成人精品综合久久久久99 | 91香蕉视频好色先生 | 色综合久久综合网 | 成人久久久精品国产乱码一区二区 | 成人97人人超碰人人99 | 免费在线91 | 久久成人午夜 | 欧美午夜理伦三级在线观看 | 中文字幕av最新 | 亚洲免费国产 | 国产伦精品一区二区三区… | 国产99精品| 91亚洲精品久久久蜜桃 | 国产免费观看久久 | 超碰资源在线 | 日韩a欧美 | 久久久91精品国产一区二区精品 | 中文国产在线观看 | 国产99久久精品 | 亚洲va欧美va人人爽春色影视 | 中文字幕资源网 国产 | 久保带人 | 在线v片免费观看视频 | 国产色视频123区 | 日韩在线不卡视频 | 国产精品福利视频 | 亚洲.www | 色婷婷综合久久久中文字幕 | 六月丁香激情网 | 91视频啊啊啊 | 久久久亚洲麻豆日韩精品一区三区 | 狠狠狠色丁香婷婷综合久久五月 | 99色在线视频 | 国产一区在线观看视频 | 色婷婷av一区 | 91久久精品一区二区三区 | 激情小说网站亚洲综合网 | 国产精品av在线免费观看 | 中文字幕免费高清av | 97精品国产97久久久久久粉红 | 韩国av免费观看 | 青草视频网 | 婷婷色av| 亚洲涩综合 | 色婷婷天天干 | 韩国av一区二区三区 | 亚洲成人精品久久久 | 国产视频亚洲精品 | 成人小视频在线观看免费 | 亚洲狠狠丁香婷婷综合久久久 | 日批网站在线观看 | 欧美日韩在线观看视频 | 天堂av在线 | 97国产小视频| 美女精品国产 | 在线你懂| 成人午夜影视 | 中文字幕色在线 | 啪啪激情网 | 精品国产不卡 | 亚洲国产剧情 | 蜜臀一区二区三区精品免费视频 | 99精品国产99久久久久久97 | 欧美性大战 | 在线观看色视频 | 91大神dom调教在线观看 | 久久99热国产 | 日韩剧 | 亚洲精品视频在线免费 | 在线观看你懂的网站 | 久久国产91 | 欧美日韩不卡一区二区 | 国产在线高清视频 | 97超碰伊人 | 亚洲国产欧洲综合997久久, | 成人精品99 | 超碰人人做 | 国产精品美女视频 | 99精品乱码国产在线观看 | 免费黄色一区 | 免费男女羞羞的视频网站中文字幕 | 国产精品区一区 | 丁香 久久 综合 | 久久激五月天综合精品 | 在线成人一区 | 色永久免费视频 | 成人av网站在线播放 | 激情av在线播放 | 日韩网站免费观看 | 91精品成人 | 亚洲成人av一区二区 | 国产成人区 | 三级黄色理论片 | 又色又爽的网站 | 中日韩三级视频 | 视频成人永久免费视频 | av电影一区二区三区 | 国产精品久久久久久久久毛片 | 麻豆av一区二区三区在线观看 | 在线日韩中文 | 91在线精品秘密一区二区 | 大片网站久久 | 特级a毛片 | 伊人电影天堂 | 日韩免费电影一区二区三区 | 国产精品一区专区欧美日韩 | 国产麻豆精品久久 | 欧美日韩精品在线观看 | 天天操天天艹 | 99在线热播精品免费 | 久久99亚洲精品久久久久 | 国产高清中文字幕 | 精品婷婷| 色黄视频免费观看 | 深夜免费小视频 | 中文视频在线看 | 日韩一级片网址 | 国产精品成人一区二区三区 | 欧美在线久久 | 色综合色综合色综合 | 国产免费一区二区三区最新 | 中文字幕在线视频一区二区 | 国产精品女主播一区二区三区 | 日韩在线观看视频一区二区三区 | 可以免费观看的av片 | 在线视频免费观看 | 成人精品99 | 六月色丁 | 在线看成人片 | 欧美超碰在线 | 黄色资源在线观看 | 韩日在线一区 | 国产免费久久 | 成人黄色毛片 | 一区二区三区手机在线观看 | 久久久久久久久久久久国产精品 | 国产精品嫩草55av | 1024手机基地在线观看 | 国产成人精品一区二 | 日日干夜夜操视频 | 久久99国产综合精品免费 | 超碰公开在线观看 | 亚洲丝袜中文 | 97成人精品区在线播放 | 在线观看久久 | 日韩偷拍精品 | 亚洲激色 | 国产69久久久欧美一级 | 青草草在线视频 | 国产综合小视频 | 视频在线一区二区三区 | 色综合咪咪久久网 | 久久久久久久国产精品 | 欧美人体xx | 又黄又刺激又爽的视频 | 日韩av片无码一区二区不卡电影 | 99精品国产在热久久下载 | 精品亚洲一区二区 | 狠狠干我 | 亚洲精品中文在线资源 | av亚洲产国偷v产偷v自拍小说 | 麻豆视传媒官网免费观看 | 91看片成人 | 97在线视频观看 | 免费91在线观看 | 国产小视频在线免费观看视频 | 国产成人av网 | 精品av在线播放 | 黄色免费网站 | 亚洲码国产日韩欧美高潮在线播放 | 亚洲视频 视频在线 | 黄色av成人在线 | 亚洲专区免费观看 | av网在线观看 | 亚洲九九九在线观看 | 日韩成人免费观看 | 黄色片网站av | 天天se天天cao天天干 | 欧美a级成人淫片免费看 | 狠狠狠色丁香综合久久天下网 | 精品欧美日韩 | www.操.com| 又粗又长又大又爽又黄少妇毛片 | 久久精品国产精品亚洲 | www.久久色.com| 黄色特级毛片 | 日日成人网 | 国产一区二区在线播放 | 黄色大片网 | 国产专区精品 | 91在线视频免费91 | 成人日批视频 | 在线电影91 | 中日韩三级视频 | 午夜视频久久久 | 国产精品毛片完整版 | 国产免费视频一区二区裸体 | 国产一区av在线 | 亚洲最新av在线 | 美女性爽视频国产免费app | 久久国产色 | 久久久av免费 | 日韩欧美不卡 | 亚洲国产精品久久久久久 | 5月丁香婷婷综合 | 日本午夜免费福利视频 | 午夜精品99久久免费 | 国产精品日韩久久久久 | 黄在线免费看 | 玖玖精品在线 | 免费看的av片| 久久新视频| 在线观看视频h | 国产91精品一区二区绿帽 | 18岁免费看片 | 成人黄色电影在线 | 亚州国产精品视频 | 中文字幕 国产视频 | 国产一区免费看 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 日韩久久久久久久久久 | 成人小电影在线看 | 免费三级骚 | 国产一级视频在线免费观看 | 91av在线免费 | 激情五月在线视频 | 中文在线8新资源库 | 99久久久久久久 | 国产高清在线视频 | 97在线资源| 久草视频免费观 | 亚洲视频在线观看网站 | 亚洲精品美女久久久久 | 免费97视频| 美女av在线免费 | 五月婷婷久久丁香 | 欧美日韩精品影院 | 91日韩在线播放 | 国产精品久久久久久久久蜜臀 | 九九九热精品免费视频观看 | 91欧美国产 | 黄色av高清| 在线观看911视频 | 欧美一二三在线 | 韩国av永久免费 | 欧美色婷 | 91精品毛片| 国产视频1区2区 | 国产色婷婷在线 | 国产 日韩 欧美 在线 | 丁香电影小说免费视频观看 | 99视频精品 | 成人cosplay福利网站 | 2019中文在线观看 | 久久精品免费播放 | 亚洲精品av中文字幕在线在线 | 免费网站在线观看人 | 91麻豆免费版 | 97精品一区二区三区 | 五月婷婷视频在线观看 | 久久精品视频免费播放 | 九九精品视频在线 | 特黄色大片 | 欧美aⅴ在线观看 | 欧女人精69xxxxxx | 高清一区二区三区av | 国产福利一区在线观看 | 久久久电影 | 91人人爽久久涩噜噜噜 | 国产精品高清免费在线观看 | 国产精品福利av | 最新一区二区三区 | 99欧美 | 人人插人人看 | 亚洲永久精品在线 | 欧美 国产 视频 | 麻豆国产精品va在线观看不卡 | www国产亚洲精品 | 久久精品官网 | 人人爽人人香蕉 | 在线电影 你懂得 | 91成人精品视频 | 成年人免费看片网站 | 日韩一区正在播放 | 亚洲综合国产精品 | 欧美日韩国语 | 五月的婷婷 | 成人一区电影 | 337p日本欧洲亚洲大胆裸体艺术 | 成人cosplay福利网站 | 欧美日韩不卡一区二区 | 久久综合久久综合这里只有精品 | 久久夜色精品国产欧美乱 | 国产手机av在线 | 99久久超碰中文字幕伊人 | 欧美日韩在线视频一区 | 黄色在线成人 | av免费黄色 | 三三级黄色片之日韩 | 69视频网站 | 91c网站色版视频 | 国产精品免费久久 | 久久在线 | 91麻豆精品国产91久久久使用方法 | 亚洲美女视频在线观看 | 日韩在线短视频 | 久久av中文字幕片 | 麻豆传媒电影在线观看 | 日韩高清片 | 亚洲精选视频在线 | 欧美激情综合五月 | 中文字幕成人网 | 黄色精品免费 | 99久久99久国产黄毛片 | 日韩av电影国产 | 超碰人人做 | 在线观看一区 | 在线看的av网站 | 国产成人精品国内自产拍免费看 | 国产永久免费 | 激情久久影院 | 午夜精品久久久久久久久久久久 | 中文字幕在线观看视频免费 | 欧美日韩一区二区在线 | 欧美日韩视频在线观看一区二区 | 国产女人40精品一区毛片视频 | 国产精品资源网 | 日韩欧美国产精品 | 婷婷伊人网 | 六月激情网 | 又紧又大又爽精品一区二区 | 香蕉视频免费在线播放 | 在线观看中文字幕第一页 | 91久久丝袜国产露脸动漫 | 国内精品久久久久久久久久清纯 | 91av超碰 | 精品一区二区在线免费观看 | 中文字幕影片免费在线观看 | 午夜黄色大片 | 亚洲激情六月 | 国内99视频| 国产视频日韩视频欧美视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久99影院 | 天天操天天色天天射 | 免费视频一区 | 香蕉久久久久 | 欧美一级性生活片 | 日韩精品免费 | 中文区中文字幕免费看 | 久久国产一二区 | 91色影院 | 国产精品 999 | 久章操| 亚洲欧美日韩在线一区二区 | 久久精品久久精品久久 | 激情电影在线观看 | 91网址在线观看 | 色噜噜噜| 月下香电影 | 国产九色在线播放九色 | 国产一区免费观看 | 中文字幕免费在线看 | 激情久久小说 | 日韩极品视频在线观看 | 91人人澡人人爽人人精品 | 91在线视频观看 | 日日爽夜夜爽 | 久久人人爽人人片 | 手机av网站 | 日韩免费成人 | av综合站 | 天堂av在线免费观看 | 亚洲国产中文字幕 | 91探花国产综合在线精品 | 在线看不卡av | 国产a视频免费观看 | 97手机电影网 | 久久久国产精品亚洲一区 | 亚洲九九精品 | 中文字幕在线看 | 色综久久 | 18国产精品白浆在线观看免费 | 99精品国产99久久久久久福利 | 99精品视频99| 97人人添人澡人人爽超碰动图 | 国产精品久久久久久久久蜜臀 | 欧美成人基地 | 伊人久久一区 | 99热精品久久 | 91成人在线视频观看 | 超碰公开在线观看 | 国产精品久久久久久久久搜平片 | 天天干夜夜爱 | 国产精品1区2区 | 99久高清在线观看视频99精品热在线观看视频 | 一级黄色大片 | 国产一级二级在线 | 亚洲狠狠婷婷综合久久久 | 精品亚洲国产视频 | 91av影视| 欧洲视频一区 | 500部大龄熟乱视频使用方法 | 国产一级在线观看 | 亚洲欧洲精品久久 | 国产一卡久久电影永久 | 国产黄色片一级 | 九九热在线精品视频 | 国产在线播放一区二区 | 91精品国产九九九久久久亚洲 | 国产精品一区二区免费看 | 久久国产欧美日韩 | 在线观看日韩国产 | 97热视频| 亚洲精品一区二区三区高潮 | 在线观看色网 | 日韩欧美一级二级 | 精品一区电影 | 中文字幕资源网在线观看 | 精品国产日本 | 国产91免费在线观看 | 狠狠色伊人亚洲综合网站野外 | 国产精品va最新国产精品视频 | 久久精品视频99 | 久热只有精品 | 日韩视频区 | 中文字幕在线观看网址 | 91| 国内精品久久久久久久久久久 | 在线看的毛片 | 日韩一二三 | 天天草夜夜 | 午夜婷婷综合 | 首页中文字幕 | 91视频91蝌蚪 | 婷婷五月色综合 | 色综合久久久 | 一区在线观看 | 日韩中文在线观看 | 亚洲一级性| 国产精品99久久免费观看 | 天天操天天操天天操 | 色视频成人在线观看免 | 三级动图 | 欧美精品一区二区三区四区在线 | www.久久精品视频 | 久久九精品 | 日日摸日日爽 | 久草电影在线观看 | 国产精品免费久久久久 | 亚洲成人av在线播放 | 欧美日韩中文国产一区发布 | 婷婷激情五月综合 | 国产国语在线 | 97电影网站 | www.亚洲激情.com | 久久99久久99精品免观看软件 | 亚洲精品资源在线观看 | 欧美日韩国产精品爽爽 | 夜夜夜夜爽 | 国产黄色片网站 | 日本系列中文字幕 | zzijzzij亚洲日本少妇熟睡 | 久久人人爽人人爽人人片 | 久久久首页 | 亚洲国产中文字幕在线视频综合 | 亚洲乱码国产乱码精品天美传媒 | 豆豆色资源网xfplay | 亚洲精品国产精品国产 | 欧美精品资源 | 九九热国产视频 | 天天爱天天操天天爽 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲国产精品激情在线观看 | av在线短片 | 日韩狠狠操 | 天天射天天干天天爽 | 国产精品国产三级国产aⅴ无密码 | 亚洲区视频在线观看 | 久久99国产精品免费 | 亚洲精品网站在线 | 韩国精品福利一区二区三区 | 狠狠网 | 天天射天天色天天干 | 婷婷亚洲最大 | 一区二区三区日韩视频在线观看 | 九九九视频在线 | 在线日韩中文 | 免费黄在线看 | 韩国av不卡 | 不卡的av在线播放 | 天天插日日操 | 日本精品一区二区 | 亚洲一级免费电影 | 国产精品中文 | 99久久一区 | 国产精品色婷婷视频 | 日韩在线视 | 国产在线观看91 | 精品国产美女 | 激情网婷婷 | 国产在线看一区 | 一区二区三区四区免费视频 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 成人av影视在线 | 欧美日韩国产精品爽爽 | 国产精品一区二区美女视频免费看 | 久久99国产综合精品 | 日日操天天操狠狠操 | 天天爽夜夜操 | 亚洲午夜精品一区二区三区电影院 | 欧美婷婷综合 | 在线 日韩 av| 天天插天天爽 | 九九九九九精品 | 欧美在线观看禁18 | 在线视频日韩欧美 | 久久欧美综合 | 国产一二区在线观看 | 国内精品在线一区 | 欧美一级黄色视屏 | 九九免费观看全部免费视频 | 一区二区男女 | 久草9视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久99久久99精品免费看小说 | 一区二区三区免费在线 | 欧美了一区在线观看 | 久久久久五月天 | 六月色 | 在线v片免费观看视频 | 久久国产影视 | 国产精品永久久久久久久www | 99爱爱| 国产精品不卡在线播放 | 一级黄色片在线免费观看 | www.少妇| 亚洲黄色一级大片 | 亚洲一级黄色大片 | av福利在线看 | av一区二区三区在线 | 日韩精品久久久 | 亚洲另类视频在线观看 | 久久久免费观看视频 | 久久99亚洲热视 | 日韩精品一区二 | 精品在线观看免费 | 久久99国产综合精品 | 日韩一区二区三区视频在线 | 中文字幕精品三级久久久 | 91高清免费在线观看 | 伊人狠狠 | 国产欧美在线一区 | 一二三区高清 | 成人高清在线观看 | 成人在线播放免费观看 | 夜夜躁日日躁狠狠躁 | 亚洲精品黄 | 欧美另类成人 | 视频在线观看日韩 | 精品国产乱码久久久久久浪潮 | 色a在线观看| 欧美精品被 | 亚洲激情视频在线观看 | 综合五月婷婷 | 波多野结衣在线观看视频 | 一级黄色a视频 | 国产在线黄| 在线观看日本高清mv视频 | 色婷婷国产精品一区在线观看 | 中文字幕av全部资源www中文字幕在线观看 | 欧美精品日韩 | 国产精品岛国久久久久久久久红粉 | 射久久久| 国产精品久久久久一区二区三区共 | 欧美电影在线观看 | 精品乱码一区二区三四区 | 在线观看aaa | 亚洲精选在线 | 午夜视频日本 | 三级黄色网络 | 97国产精品视频 | 亚洲色五月 | 国产精品久久久久久一二三四五 | 天堂av一区二区 | 在线观看日韩免费视频 | 在线播放91 | 国产精品一区二区三区观看 | 国产特级毛片aaaaaaa高清 | 久操中文字幕在线观看 | 日韩极品在线 | www.婷婷色| 夜夜操狠狠操 | 国产69精品久久99的直播节目 | 91传媒激情理伦片 | 91高清一区| 午夜精品成人一区二区三区 | 久久精品福利 | 日韩中文字幕国产 | 精品国产欧美 | 九九热只有这里有精品 | 久久久亚洲精品 | 久久亚洲欧美 | 国语精品久久 | 91在线在线观看 | 最近最新中文字幕视频 | av中文字幕在线免费观看 | 黄色的网站免费看 | 成年人视频在线免费播放 | 激情伊人五月天久久综合 | 欧美日韩国产一区二区三区在线观看 | 91在线视频 | 亚洲aⅴ在线 | 日韩午夜大片 | 波多野结衣在线观看一区二区三区 | 欧美另类一二三四区 | 日韩在线中文字幕视频 | 欧美另类一二三四区 | 九色精品免费永久在线 | 欧美91精品久久久久国产性生爱 | 五月婷丁香 | 久久伊人八月婷婷综合激情 | 精品久久五月天 | 成全在线视频免费观看 | 久草视频免费在线观看 | 国产精品自产拍在线观看蜜 | 久久一区二区三区日韩 | 国产一区私人高清影院 | 欧美性生活一级片 | 日本三级久久久 | 日韩一区视频在线 | 黄色成人在线 | 国产亚洲精品久久网站 | 热久久视久久精品18亚洲精品 | 久在线| av天天草 | av不卡中文字幕 | av在线播放快速免费阴 | 一区视频在线 | 91视频观看免费 | 亚洲一区二区精品3399 | 成人免费视频观看 | 精品国产一区在线观看 | 成人网在线免费视频 | 久久久精品在线观看 | 一区二区三区三区在线 | 国产精品99久久久久久大便 | www欧美色 | 91视频免费观看 | 天天干天天操av | 精品久久免费看 | 探花视频免费观看高清视频 | 天天碰天天操 | 日本精品视频在线观看 | 国产视频一区二区在线观看 | 中文在线字幕观看电影 | 日韩久久精品一区 | 午夜18视频在线观看 | 精品免费观看视频 | 国产精品久久久久久电影 | 五月婷婷网站 | 久草在线手机观看 | 国产成人三级在线观看 | 精品亚洲国产视频 | 亚洲色综合 | 欧美大片mv免费 | 中文字幕在线观看你懂的 | 日韩激情在线视频 | 免费情缘 | 久久久精品国产一区二区 | av黄色在线观看 | 亚洲视频一| 精品国内自产拍在线观看视频 | 国产99在线免费 | 国产在线更新 | 99在线免费视频 | 国产私拍在线 | 97av在线视频| 日韩欧美第二页 | 美女网站视频一区 | 在线免费观看视频a | 亚洲国产午夜视频 | 日韩视频三区 | 日韩一二区在线观看 | 国产高清小视频 | 国产午夜精品久久 | 国产麻豆精品久久一二三 | 亚洲精品视频在线看 | 丁香5月婷婷久久 | 91中文字幕一区 | 中文高清av| 91精选在线观看 | 亚洲成av人影片在线观看 | 97在线影院 | 国内精品久久久久影院日本资源 | 四虎免费av | 免费在线观看一级片 | 伊人在线视频 | 丝袜美腿亚洲综合 | 黄色免费视频在线观看 | 国产精品原创在线 | 亚洲免费精彩视频 | www..com毛片 | 成人性生交大片免费观看网站 | 日韩一区二区三区在线观看 | 最近高清中文字幕 | 黄色成人在线网站 | 天天伊人狠狠 | 亚洲精品短视频 | 九九热在线视频免费观看 | 久久九九国产精品 | 天天射天天干天天操 | 久久午夜精品影院一区 | 精品视频免费观看 | 九九综合久久 | 国产一区二区午夜 | 99视频在线精品国自产拍免费观看 | 国产日韩三级 | 精品一区精品二区高清 | 欧美一级网站 | 久久久久成人精品亚洲国产 | 99视频国产在线 | 91精品国产麻豆国产自产影视 | 久久免费视频在线观看 | 免费麻豆| 亚洲国产精品va在线看 | 伊甸园永久入口www 99热 精品在线 | 亚洲电影久久久 | 久久久网页 | 日韩 精品 一区 国产 麻豆 | 中字幕视频在线永久在线观看免费 | 亚洲做受高潮欧美裸体 | 午夜视频久久久 | 国产精品av在线免费观看 | 国产亚洲久一区二区 | 国产精品露脸在线 | 夜夜夜 | 久久国产精品一区二区三区 | 久久综合免费视频影院 | 黄色日本片 | 国产精品久久久久四虎 | 亚洲四虎| 一区 二区 精品 | 五月婷婷中文 | 日韩精选在线观看 | .国产精品成人自产拍在线观看6 | 国产精品免费在线 | 夜夜躁狠狠躁日日躁 | 久久国产精品免费一区二区三区 | 天堂av在线7| 在线观看中文字幕一区二区 | 国产91精品一区二区麻豆网站 | 99re热精品视频 | 国产成人精品免高潮在线观看 | 中文字幕在线观看亚洲 | 在线国产小视频 | 久久精品视频一 | 91精品中文字幕 | 国产小视频精品 | 国产精品综合久久久久久 | 在线观看黄色 | 欧美九九九 | 91在线观看黄 | 久久手机免费观看 | 99久久精品免费看国产四区 | 最近中文字幕视频网 | 国产精品毛片一区 | 手机av片| 91成人亚洲 | 狠狠干婷婷色 | 最近2019中文免费高清视频观看www99 | 狠狠色丁香婷婷综合最新地址 | 日韩av不卡在线 | 99草视频在线观看 | 国产99久久九九精品 | 毛片无卡免费无播放器 | 国模视频一区二区三区 | 日本在线视频一区二区三区 | 久99久久| 国产91九色蝌蚪 | 国内精品视频久久 | 色偷偷88888欧美精品久久 | 日韩av在线一区二区 | 色橹橹欧美在线观看视频高清 | 国产成人精品av在线观 | 国产一级黄色免费看 | 日本老少交 | 色综合天天狠天天透天天伊人 | 超碰精品在线观看 | 亚洲另类交| 在线国产福利 | 成人久久18免费网站麻豆 | 成年人在线观看网站 | 日韩成人看片 | 97视频免费观看2区 亚洲视屏 | a一片一级 | 在线看片中文字幕 | 久久亚洲在线 | 国产一区 在线播放 | 天天综合网 天天 | 欧美成人黄色 | 欧美日本中文字幕 | 亚洲成人黄色在线 | 日产乱码一二三区别在线 | 91亚洲国产成人 | 91亚洲国产成人久久精品网站 | 久久久久久久久久久成人 | 日韩精品免费一线在线观看 | 婷婷成人综合 | 国产美女在线精品免费观看 | 国产午夜精品久久久久久久久久 | 国产亚洲aⅴaaaaaa毛片 | 国产成人一区二区精品非洲 | 丁香在线 | 色.com| 久久无码精品一区二区三区 | 夜夜操天天干, | 91精品久久久久久粉嫩 | 91免费看黄 | 国产精品99久久久久久宅男 | 国产一区二区三区网站 | 黄色av电影在线观看 | 色先锋资源网 | www.com.黄| 毛片网免费| 亚洲精品美女久久久久网站 | 亚洲精品久久久久999中文字幕 | 天天射天天干天天插 | 成年人视频在线观看免费 | 日韩欧美在线中文字幕 | 一区二区三区精品在线视频 | 国产99久久 | 精品久久久成人 | av大全免费在线观看 | 日韩在线免费观看视频 | 欧美成人精品三级在线观看播放 | 国产福利91精品 | 中文字幕观看在线 | 日本高清久久久 | 色综合天天综合网国产成人网 | 精品美女久久久久久免费 | 亚洲精品免费视频 | 在线 欧美 日韩 | 国产亚洲精品久久久久动 | 日韩午夜视频在线观看 | 51久久夜色精品国产麻豆 | 97成人超碰|