亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 復(fù)件 main.c

?? 基于ATMEGA48單片機(jī)的
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
// This file has been prepared for Doxygen automatic documentation generation.
/*! \file ********************************************************************
*
* Atmel Corporation
*
* - File              : main.c
* - Compiler          : IAR EWAAVR 2.28a/3.10c
*
* - Support mail      : avr@atmel.com
*
* - Supported devices : ATmega48/88/168
*
* - AppNote           : AVR444 - Sensorless control of three-phase brushless
*                       DC motors with ATmega48.
*
* - Description       : Example of how to use the ATmega48 for sensorless
*                       control of a three phase brushless DC motor.
*
* $Revision: 1.1 
* $Date: Monday, October 10, 2005 11:15:46 UTC 
*****************************************************************************/
/*
編譯器:GCC
CPU:ATMEGA128
頻率:4M
編譯平臺(tái):VC++
程序流程:
主程序:
1. 端口初始化
   詳見P9頁
2. 定時(shí)器初始化
TC0:升序時(shí),比較匹配發(fā)生時(shí),OC0B清零,降序比較匹配發(fā)生時(shí)置位;相位修正PWM模式
    TOP值為OCR0A=200
TC1:8分頻
3. ADC初始化
參考電壓AREF;轉(zhuǎn)換結(jié)果左對齊
定時(shí)器/計(jì)數(shù)器0溢出觸發(fā)ADC自動(dòng)轉(zhuǎn)換
允許模擬比較器中斷(上升沿)
4. 換相控制數(shù)據(jù)表格
5. 首次換相輸出--共8次,然后打開TIMSK1的比較器A.
6. 全局中斷開,進(jìn)入循環(huán)
7.循環(huán)程序.

BMEF檢測的思路:
**進(jìn)入TC1的比較器A中斷,換相并復(fù)位換相定時(shí)器,設(shè)定HOLD-OFF定時(shí)器,打開TC1 的比較器B中斷;
打開TCO中斷,關(guān)閉TC1中斷,準(zhǔn)備零點(diǎn)檢測
**進(jìn)入TC0溢出中斷,取出ADC檢測的電壓值(周期中未通電相),根據(jù)上升或下降沿以及和標(biāo)定值比較判斷
是否為過零點(diǎn).
如果是過零點(diǎn),則對換相數(shù)據(jù)進(jìn)行處理,更新TC1的OCR1A,之后關(guān)閉TC0,打開TC1,轉(zhuǎn)入電流檢測通道,打開ADC轉(zhuǎn)換完成中斷.
如果不是過零點(diǎn),檢測電流過后,恢復(fù)到BMEF電壓檢測狀態(tài),打開ADC轉(zhuǎn)換完成中斷.(等待下一次TC0中斷)

*/
/*

疑問:
1.為何程序中多處出現(xiàn)清中斷標(biāo)志位命令:TIFRN.
2.看門狗的GCC中斷程序怎么寫
3.為了快速存取,在GCC中如何定義寄存器變量
IAR是這樣定義的.
__regvar __no_init volatile unsigned int filteredTimeSinceCommutation @14;
4.感覺過零點(diǎn)檢測失敗應(yīng)該恢復(fù)至定時(shí)器/計(jì)數(shù)器0溢出觸發(fā)ADC自動(dòng)轉(zhuǎn)換
  */
#include "BLDC.h"

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

//! Array of power stage enable signals for each commutation step.
//驅(qū)動(dòng)功率管的信號(hào)組
unsigned char driveTable[6];

//! Array of ADC channel selections for each commutation step.
//ADC通道選擇組
unsigned char ADMUXTable[6];

//! Array holding the inter commutation delays used during startup.
unsigned int startupDelays[STARTUP_NUM_COMMUTATIONS];//8 啟動(dòng)期間的變換次數(shù)

/*! \brief Filtered commutation timer variable and speed indicator.
 *  This value equals half the time of one commutation step. It is filtered
 *  through an IIR filter, so the value stored is not the most recent measuremnt.
 *  The variable is stored in registers R14-R15 for quicker access.
 */
//該變量數(shù)值為變換步階時(shí)間的一半,是通過IIR得出的。所以儲(chǔ)存的值不是最新測量的數(shù)值
//為了快速存取,將這個(gè)變量被放入R14,R15寄存器中
//__regvar __no_init volatile unsigned int filteredTimeSinceCommutation @14;
volatile unsigned int filteredTimeSinceCommutation;
/*! \brief The power stage enable signals that will be output to the motor drivers
 *  at next commutation.
 *
 *  This variable holds the pattern of enable signals that will be output to the
 *  power stage at next commutation. It is stored in register R13 for quick access.
 */
//該變量為下一時(shí)刻功率管的驅(qū)動(dòng)信號(hào)
//為了快速存取,將這個(gè)變量被放入R13寄存器中
//__regvar __no_init volatile unsigned char nextDrivePattern @13;
volatile unsigned char nextDrivePattern;
/*! \brief Polarity of the expected zero crossing.
 *
 *  The polarity of the expected zero crossing.
 *  Could be eiter \ref EDGE_FALLING or \ref EDGE_RISING.
 */
//過零點(diǎn)的斜率(極性)
//為了快速存取,將這個(gè)變量被放入R12寄存器中
//__regvar __no_init volatile unsigned char zcPolarity @ 12;
volatile unsigned char zcPolarity;
/*! \brief The commutation step that starts at next commutation.
 *
 *  The commutation step that starts at next commutation. This is used to keep
 *  track on where in the commutation cycle we are. Stored in register R11 for
 *  quick access
 */
//下一個(gè)變換步階,用于追蹤現(xiàn)在所處的位置
//為了快速存取,將這個(gè)變量被放入R11寄存器中
//__regvar __no_init volatile unsigned char nextCommutationStep @11;
volatile unsigned char nextCommutationStep;
//! ADC reading of external analog speed reference.
//外部速度比較輸入信號(hào)
volatile unsigned char speedReferenceADC;

//! ADC reading of shunt voltage.
//外部分壓輸入信號(hào)
volatile unsigned char shuntVoltageADC = 0;

//! ADC reading of the known external reference voltage.
//外部參考電壓輸入信號(hào)
volatile unsigned char referenceVoltageADC;

//! Flag that specifies whether a new external speed reference 
//! and a motor speed measurement is available.
//速度量測結(jié)束標(biāo)志
volatile unsigned char speedUpdated = FALSE;

//! Flag that specifies whether a new current measurement is available.
// 電流量測結(jié)束標(biāo)志
volatile unsigned char currentUpdated = FALSE;


/*! \brief Program entry point.
 *
 *  Main initializes all peripheral units used and calls the startup procedure.
 *  All commutation control from that point is done in interrupt routines.
 */
void main(void)
{
  // Initialize all sub-systems.
  //ResetHandler();
  InitPorts();
  InitTimers();
  InitADC();
  MakeTables();
  InitAnalogComparator();

  // Run startup procedure.
  StartMotor();

  // Turn on watchdog for stall-detection.
  //WatchdogTimerEnable();
  //__enable_interrupt();
  sei();
  for(;;)
  {
    PWMControl();
  }
}


/*! \brief Examines the reset source and acts accordingly.
 *
 *  This function is called early in the program to disable watchdog timer and
 *  determine the source of reset.
 *
 *  Actions can be taken, based on the reset source. When the watchdog is used as
 *  stall protection, a stall can be detected here. It is possible to e.g. store
 *  a variable in EEPROM that counts the number of failed restart attempts. After a
 *  certain number of attempts, the motor could simply refuse to continue until
 *  an external action happens, indicating that the rotor lock situation could be
 *  fixed.
 */
//將啟動(dòng)失敗的嘗試次數(shù)寫入EEPROM,達(dá)到一定次數(shù)禁止啟動(dòng),等待處理。
/*static void ResetHandler(void)
{
  __eeprom unsigned static int restartAttempts;
  // Temporary variable to avoid unnecessary reading of volatile register MCUSR.
  unsigned char tempMCUSR;

  tempMCUSR = MCUSR;
  MCUSR = tempMCUSR & ~((1 << WDRF) | (1 << BORF) | (1 << EXTRF) | (1 << PORF));

  // Reset watchdog to avoid false stall detection before the motor has started.
  __disable_interrupt();
  __watchdog_reset();
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  WDTCSR = 0x00;

  // Examine the reset source and take action.
  switch (tempMCUSR & ((1 << WDRF) | (1 << BORF) | (1 << EXTRF) | (1 << PORF)))
  {
  case (1 << WDRF):
    restartAttempts++;
    if (restartAttempts >= MAX_RESTART_ATTEMPTS)
    {
      // Do something here. E.g. wait for a button to be pressed.
	//可在此輸入處理 程序,比如按鍵解除。
      for (;;)
      {

      }
    }

    // Put watchdog reset handler here.
    break;
  case (1 << BORF):
    //Put brownout reset handler here.
    break;
  case (1 << EXTRF):
    restartAttempts = 0;
    // Put external reset handler here.
    break;
  case (1 << PORF):
    restartAttempts = 0;
    // Put power-on reset handler here.
    break;
  }
}
*/

/*! \brief Initializes I/O ports.
 *
 *  Initializes I/O ports.
 */

static void InitPorts(void)
{
  // Init DRIVE_DDR for motor driving.
  DRIVE_DDR = (1 << UL) | (1 << UH) | (1 << VL) | (1 << VH) | (1 << WL) | (1 << WH);
  //DDRB=0b00111111;
  // Init PORTD for PWM on PD5.
  DDRD = (1 << PD5);
  //DDRD=0b00100000;
  // Disable digital input buffers on ADC channels.
  //關(guān)閉ADC輸入數(shù)字緩沖器
  DIDR0 = (1 << ADC4D) | (1 << ADC3D) | (1 << ADC2D) | (1 << ADC1D) | (1 << ADC0D);
  //DIDR0=0b00011111;
}


/*! \brief Initializes timers (for commutation timing and PWM).
 *
 *  This function initializes Timer/counter0 for PWM operation for motor speed control
 *  and Timer/counter1 for commutation timing.
 */
static void InitTimers(void)
{
  // Set up Timer/counter0 for PWM, output on OCR0B, OCR0A as TOP value, prescaler = 1.
  //比較匹配A不與OC0A連接
  //TCCROA=0x;//升序時(shí),比較匹配發(fā)生時(shí),OC0B清零,降序比較匹配發(fā)生時(shí)置位;相位修正PWM模式。
  TCCR0A = (0 << COM0A1) | (0 << COM0A0) | (1 << COM0B1) | (0 << COM0B0) | (0 << WGM01) | (1 << WGM00);
  TCCR0B = (1 << WGM02) | (0 << CS02) | (0 << CS01) | (1 << CS00);//CLK 無分頻
  OCR0A = PWM_TOP_VALUE;//8m/20k/2=200 設(shè)置TOP值(TOP=OCR0A)
  TIFR0 = TIFR0;//意義何在?
  TIMSK0 = (0 << TOIE0);//TC0溢出中斷禁止

  // Set up Timer/counter1 for commutation timing, prescaler = 8.
  TCCR1B = (1 << CS11) | (0 << CS10);//為何沒有把CS12加進(jìn)去?
}


/*! \brief Initializes the AD-converter.
 *
 *  This function initializes the AD-converter and makes a reading of the external
 *  reference voltage.
 */
static void InitADC(void)
{
  // First make a measurement of the external reference voltage.
  //參考電壓AREF;轉(zhuǎn)換結(jié)果左對齊;選取電源通道5
  ADMUX = ADMUX_REF_VOLTAGE;//  ((0 << REFS1) | (0 << REFS0))|(1<<ADLAR)|0X05;
  //ADC使能;ADC開始轉(zhuǎn)換;讀出電源電壓                         
  ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADIF) | (ADC_PRESCALER_16);
  while (ADCSRA & (1 << ADSC))
  {

  }
  referenceVoltageADC = ADCH;//讀入VCC電壓值

  // Initialize the ADC for autotriggered operation on PWM timer overflow.
  //ADC使能|ADC開始轉(zhuǎn)換禁止|自動(dòng)觸發(fā)使能|清中斷標(biāo)志|ADC中斷禁止
  ADCSRA = (1 << ADEN) | (0 << ADSC) | (1 << ADATE) | (1 << ADIF) | (0 << ADIE) | ADC_PRESCALER_8;
  //定時(shí)器/計(jì)數(shù)器0溢出觸發(fā)ADC轉(zhuǎn)換
  ADCSRB = ADC_TRIGGER_SOURCE;
  
}


/*! \brief Initializes the analog comparator.
 *
 *  This function initializes the analog comparator for overcurrent detection.
 */
static void InitAnalogComparator(void)
{
#ifdef ANALOG_COMPARATOR_ENABLE
  // Enable analog comparator interrupt on rising edge.
  //允許模擬比較器中斷(上升沿)
  ACSR = (0 << ACBG) | (1 << ACI) | (1 << ACIE) | (1 << ACIS1) | (1 << ACIS0);
#endif
}


/*! \brief Initializes the watchdog timer
 *
 *  This function initializes the watchdog timer for stall restart.
 */
/*static void WatchdogTimerEnable(void)
{
  __disable_interrupt();
  __watchdog_reset();

  WDTCSR |= (1 << WDCE) | (1 << WDE);

  WDTCSR = (1 << WDIF) | (1 << WDIE) | (1 << WDE) | (1 << WDP2);
  __enable_interrupt();
}
*/

/*! \brief Initializes arrays for motor driving and AD channel selection.
 *
 *  This function initializes the arrays used for motor driving and AD channel
 *  selection that changes for each commutation step.
 */
static void MakeTables(void)
{
#if DIRECTION_OF_ROTATION == CCW//如果定義了方向?yàn)镃CW,則執(zhí)行CCW程序。
  driveTable[0] = DRIVE_PATTERN_STEP1_CCW;//UY
  driveTable[1] = DRIVE_PATTERN_STEP2_CCW;//UW
  driveTable[2] = DRIVE_PATTERN_STEP3_CCW;//YW
  driveTable[3] = DRIVE_PATTERN_STEP4_CCW;//YU
  driveTable[4] = DRIVE_PATTERN_STEP5_CCW;//WY
  driveTable[5] = DRIVE_PATTERN_STEP6_CCW;//WY

  ADMUXTable[0] = ADMUX_W;
  ADMUXTable[1] = ADMUX_V;
  ADMUXTable[2] = ADMUX_U;
  ADMUXTable[3] = ADMUX_W;
  ADMUXTable[4] = ADMUX_V;
  ADMUXTable[5] = ADMUX_U;
#else
  driveTable[0] = DRIVE_PATTERN_STEP1_CW;
  driveTable[1] = DRIVE_PATTERN_STEP2_CW;
  driveTable[2] = DRIVE_PATTERN_STEP3_CW;
  driveTable[3] = DRIVE_PATTERN_STEP4_CW;
  driveTable[4] = DRIVE_PATTERN_STEP5_CW;
  driveTable[5] = DRIVE_PATTERN_STEP6_CW;

  ADMUXTable[0] = ADMUX_U;
  ADMUXTable[1] = ADMUX_V;
  ADMUXTable[2] = ADMUX_W;
  ADMUXTable[3] = ADMUX_U;
  ADMUXTable[4] = ADMUX_V;
  ADMUXTable[5] = ADMUX_W;

#endif

  startupDelays[0] = 200;//啟動(dòng)延時(shí)數(shù)組附值
  startupDelays[1] = 150;
  startupDelays[2] = 100;
  startupDelays[3] = 80;
  startupDelays[4] = 70;
  startupDelays[5] = 65;
  startupDelays[6] = 60;
  startupDelays[7] = 55;
}


/*! \brief Executes the motor startup sequence.
 *
 *  This function locks the motor into a known position and fires off a
 *  commutation sequence controlled by the Timer/counter1 overflow interrupt.
 */
static void StartMotor(void)
{
  unsigned char i;
  //OCR0B =130;TOP=OCR0A=200--在定時(shí)器初始化中定義
  SET_PWM_COMPARE_VALUE(STARTUP_PWM_COMPARE_VALUE);

  nextCommutationStep = 0;

  //Preposition.
  DRIVE_PORT = driveTable[nextCommutationStep];
  StartupDelay(STARTUP_LOCK_DELAY);//第一次變換持續(xù)時(shí)間
  nextCommutationStep++;
  nextDrivePattern = driveTable[nextCommutationStep];

  for (i = 0; i < STARTUP_NUM_COMMUTATIONS; i++)
  {
    DRIVE_PORT = nextDrivePattern;
    StartupDelay(startupDelays[i]);
    //參考電壓VREF,左對齊,選取零點(diǎn)檢測通道
    ADMUX = ADMUXTable[nextCommutationStep];

    // Use LSB of nextCommutationStep to determine zero crossing polarity.
    zcPolarity = nextCommutationStep & 0x01;//大概是判斷零點(diǎn)斜率

    nextCommutationStep++;
    if (nextCommutationStep >= 6)
    {
      nextCommutationStep = 0;
    }
    nextDrivePattern = driveTable[nextCommutationStep];
  }

  // Switch to sensorless commutation.
  // 啟動(dòng)結(jié)束,進(jìn)入無傳感器模式正常運(yùn)行
  TCNT1 = 0;
  //輸出比較匹配A中斷使能,行使換相功能,復(fù)位換相定時(shí)器,啟動(dòng)HOLD-OFF準(zhǔn)備定時(shí)比較器
  TIMSK1 = (1 << OCIE1A);

  // Set filteredTimeSinceCommutation to the time to the next commutation.
  filteredTimeSinceCommutation = startupDelays[STARTUP_NUM_COMMUTATIONS - 1] * (STARTUP_DELAY_MULTIPLIER  / 2);
  //不清楚其含義
}


/*! \brief Timer/counter0 bottom overflow. Used for zero-cross detection.
 *
 *  This interrupt service routine is called every time the up/down counting
 *  PWM counter reaches bottom. An ADC reading on the active channel is
 *  automatically triggered at the same time as this interrupt is triggered.
 *  This is used to detect a zero crossing.
 *
 *  In the event of a zero crossing, the time since last commutation is stored
 *  and Timer/counter1 compare A is set up to trigger at the next commutation
 *  instant.
 */
//當(dāng)PWM計(jì)數(shù)器歸零時(shí)引起中斷,同時(shí)觸發(fā)AD轉(zhuǎn)換,零點(diǎn)檢測服務(wù)程序
SIGNAL(SIG_OVERFLOW1)
{
  unsigned char temp;

  // Disable ADC auto-triggering. This must be done here to avoid wrong channel being sampled on manual samples later.
  //ADC自動(dòng)觸發(fā)禁止;ADC中斷禁止,開始手動(dòng)轉(zhuǎn)換
  ADCSRA &= ~((1 << ADATE) | (1 << ADIE));
  
  // Wait for auto-triggered ADC sample to complete.
  
  while (!(ADCSRA & (1 << ADIF)))
  {// 等待自動(dòng)ADC采樣結(jié)束
  
	  }
  temp = ADCH;
  if (((zcPolarity == EDGE_RISING) && (temp > ADC_ZC_THRESHOLD)) || ((zcPolarity == EDGE_FALLING) && (temp < ADC_ZC_THRESHOLD)))
  {//上升沿且檢測點(diǎn)電壓高于設(shè)定零點(diǎn)極限電壓或處在下降沿且低于零點(diǎn)極限電壓時(shí)
    unsigned int timeSinceCommutation;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕乱码亚洲精品一区| 91美女视频网站| 亚洲成人免费观看| 亚洲美女区一区| 中文字幕中文字幕一区二区| 欧美国产日韩亚洲一区| 久久精品视频网| 久久久久久久久久久久久久久99 | 久久99久久久久久久久久久| 午夜伦欧美伦电影理论片| 午夜激情一区二区| 视频一区欧美精品| 奇米影视一区二区三区| 久久精品二区亚洲w码| 精品亚洲porn| 国产精品18久久久久久久久久久久 | 欧美精品一区二区三区在线 | 尤物视频一区二区| 丝袜亚洲另类丝袜在线| 蜜桃精品视频在线| 国产麻豆精品在线| 成人91在线观看| 色婷婷综合久久久中文字幕| 在线观看av一区二区| 制服丝袜亚洲色图| 亚洲精品一区二区三区在线观看| 久久久久久夜精品精品免费| 国产精品色哟哟| 亚洲成人免费视频| 极品少妇xxxx偷拍精品少妇| 大尺度一区二区| 欧美羞羞免费网站| 日韩三级视频在线观看| 久久精品水蜜桃av综合天堂| 中文字幕日韩一区| 午夜亚洲福利老司机| 奇米777欧美一区二区| 国产成人精品影院| 在线观看视频一区二区欧美日韩| 欧美日韩色一区| www国产精品av| 亚洲男女毛片无遮挡| 日本在线不卡视频| 国产成人午夜精品5599| 日本韩国一区二区| 精品国产一区a| 日韩美女视频19| 美腿丝袜亚洲色图| 成人免费的视频| 欧美日韩精品综合在线| 久久影院视频免费| 亚洲午夜精品在线| 国产盗摄精品一区二区三区在线| 欧美在线影院一区二区| 国产日韩一级二级三级| 亚洲国产aⅴ成人精品无吗| 国产美女在线观看一区| 欧美在线小视频| 国产日韩欧美一区二区三区乱码| 91丝袜国产在线播放| 欧美一区二区三区的| 国产精品久久久久桃色tv| 日韩av中文字幕一区二区三区| 国产69精品久久777的优势| 欧美色视频在线观看| 久久免费偷拍视频| 日本不卡一区二区三区高清视频| 不卡av在线网| 2021久久国产精品不只是精品| 亚洲精品免费一二三区| 国产一区二区在线观看免费| 欧美三级日韩三级| 一区在线播放视频| 国产专区综合网| 日韩欧美亚洲另类制服综合在线| 亚洲精品国产a| 成人精品一区二区三区中文字幕 | 国产丝袜欧美中文另类| 日日摸夜夜添夜夜添精品视频| 91在线视频官网| 国产色91在线| 精品一区二区三区日韩| 欧美精品久久久久久久多人混战 | 不卡的av在线| 国产清纯在线一区二区www| 老司机精品视频在线| 欧美日韩在线直播| 国产99一区视频免费| 欧美一区二区网站| 亚洲国产综合在线| 在线一区二区三区四区五区| 国产精品福利影院| 国产99久久久国产精品免费看| 香蕉av福利精品导航| 国产一区二区三区久久久 | 亚洲同性gay激情无套| 国产成人午夜精品5599| 国产视频一区二区三区在线观看| 国产精品996| 日韩高清电影一区| 日韩午夜av一区| 欧美一级黄色大片| 欧美国产国产综合| 国产成人自拍在线| 久久久久久久久久久久久女国产乱| 久久9热精品视频| 欧美tickling网站挠脚心| 日本麻豆一区二区三区视频| 欧美二区三区的天堂| 日韩国产欧美视频| 欧美一区二区福利在线| 久久成人免费网| 欧美精品一区二区三区四区| 国产一区二区在线免费观看| 欧美经典一区二区| av中文一区二区三区| 综合欧美亚洲日本| 91女人视频在线观看| 亚洲精品福利视频网站| 欧美日韩免费高清一区色橹橹| 天天亚洲美女在线视频| 欧美高清激情brazzers| 久久精品国产免费看久久精品| 精品国一区二区三区| 久久综合中文字幕| 国产精品羞羞答答xxdd| 最近中文字幕一区二区三区| 欧美系列亚洲系列| 欧美aaaaa成人免费观看视频| 日韩精品一区二区三区四区| 国产乱子伦视频一区二区三区| 国产精品第四页| 欧美亚洲图片小说| 久久国产精品99精品国产| 国产日韩v精品一区二区| av在线不卡网| 午夜精品视频在线观看| 久久久高清一区二区三区| 95精品视频在线| 婷婷综合在线观看| 久久精品一区八戒影视| 色综合久久99| 久久激五月天综合精品| 中文字幕色av一区二区三区| 5858s免费视频成人| 国产乱码精品一品二品| 亚洲一区二区三区精品在线| 日韩一二三区不卡| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩黄色一级片| 中文字幕欧美日韩一区| 欧美三级在线视频| 国模冰冰炮一区二区| 亚洲精品国产成人久久av盗摄 | 中文字幕欧美三区| 欧美日韩第一区日日骚| 国产精品系列在线播放| 性欧美大战久久久久久久久| 国产欧美日韩综合| 91超碰这里只有精品国产| 高清在线不卡av| 日韩成人午夜精品| 日韩一区欧美一区| 日韩精品一区二区三区中文精品| 一本到不卡精品视频在线观看| 日本美女一区二区| 一区二区三区资源| 国产日韩欧美a| 日韩亚洲欧美综合| 日本韩国一区二区| 岛国精品一区二区| 久久疯狂做爰流白浆xx| 亚洲国产aⅴ天堂久久| 成人免费在线播放视频| 日韩精品一区二区三区在线| 欧美日韩中文一区| 成人av电影观看| 蜜臀久久99精品久久久久久9| 亚洲影视资源网| 中文字幕巨乱亚洲| 精品入口麻豆88视频| 欧美日韩高清一区二区不卡| 91在线视频官网| 国产凹凸在线观看一区二区| 国产精品灌醉下药二区| 久久超碰97中文字幕| 日韩欧美aaaaaa| fc2成人免费人成在线观看播放 | 一区二区三区国产| 欧美日韩国产不卡| 国产精品夜夜爽| 亚洲免费高清视频在线| 色素色在线综合| 久久99精品国产91久久来源| ●精品国产综合乱码久久久久| 国产+成+人+亚洲欧洲自线| 欧美日韩一区二区三区高清| 91视频.com| 91欧美一区二区| caoporm超碰国产精品|