久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7810|回復: 8
打印 上一主題 下一主題
收起左側

驅動cc2500底層 C程序 可移植

[復制鏈接]
跳轉到指定樓層
樓主
cc2500的底層驅動 C程序 而且可移植:

全部源碼下載:
Desktop.zip (13.7 KB, 下載次數: 79)

單片機主程序預覽:

  1. #include "CC2500.h"                                        // CC2500無線數傳模塊驅動頭文件

  2. #define C25_Pin_CSn(x)      PORTB_PB5 = x                 // 芯片選擇  (MCU output)
  3. #define C25_Pin_SCLK(x)     PORTB_PB1 = x                 // 時鐘輸入  (MCU output)
  4. #define C25_Pin_SI(x)       PORTB_PB0 = x                 // 數據輸入  (MCU output)
  5. #define C25_Pin_SO          PORTB_PB2                     // 數據輸出  (MCU input)
  6. #define C25_Pin_GDO0        PORTB_PB4                     // 通用輸出  (MCU input)
  7. //#define C25_Pin_GDO2        PORTB_PJ6                     // 通用輸入  (MCU input)



  8. byte   C25_Send_Buff[C25_Buff_Len]={1,2,3,4,5,6,7,8,9,10};// 發送數據緩沖區
  9. byte   C25_Rece_Buff[C25_Buff_Len]={0};                   // 接收數據緩沖區
  10. byte   flag_send_ok = 0;                                //發送完成標志位 0完成  1正在發送

  11. // 函數: C25_Soft_Dly()
  12. // 描述: 軟件延時  10us
  13. // 參數: 無
  14. void C25_Soft_Dly(int ms)            
  15. {
  16.     int ii,jj;
  17.     if (ms<1) ms=1;
  18.     for(ii=0;ii<ms;ii++)
  19.         for(jj=0;jj<200;jj++);    //K60默認頻率for(jj=0;jj<160;jj++);
  20. }

  21. // 函數: C25_SPI_WR_Byte()
  22. // 描述: 通過SPI寫一個byte到CC2500,同時從CC2500讀取一個Byte
  23. // 參數: byte         待寫入字節數據
  24. //                 return 讀取到的字節數據
  25. byte C25_SPI_WR_Byte(byte temp)
  26. {
  27.     byte j;
  28.     for(j=0; j<8; j++)                                   // 循環8次
  29.     {                                 
  30.         C25_Pin_SI((temp & 0x80)>>7);                    // 將byte最高位輸出到SI
  31.         temp <<= 1;                                                    // 低一位移位到最高位
  32.         C25_Pin_SCLK(1);                                 // 拉高SLCK,CC2500從SI讀入1位數據,同時CC2500從SO輸出1位數據
  33.         temp |= C25_Pin_SO;                              // 讀SO到byte最低位
  34.         C25_Pin_SCLK(0);                                 // SCLK置低
  35.     }
  36.     return(temp);                                              // 返回讀取的1Byte數據
  37. }

  38. // 函數: C25_SPI_W_Cmd_Strobes()
  39. // 描述: 向芯片中寫入指令控制字
  40. // 參數: cmd   待寫入的指令控制字
  41. void C25_SPI_W_Cmd_Strobes(byte cmd)
  42. {
  43.     C25_Pin_CSn(0);                                            // CSn置低,開始數據傳輸過程
  44.     (void)C25_SPI_WR_Byte(C25_RW_WRITE_SINGLE | cmd);    // 寫入指令控制字
  45.     C25_Pin_CSn(1);                                      // CSn置高,結束數據傳輸過程
  46. }

  47. // 函數: C25_SPI_W_Reg_Single()
  48. // 描述: 向1個寄存器中寫入數據,同時讀取狀態字
  49. // 參數: addr   待寫入的寄存器地址
  50. //       value         待寫入的字節數據
  51. //                 return 讀取到狀態字
  52. byte C25_SPI_W_Reg_Single(byte addr,byte value)
  53. {
  54.     byte status;
  55.     C25_Pin_CSn(0);                                            // CSn置低,開始數據傳輸過程
  56.     (void)C25_SPI_WR_Byte(C25_RW_WRITE_SINGLE | addr);   // 寫入寄存器地址及讀寫控制
  57.     status = C25_SPI_WR_Byte(value);                     // 寫入寄存器數值,并讀取狀態字
  58.     C25_Pin_CSn(1);                                      // CSn置高,結束數據傳輸過程
  59.     return(status);                                      // 返回狀態字
  60. }

  61. // 函數: C25_SPI_W_Reg_Burst()
  62. // 描述: 向寄存器中寫入多個數據
  63. // 參數: addr   待寫入的寄存器首地址
  64. //       *p         待寫入的數據首地址
  65. //                 num    待寫入的數據長度
  66. void C25_SPI_W_Reg_Burst(byte addr,byte num,byte *p)
  67. {
  68.     byte j;
  69.     C25_Pin_CSn(0);                                      // CSn置低,開始數據傳輸過程
  70.     (void)C25_SPI_WR_Byte(C25_RW_WRITE_BURST | addr);    // 寫入寄存器地址及讀寫控制(多字節)
  71.     for(j=0; j<num; j++)
  72.     {
  73.     (void)C25_SPI_WR_Byte(p[j]);                         // 寫入寄存器數值
  74.     }
  75.     C25_Pin_CSn(1);                                      // CSn置高,結束數據傳輸過程
  76. }

  77. // 函數: C25_SPI_R_Reg_Burst()
  78. // 描述: 從寄存器中讀取多個數據
  79. // 參數: addr   待讀取的寄存器首地址
  80. //       *p         待讀取的寄存器數據存放首地址
  81. //                 num    待讀取的數據長度
  82. void C25_SPI_R_Reg_Burst(byte addr,byte num,byte *p)
  83. {
  84.     byte j;
  85.     C25_Pin_CSn(0);                                      // CSn置低,開始數據傳輸過程
  86.     (void)C25_SPI_WR_Byte(C25_RW_READ_BURST | addr);     // 寫入寄存器地址及讀寫控制(多字節)
  87.     for(j=0; j<num; j++)
  88.     {
  89.         p[j]=C25_SPI_WR_Byte(0);                         // 讀取寄存器數值
  90.     }
  91.     C25_Pin_CSn(1);                                      // CSn置高,結束數據傳輸過程
  92. }

  93. // 函數: C25_Power_ON_Reset()
  94. // 描述: CC2500芯片上電后的復位
  95. // 參數: 無
  96. void C25_Power_ON_Reset(void)
  97. {
  98.     long delay_num = 0;
  99.     DDRB = 0X23;                                                //輸入輸出方向
  100.     PUCR_PUPBE = 0xff;                                             //端口上拉
  101.     PORTB = 0X00;                                               //端口初始化
  102.     C25_Pin_SCLK(0);                                                                                        // SCLK置低
  103.     C25_Pin_SI(0);                                                                                        // SI置低
  104.     C25_Pin_CSn(1);                                             // CSN置高
  105.     C25_Soft_Dly(1);                                            // 延時
  106.     C25_Pin_CSn(0);                                              // CSn置低
  107.     C25_Soft_Dly(1);                                            // 延時
  108.     C25_Pin_CSn(1);                                             // CSn置高
  109.     C25_Soft_Dly(50);                                           // 保持CSn為高至少40uS
  110.     C25_Pin_CSn(0);                                             // CSn置低
  111.     delay_num = 0;
  112.                                                                 //等待時間過長強制跳出 以免卡死程序
  113.     while(C25_Pin_SO==1 && delay_num<500000)    delay_num++;    // 等待SO置低(CHIP_RDYn)
  114.     (void)C25_SPI_WR_Byte(C25_RW_WRITE_SINGLE | C25_CS_SRES);   // 寫入芯片復位指令字
  115.     delay_num = 0;
  116.                                                                 //等待時間過長強制跳出 以免卡死程序
  117.     while(C25_Pin_SO==1 && delay_num<500000)    delay_num++;    // 等待SO再置低,復位完成,此時芯片處于IDLE狀態
  118.     C25_Pin_CSn(1);                                             // CSn置高,結束復位過程
  119. }

  120. // 函數: C25_Reg_Config()
  121. // 描述: CC2500寄存器設置
  122. //       工作頻率: 2400.0MHz (基頻:2400.0MHz, 通道:0, 通道間隔:200kHz)
  123. //       調制模式: GFSK
  124. //       數據速率: 2.4kbps
  125. //       發射功率: +1dBm
  126. //       數據包  : 固定長度
  127. //       CRC校驗 : 開啟
  128. //       數據白化: 開啟
  129. //       曼切斯特: 關閉
  130. //       FEC     : 關閉
  131. void C25_Reg_Config(void)
  132. {
  133.     (void)C25_SPI_W_Reg_Single(C25_RA_IOCFG2,     C25_CR_IOCFGx_INV_DI              // GDO2:不反轉輸出電平
  134.                                           | C25_CR_IOCFGx_SYNC_WORD);               // GDO2:發送/接收到同步字時置位,并在數據包的末尾取消置位
  135.     (void)C25_SPI_W_Reg_Single(C25_RA_IOCFG0,     C25_CR_IOCFG0_TEMP_SENS_DI        // GDO0:禁用模擬溫度傳感器
  136.                                           | C25_CR_IOCFGx_INV_DI                    // GDO0:不反轉輸出電平
  137.                                           | C25_CR_IOCFGx_ABOVE_RX_FIFO_THR_END);   // GDO0:達到或超出RX_FIFO閾值 填充RX_FIFO時置位,或到達數據包結尾時置位.
  138.     (void)C25_SPI_W_Reg_Single(C25_RA_FIFOTHR,    C25_CR_FIFOTHR_TX_1_RX_64);       // 設置TX_FIFO和RX_FIFO閥值(TX:1,RX:64)
  139.     (void)C25_SPI_W_Reg_Single(C25_RA_SYNC1,      C25_CR_SYNC1);                    // 同步字高位(默認0xD3=11010011)
  140.     (void)C25_SPI_W_Reg_Single(C25_RA_SYNC0,      C25_CR_SYNC0);                    // 同步字低位
  141.     (void)C25_SPI_W_Reg_Single(C25_RA_PKTLEN,     C25_Buff_Len);                    // 固定長度數據包時為數據包長度;可變長度數據包時為允許的最大數據包長度
  142.     (void)C25_SPI_W_Reg_Single(C25_RA_PKTCTRL1,   C25_CR_PKTCTRL1_PQT               // 前導質量評估門限(默認值0)(等于0時同步字總能被接收)
  143.                                           | C25_CR_PKTCTRL1_CRC_AUTOFLUSH_EN        // 當接收數據CRC校驗失敗時,自動清空RX_FIFO
  144.                                           | C25_CR_PKTCTRL1_APPEND_STATUS_EN        // 在有效負載上添加狀態字
  145.                                           | C25_CR_PKTCTRL1_ADR_CHK_DI);            // 不檢查地址
  146.     (void)C25_SPI_W_Reg_Single(C25_RA_PKTCTRL0,   C25_CR_PKTCTRL0_WHITE_DATA_EN     // 開啟數據白化
  147.                                           | C25_CR_PKTCTRL0_NORMAL_MODE             // 普通模式,使用FIFO
  148.                                           | C25_CR_PKTCTRL0_CRC_EN                  // 開啟CRC校驗
  149.                                           | C25_CR_PKTCTRL0_PTKLEN_FIXED);          // 固定數據包長度模式,在PKTLEN寄存器中配置長度數據
  150.     (void)C25_SPI_W_Reg_Single(C25_RA_ADDR,       C25_CR_ADDR);                     // 數據包過濾時使用的地址.可選廣播地址為0x00和0xFF
  151.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCTRL1,    C25_CR_FSCTRL1_500KBPS);          // 建議使用SmartRF Studio進行計算
  152.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCTRL0,    C25_CR_FSCTRL0);                  // 建議使用SmartRF Studio進行計算
  153.     (void)C25_SPI_W_Reg_Single(C25_RA_FREQ2,      C25_CR_FREQ2_2400MHz);            // 基頻為2400MHz時的FREQ2寄存器值
  154.     (void)C25_SPI_W_Reg_Single(C25_RA_FREQ1,      C25_CR_FREQ1_2400MHz);            // 基頻為2400MHz時的FREQ1寄存器值
  155.     (void)C25_SPI_W_Reg_Single(C25_RA_FREQ0,      C25_CR_FREQ0_2400MHz);            // 基頻為2400MHz時的FREQ0寄存器值
  156.     (void)C25_SPI_W_Reg_Single(C25_RA_MDMCFG4,    C25_CR_MDMCFG4_500KBPS);          // 建議使用SmartRF Studio進行計算
  157.     (void)C25_SPI_W_Reg_Single(C25_RA_MDMCFG3,    C25_CR_MDMCFG3_500KBPS);          // 建議使用SmartRF Studio進行計算
  158.     (void)C25_SPI_W_Reg_Single(C25_RA_MDMCFG2,    C25_CR_MDMCFG2_DEM_DCFILT_OFF_EN  // 在解調前禁用數字DC阻斷濾波器,使能(更佳的靈敏度)
  159.                                           | C25_CR_MDMCFG2_MOD_FORMAT_2FSK          // 2FSK
  160.                                           | C25_CR_MDMCFG2_MANCHESTER_DI            // 禁用曼切斯特編碼/解碼
  161.                                           | C25_CR_MDMCFG2_30_32_B_SYNC);           // 檢測30/32同步字bit
  162.     (void)C25_SPI_W_Reg_Single(C25_RA_MDMCFG1,    C25_CR_MDMCFG1_FEC_DI             // 禁用交錯向前糾錯
  163.                                           | C25_CR_MDMCFG1_NUM_PREAMBLE_4BYTE       // 最小前導4Byte
  164.                                           | C25_CR_MDMCFG1_CHANSPC_E);              // 通道間隔的2bit指數
  165.     (void)C25_SPI_W_Reg_Single(C25_RA_MDMCFG0,    C25_CR_MDMCFG0_CHANSPC_M);        // 通道間隔的8bit尾數
  166.     (void)C25_SPI_W_Reg_Single(C25_RA_DEVIANT,    C25_CR_DEVIANT_500KBPS);          // 建議使用SmartRF Studio進行計算
  167.     (void)C25_SPI_W_Reg_Single(C25_RA_MCSM2,      C25_CR_MCSM2_RX_TIME_RSSI_DI      // 不使用RSSI測量執行RX終止
  168.                                           | C25_CR_MCSM2_RX_TIME_QUAL_SYNC          // 在RX_TIME定時器超時時,芯片檢查是否找到同步字
  169.                                           | C25_CR_MCSM2_RX_TIME);                  // 在WOR模式和標準RX運行時,RX中的同步字搜索時限
  170.     (void)C25_SPI_W_Reg_Single(C25_RA_MCSM1,      C25_CR_MCSM1_CCA_MODE_RB_UCRPKT   // 如果RSSI在閥值之下且除當前接收數據包外,清空通道指示
  171.                                           | C25_CR_MCSM1_RXOFF_MODE_RX              // 數據包接收完成后保持RX狀態
  172.                                           | C25_CR_MCSM1_TXOFF_MODE_RX);            // 數據包發送完成后進入RX狀態
  173.     (void)C25_SPI_W_Reg_Single(C25_RA_MCSM0,      C25_CR_MCSM0_FS_AUTOCAL_IDLE_RTX  // 從IDLE轉到RX,TX,FSTXON時進行自動校準
  174.                                           | C25_CR_MCSM0_PO_TIMEOUT_EC_64           // 終止計數次數64
  175.                                           | C25_CR_MCSM0_PIN_CTRL_DI                // 禁用由引腳直接進行的無線狀態控制
  176.                                           | C25_CR_MCSM0_XOSC_FORCE_ON_DI);         // XOSC在SLEEP狀態下關閉
  177.     (void)C25_SPI_W_Reg_Single(C25_RA_FOCCFG,     C25_CR_FOCCFG_500KBPS);           // 建議使用SmartRF Studio進行計算
  178.     (void)C25_SPI_W_Reg_Single(C25_RA_BSCFG,      C25_CR_BSCFG_500KBPS);            // 建議使用SmartRF Studio進行計算
  179.     (void)C25_SPI_W_Reg_Single(C25_RA_AGCCTRL2,   C25_CR_AGCCTRL2_500KBPS);         // 建議使用SmartRF Studio進行計算
  180.     (void)C25_SPI_W_Reg_Single(C25_RA_AGCCTRL1,   C25_CR_AGCCTRL1_500KBPS);         // 建議使用SmartRF Studio進行計算
  181.     (void)C25_SPI_W_Reg_Single(C25_RA_AGCCTRL0,   C25_CR_AGCCTRL0_500KBPS);         // 建議使用SmartRF Studio進行計算
  182.     (void)C25_SPI_W_Reg_Single(C25_RA_WOREVT1,    C25_CR_WOREVT1_EVENT0_HBYTE);     // 事件0超時時間高位
  183.     (void)C25_SPI_W_Reg_Single(C25_RA_WOREVT0,    C25_CR_WOREVT0_EVENT0_LBYTE);     // 事件0超時時間低位
  184.     (void)C25_SPI_W_Reg_Single(C25_RA_WORCTRL,    C25_CR_WORCTRL_RC_PD_EN           // 向RC振蕩器發送掉電信號
  185.                                           | C25_CR_WORCTRL_EVENT1_48                // 約1.333~1.385ms
  186.                                           | C25_CR_WORCTRL_RC_CAL_EN                // 開啟RC振蕩器校準
  187.                                           | C25_CR_WORCTRL_WOR_RES_1P);             // 精度1周期,最大時限1.8~1.9秒
  188.     (void)C25_SPI_W_Reg_Single(C25_RA_FREND1,     C25_CR_FREND1_500KBPS);           // 建議使用SmartRF Studio進行計算
  189.     (void)C25_SPI_W_Reg_Single(C25_RA_FREND0,     C25_CR_FREND0_LODIV_BUF_CURRENT_TX// 調節當前TX LO緩沖器(PA的輸入)
  190.                                           | C25_CR_FREND0_PA_POWER_0);              // 選擇PA功率設置
  191.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCAL3,     C25_CR_FSCAL3_500KBPS);           // 建議使用SmartRF Studio進行計算
  192.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCAL2,     C25_CR_FSCAL2);                   // 建議使用SmartRF Studio進行計算
  193.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCAL1,     C25_CR_FSCAL1_500KBPS);           // 建議使用SmartRF Studio進行計算
  194.     (void)C25_SPI_W_Reg_Single(C25_RA_FSCAL0,     C25_CR_FSCAL0_500KBPS);           // 建議使用SmartRF Studio進行計算
  195.     (void)C25_SPI_W_Reg_Single(C25_RA_RCCTRL1,    C25_CR_RCCTRL1);                  // 建議使用SmartRF Studio進行計算
  196.     (void)C25_SPI_W_Reg_Single(C25_RA_RCCTRL0,    C25_CR_RCCTRL0);                  // 建議使用SmartRF Studio進行計算
  197.     (void)C25_SPI_W_Reg_Single(C25_RA_PATABLE,    C25_PS_PATABLE_1dBm);             // 寫入PATABLE(+1.5dBm,21.4mA)
  198.     C25_SPI_W_Cmd_Strobes(C25_CS_SRX);                                              // 開啟RX
  199. }

  200. // 函數: C25_Send_Packet()
  201. // 描述: 通過CC2500發送數據包,發送完成后返回接收狀態
  202. // 參數: *p                待發送數據的首地址


  203. void C25_Send_Packet(byte *p)
  204. {
  205.     Cpu_DisableInt();

  206.     if(!flag_send_ok)//檢測是否正在發送  //中斷使用
  207.     {
  208.     C25_SPI_W_Cmd_Strobes(C25_CS_SIDLE);                                     // 進入IDLE空閑模式
  209.     C25_SPI_W_Cmd_Strobes(C25_CS_SFTX);                                      // 清空TX_FIFO
  210.     C25_SPI_W_Reg_Burst(C25_RA_TXFIFO, C25_Buff_Len, p);        // 將數據寫入TX_FIFO寄存器
  211.     C25_SPI_W_Cmd_Strobes(C25_CS_STX);                                      // 開啟TX
  212.     //flag_send_ok = 1;                                   // 數據發射準備就緒標志位
  213.     //while(C25_Pin_GDO2 == 0);                                                                                     // 等待發送結束  //中斷觸發時注釋這兩句
  214.     //while(C25_Pin_GDO2 == 1);                                                                                                                  // 等待發送結束  //中斷觸發時注釋這兩句
  215.     }                                                                 
  216.     Cpu_EnableInt();

  217. }

  218. // 函數: C25_Rece_Packet()
  219. // 描述: 檢查CC2500是否接收到數據;有接收時將數據返回至接收緩存區
  220. // 參數: *p                接收數據存放地址
  221. //                 return        接收成功標志,為1時表明數據接收成功
  222. byte C25_Rece_Packet(byte *p)
  223. {
  224.     if(C25_Pin_GDO0==1)                                           // 檢查接收數據包是否完成
  225.     {                                                
  226.       C25_SPI_R_Reg_Burst(C25_RA_RXFIFO, C25_Buff_Len+2, p);    // 讀取RX_FIFO及附加狀態字
  227.       C25_SPI_W_Cmd_Strobes(C25_CS_SIDLE);                                        // 進入IDLE空閑模式
  228.       C25_SPI_W_Cmd_Strobes(C25_CS_SFRX);                                          // 清空RX_FIFO
  229.             C25_SPI_W_Cmd_Strobes(C25_CS_SRX);                                          // 重新開啟RX
  230.       return 1;
  231.     }
  232.     return 0;                                                     // 返回接收失敗標志
  233. }


  234. // 函數: C25_Get_RX_dBm()
  235. // 描述: 在完成數據接收后,獲取接收功率
  236. // 參數: rssi   接收信號強度指示
  237. //                 return        接收功率
  238. char C25_Get_RX_dBm(byte rssi)
  239. {
  240.         char t=rssi;
  241.         if(rssi>=128){t-=255;}                                          // 取絕對值
  242.     return(t/2-71);                                               // 計算RSSI值
  243. }                                                   
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:198559 發表于 2017-5-9 11:42 | 只看該作者
學習學習
回復

使用道具 舉報

板凳
ID:302326 發表于 2018-4-5 11:53 | 只看該作者
同樣也要來學習
回復

使用道具 舉報

地板
ID:241128 發表于 2018-5-5 08:51 | 只看該作者
移植后出現這兩句是什么意思啊?求樓主解救...
CC2500.h(4): warning C318: can't open file 'Includes.h'
CC2500.h(6): error C129: missing ';' before 'C25_Send_Buff'
回復

使用道具 舉報

5#
ID:26275 發表于 2018-6-21 23:01 | 只看該作者
fzhlpp 發表于 2018-5-5 08:51
移植后出現這兩句是什么意思啊?求樓主解救...
CC2500.h(4): warning C318: can't open file 'Includes.h' ...

你手里有Includes.h 這個文件嗎? 需要放到目錄下去,

程序移植過去,還需要針對你自己的電路做一些IO口的修改, 不是直接照搬使用的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:403593 發表于 2020-3-2 17:39 | 只看該作者
可以用來參考,感謝分享!
回復

使用道具 舉報

7#
ID:743449 發表于 2020-5-17 22:13 | 只看該作者
謝謝分享,正在找呢
回復

使用道具 舉報

8#
ID:149139 發表于 2021-5-6 09:56 | 只看該作者
非常感謝,正在研究
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91免费在线视频 | 婷婷国产一区二区三区 | 国产精品久久久亚洲 | 国产一区二区三区在线免费 | 国产精品中文字幕一区二区三区 | 亚洲精品区 | 国产婷婷 | 伊人精品一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 一区二区三区四区不卡视频 | 狠狠ri| 国产99久久久国产精品 | caoporn免费在线视频 | 黄色av网站在线观看 | 国产精品99久久久久久久vr | 久久久人成影片一区二区三区 | 中国大陆高清aⅴ毛片 | 午夜视频一区二区 | 欧美国产视频一区二区 | 视频第一区 | 91操操操 | 成人午夜精品 | 欧美日韩精品影院 | 天天干,夜夜操 | 精品免费国产视频 | cao在线 | 特级做a爰片毛片免费看108 | 在线视频91 | 日韩在线一区二区三区 | 午夜视频网站 | 国产在线精品一区二区 | 麻豆av一区二区三区久久 | 久久久久国产精品午夜一区 | 美女黄频 | 91九色麻豆 | 国产69久久精品成人看动漫 | 看一级毛片 | 午夜视频一区二区三区 | 精品国产一区二区三区久久久蜜月 | 精品国产一二三区 | 国产 日韩 欧美 在线 |