《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 用IAR編譯器開發(fā)DS80C400
用IAR編譯器開發(fā)DS80C400
摘要: Dallas Semiconductor為IAR編譯器提供支持C程序訪問DS80C400 ROM軟件的函數。用C程序能夠訪問網棧、存儲管理器、進程調度器以及DS80C400的其它許多函數。使用C語言的DS80C400微控制器開發(fā)者能夠編寫出更精簡的應用程序,賦予系統(tǒng)足夠的速度、能力和代碼空間。Dallas Semiconductor正致力于將所有目前工作與Keil編譯器的DS80C400庫移植到IAR.請經常訪問DS80C400 IAR庫主頁獲得升級。
Abstract:
Key words :

摘要:DS80C400微控制器ROM的功能可由8051匯編語言、C或Java?編寫的程序訪問。通過使用ROM功能和由Maxim開發(fā)的軟件庫能夠構建多種應用程序。本應用筆記闡述了如何使用8051 IAR Embedded Workbench?來建立DS80C400的C語言應用程序。通過一個簡單的HTTP服務器示例來演示DS80C400的ROM功能。

引言

DS80C400微控制器的ROM包含多種功能,可通過由8051匯編語言、C或Java編寫的程序訪問。DS80C400的ROM功能提供成熟的MxTNI?網棧、進程調度和存儲器管理,是開始構建C和匯編程序的最佳選擇。對于簡單程序,可以用匯編語言輕松實現(xiàn)。對于更復雜的程序,C語言可以充分利用Dallas Semiconductor提供的ROM組件和軟件庫。這些軟件庫幫助您利用Keil ?Vision2?、SDCC和IAR 8051編譯器構建應用程序。

本應用筆記闡述了如何開始使用8051 IAR Embedded Workbench?來創(chuàng)建DS80C400的C語言應用程序。通過一個簡單的HTTP服務器演示如何使用DS80C400的ROM功能。所有開發(fā)都采用TINIm400驗證模塊和包含6.11A版本C編譯器的8051 IAR Embedded Workbench.

從8051 IAR Embedded Workbench開始

本節(jié)闡述如何使用IAR Embedded Workbench套件創(chuàng)建一個C語言編寫的Hello World程序,即您的第一個DS80C400 C應用程序。

1.安裝IAR Embedded Workbench

2.選擇File→New→Workspace,在工作空間窗口,輸入workspace名稱appnote

3.選擇Project→Create New Project.在出現(xiàn)的對話框中,輸入項目名稱hellowworld,并確定選擇了8051作為工具鏈

4.當左側的項目窗口打開時,選擇Project→Add Files…在彈出的對話框中,將files of type改為匯編程序文件。添加文件Cstartup.s51,該文件可在Download的zip文件中找到

5.雙擊并打開文件Cstartup.s51.找到程序段聲明RSEG CSTART:CODE:ROOT(0)。這是代碼段的開始。變量段的起始地址在link51ew_400.xcl中聲明。代碼的開始在文件中的0x400000h進行聲明。另外,應有一個DB 'TINI'行,后跟另一個DB, high(?INIT)',帶有注釋Target Bank.這樣就可以確保應用程序對應于TINIm400 flash的起始地址

6.建立新文件main.c.在該文件中寫入如下代碼:

#include
#include
void main ()
{
printf("Test program using IAR compiler");

while (1)
{
}
保存文件內容。通過選擇Project→Add Files,然后在文件對話框中選擇main.c,這樣就把剛建立的文件加入到項目hellowworld中。確定加入的文件就是您建立的文件main.c;因為在默認目錄中很有可能存在另一個具有相同名字的文件

7.同樣,將文件low_level_init.s51和putchar.c加入到項目中。low_level_init.s51文件包含初級DS80C400初始化程序;putchar.c文件包含將字符輸出至默認控制臺的初級程序

8.從ftp://ftp.dalsemi.com/pub/tini/ds80c400/c_libraries/iar/bin/init.zip復制ROM initialization庫文件,并將其解壓縮到相同目錄下。將rominit.r51庫文件添加到項目中

9.在編譯Hello_World應用程序之前,我們需要配置IAR工具鏈來滿足DS80C400的目標要求

1)。選擇Project→Options→General

單擊Target標簽并瀏覽,在Derivative中選擇DS80C400.將Extended stack at:對應的地址值改為0xFFDC00.這是因為IAR起始代碼重新定位DS80C400硬件堆棧至0xFFDC00.對應這些設置請參考圖1.

單擊Data Pointer標簽。選擇Number of DPTRs = 1.這是因為由Dallas Semiconductor所提供的庫文件是在該選項下產生。

圖1. 選擇新的IAR 8051項目Target選項

圖1. 選擇新的IAR 8051項目Target選項

2)選擇Project-Options→Options→ICC8051

單擊Code標簽。選擇Optimizations下的Size和None.

單擊List標簽。選擇Output List File和Output assembler File.

單擊Preprocessor標簽。在include路徑中放入以下程序:

$TOOLKIT_DIR$INC

$TOOLKIT_DIR$INCCLIB

$TOOLKIT_DIR$srclib

$TOOLKIT_DIR$srclibclib

include

上面最后一行是庫的頭文件(*.h)所處的include路徑。確定頭文件在上面指定的路徑中。$TOOLKIT_DIR$與IAR安裝路徑有關(例如,c:/program files/iar systems/embedded workbench 3.n/8051)。

3)選擇Project→Options→A8051

單擊List標簽。選中Output List File.

單擊Preprocessor標簽,在include路徑中放入以下程序:

$TOOLKIT_DIR$INC

$TOOLKIT_DIR$srclib

include

上面最后一行是庫的頭文件(*.h; *.inc)所處的include路徑。確定頭文件在上面指定的路徑中。

4)。選擇Project-→Options→XLINK

單擊Output標簽

在Output file中,選擇Override default,并將文本文件名改為hello_world.hex.

在Format中,選擇Other,并從選項中選擇Intel Extended.詳情請參考圖2.

單擊List標簽。選擇Generate Linker Listing.

單擊include標簽,參考圖3.

選擇Ignore CSTARTUP in Library.

單擊Override default,將文件名改為$TOOLKIT_DIR$configlnk51ew_400.xcl. $TOOLKIT_DIR$與IAR安裝路徑有關(例如,c:/program files/iar systems/embedded workbench 3.n/8051)。確定文件lnk51ew_400.xcl和lnk_base_400.xcl在指定的路徑中。可在zip文件Download中找到這些文件。

圖2. 選擇新的IAR 8051項目的XLINK Output選項

 

圖2. 選擇新的IAR 8051項目的XLINK Output選項。

圖3. 選擇新的IAR 8051項目的XLINK Include選項

圖3. 選擇新的IAR 8051項目的XLINK Include選項。

圖3. 選擇新的IAR 8051項目的XLINK Include選項。

建立Hello_World應用程序。如果正確完成了每一步,建立過程應不會出現(xiàn)錯誤或警告信息;之后會在/debug/exe目錄中產生hello_world.hex.如果你的項目配置為Release,那么hex文件將在/release/exe目錄中產生。

現(xiàn)在已經生成了可執(zhí)行文件,我們需要將應用程序裝載到TINIm400模塊中并運行。

將示例應用程序裝載到TINIm400模塊:

本節(jié)說明如何使用Maxim/Dallas Semiconductor提供的Microcontroller Tool Kit (MTK)工具將IAR編譯器生成的hex文件裝載到TINIm400驗證模塊中。目前可用的MTK版本僅支持Windows.如果您的開發(fā)環(huán)境不是Windows?,需要使用JavaKit應用程序來裝載和執(zhí)行應用程序。要使用JavaKit,您必須具備Java Runtime Environment? (版本至少為1.2),并且安裝了Java Communications API?.JavaKit工具包含在MxTNI軟件開發(fā)包中。請下載MxTNI SDK.在撰寫本文時,發(fā)布的最新固件版本是1.15.運行JavaKit的指導說明可在TINI SDK docs目錄下的Running_JavaKit.txt文件中找到。如果您在運行MTK或JavaKit時遇到問題,可能其他人已經遇到過類似問題并已在Dallas Semiconductor討論組公布。您可以在討論組搜索現(xiàn)有文章(和新發(fā)表的文章)。

在此可下載最新版本的應用程序。要安裝MTK,請運行安裝文件并按照提示操作。成功安裝后,將會添加一個新的菜單組:Start→All Programs→Dallas Semiconductor MTK.MTK啟動后,會出現(xiàn)圖4. 所示的對話框。

圖4. 啟動時 MTK選項

圖4. 啟動時 MTK選項。

選擇TINI選項,以操作TINIm400評估板。

選擇了TINI之后,會打開MTK主窗口。從Options→Configure Serial Port菜單選項中選擇您用來與TINIm400通信的串口。然后,選擇Tini→Tini Options 菜單,就會出現(xiàn)下面的對話框。選擇DSTINIm400按鈕,配置MTK用于和TINIm400板通訊。圖5顯示了帶有DSTINIm400按鈕的對話框。

圖5. 選擇TINIm400配置選項

圖5. 選擇TINIm400配置選項。

選擇Tini→Open COMx在xxx baud菜單選項打開串口。接著選擇Tini→Reset 選項復位評估板。會出現(xiàn)DS80C400的裝載提示,如下所示:

DS80C400 Silicon Software - Copyright (C) 2002 Maxim Integrated Products

Detailed product information available at http://www.maxim-ic.com

Welcome to the TINI DS80C400 Auto Boot Loader 1.0.1

>

從File菜單中選擇Load HEX File.找到并選擇我們剛才生成的hello_world.hex文件。加載程序后,有兩種方法運行它。因為我們將程序加載到40區(qū),您可以輸入:

> B40

> X

要選擇40區(qū)并運行那里的代碼,您也可以輸入:

> E

這會使ROM查找可執(zhí)行代碼。它查找一個標識當前區(qū)具有可執(zhí)行代碼的特定標簽。此標簽由文本'TINI'和隨后的當前區(qū)號碼組成,并位于當前區(qū)的0x0002地址。應用程序的起始代碼采用下面幾行聲明該標簽:

?VECTOR_TABLE:

sjmp ?INIT

DB      'TINI'           ; Tag for TINI Environment 1.02c

; or later (ignored in 1.02b)

DB      high(?INIT)      ; Target bank

注意sjmp ?INIT語句位于0x40區(qū)的0x0000地址。其后緊跟著可執(zhí)行標簽{ 'T', 'I', 'N', 'I', 0h},由于sjmp語句為兩個字節(jié),所以該標簽地址位于0x0002處。當您鍵入E時,ROM從C0h區(qū)開始向下搜索可執(zhí)行代碼。如果您鍵入E時,執(zhí)行了其它代碼,則意味著ROM在一個比您的代碼裝載位置0x400000更高的地址找到了一個可執(zhí)行標簽。如果出現(xiàn)這種情況,您可能需要找到此標簽的位置,并刪除那個區(qū)的內容。

與ROM以及IAR ROM庫接口

在高速微控制器用戶指南DS80C4003補充資料中說明了在匯編語言中調用ROM函數的過程。但是,在C中調用這些ROM函數會復雜一些。必須將參數從IAR C編譯器的規(guī)則轉換成ROM使用的規(guī)則。IAR編譯器通過硬件堆棧和寄存器相結合的方式傳遞參數。ROM函數以多種不同方式接受參數。例如,socket函數接收存儲在一個參數緩沖器中的參數。相反,許多功能函數接收由特殊功能寄存器或堆棧存儲器傳遞的參數。為了從IAR調用方式轉換為ROM參數方式,Dallas Semiconductor已經編寫了訪問ROM函數的庫。

在您的C程序中使用ROM函數只需包含一個頭文件并與相應的庫文件連接即可。用于IAR編譯器的ROM庫包括:

ROM初始化程序

DHCP客戶端

進程調度

Sockets (TCP、UDP和Multicast)

TFTP客戶端

功能函數(CRC16, 隨機數)

在撰寫本文時,還沒有為IAR編譯器提供包括文件系統(tǒng)、郵件客戶端和HTTP服務器之類的擴展庫。請關注IAR庫主頁上的DS80C4004升級信息,我們會添加更多支持IAR的庫。

簡單應用: HTTP服務器

這里編寫了一個簡單的http服務器說明如何使用一些ROM庫函數,特別是socket和進程調度庫。該示例應用程序由兩個模塊組成:一個HTTP服務器和一個SNTP客戶端。主程序生成一個新的子任務來運行http服務器,用于處理80端口上的客戶連接。父任務每60秒會試圖通過時間服務器同步當前時間。

SNTP客戶端模塊

以下代碼實現(xiàn)SNTP客戶端模塊的核心功能。

socket_handle = socket(0, SOCKET_TYPE_DATAGRAM, 0);

for (i=0;i<256;i++)

buffer[i] = 0;

// set a timeout of about 2 seconds

buffer[0] = 0x0;

buffer[1] = 0x0;

buffer[2] = 0x8;

buffer[3] = 0x0;

setsockopt(socket_handle, 0, SO_TIMEOUT, buffer, 200);

buffer[2] = 0;       //reset since we used this in call to setsockopt

buffer[0] = 0x23;    // No warning/NTP Ver 4/Client

address.sin_addr[12] = TIME_NIST_GOV_IP_MSB;

address.sin_addr[13] = TIME_NIST_GOV_IP_2;

address.sin_addr[14] = TIME_NIST_GOV_IP_3;

address.sin_addr[15] = TIME_NIST_GOV_IP_LSB;

address.sin_port = htons(NTP_PORT) // port number

sendto(socket_handle, buffer, 48, 0, &address, sizeof(struct sockaddr));

recvfrom(socket_handle, buffer, 256, 0, &address, sizeof(struct sockaddr));

//IAR uses little Endian for storing data, so reorganize the data before   //converting it to long

buffer[0]=buffer[43];

buffer[1]=buffer[42];

buffer[2]=buffer[41];

buffer[3]=buffer[40];

timeStamp = *(unsigned long *)(&buffer[0]);

formatTimeString(timeStamp, "London", last_time_reading_1);

formatTimeString(timeStamp - (6 * SECONDS_PER_HOUR), "Dallas",                    last_time_reading_2);

formatTimeString(timeStamp + (5 * SECONDS_PER_HOUR) + (30 * SECONDS_PER_MINUTE), "Bangalore", last_time_reading_3);

formatTimeString(timeStamp - (10 * SECONDS_PER_HOUR), "Honolulu",

last_time_reading_4);

last_reading_seconds = getTimeSeconds();

closesocket(socket_handle);

SNTP客戶端模塊是通過RFC 1361實現(xiàn)的。SNTP模塊通過使用UDP協(xié)議和time.nist.gov通信,并請求一個時間標記。需注意撰寫本應用筆記時還不能提供DNS查找支持,因此time.nist.gov的IP地址是人工設定的。

首先,創(chuàng)建一個數據包socket并分配一個大約2秒(0x800==2048毫秒)的超時。這樣會保證如果和我們選中的服務器通信失敗,我們不會無休止地等待響應。

接下來的一行用來設置請求選項。在RFC 1361的第3節(jié)對這些位進行了說明。0x23在一個閏秒不產生告警,要求使用版本4 NTP,并聲明模式為Client.我們使用普通數據包函數sendto和recvfrom請求發(fā)送并接收響應后,將時間標記的秒賦予變量timeStamp,然后調整至參考日期1970年1月1號。用函數formatTimeString將時間標記轉換成一個可讀字符串,比如說"In London it is 05:33:19 on May 11, 2005".

用函數getTimeSeconds 確定基于DS80C400內部時鐘的最后一次更新時間。由于程序大約每60秒更新一次,HTML網頁time.html將會使用該數值來報告上一次時間更新后已經過了多長時間。最后,關閉socket,SNTP客戶端進入另一個60秒的休眠期。

簡單HTTP服務器

這個時間服務器應用程序的另一個子模塊為web服務器。此應用程序中的HTTP服務器實現(xiàn)了一個RFC 2068中描述的HTTP服務器簡易版本。在我們的版本中,僅支持GET方法,忽略輸入頭文件,并且?guī)缀醪唤o出輸出包頭。在撰寫這篇應用筆記時尚未提供文件系統(tǒng)庫,因此示例應用程序動態(tài)地生成HTML網頁。

通過調用Berkley-style socket函數來創(chuàng)建服務器socket.這使得建立一個服務器socket十分容易。以下代碼給出我們的簡易HTTP服務器的創(chuàng)建、綁定和接受新連接。

struct sockaddr local;

unsigned int socket_handle, new_socket_handle, temp;

socket_handle = socket(0, SOCKET_TYPE_STREAM, 0);

local.sin_port = htons(80);

bind(socket_handle, &local, sizeof(local));

listen(socket_handle, 5);

printf("Ready to accept HTTP connections…r

");

// here is the main loop of the HTTP server

while (1)

{

new_socket_handle = accept(socket_handle, &address, sizeof(address));

handleRequest(new_socket_handle);

closesocket(new_socket_handle);

}

注意當接收到一個新的socket時,這一簡易應用程序不會啟動一個新的線程或進程處理該請求,而是在同一進程中處理請求。任何優(yōu)于該演示的HTTP服務器都會在一個新的線程中處理到來的請求,允許同時發(fā)生多個連接并能進行處理。請求處理完畢后我們關閉socket并等待下一個到來的連接。

handleRequest方法從接入的請求中解析出文件名并且驗證請求方法為GET.不允許使用其它方法(即使是POST、HEAD或OPTIONS)。

為IAR編譯器編寫DS80C400匯編函數的注意事項

IAR文檔提供了在8051匯編中編寫程序,可從C程序中調用的方法。若8051匯編函數由IAR編譯器編寫的C程序來調用,在編寫這些匯編語言時需切記以下幾點。如果沒有可用的寄存器傳遞變量時,會將這些變量以Little Endian順序壓入堆棧。

1.函數參變量傳遞約定

下表說明了變量的傳遞方式。

 

 

下表顯示了函數返回值的規(guī)則。

函數int foo(int x, int y,void* ptr);的變量和返回值的傳遞如下:

 

 

2.數據類型存儲規(guī)則

  IAR遵循Little Endian存儲規(guī)則。注意,IAR使用最低有效字節(jié)在前的二進制數據存儲格式。

  例如,一個4字節(jié)長的數值0xDEADBEEF,將會按如下方式存儲:

 

3.一個簡單的匯編程序與'C'接口

本節(jié)演示如何編寫一個匯編程序并用IAR Embedded Workbench與'C'程序接口。應用程序交換16位和32位字節(jié),并將交換后的字節(jié)輸出到默認的控制臺。C的可調用函數原型是int ltob( int *shortptr , long *longptr)。

本示例程序由兩個文件組成:main.c和eswap.s51.main.c調用我們用匯編語言編寫的示例函數ltob()。創(chuàng)建一個新項目,命名為endian;添加cstartup.s51、low_level_init.s51、putchar.c文件以及Dallas Semiconductor ROM初始化庫rominit.r51.詳細資料請參考上述從8051 IAR Embedded Workbench開始。

用以下內容來創(chuàng)建一個新的main.c文件,并將該文件添加到項目endian中。在C中,必須聲明一個函數,以便讓編譯器知道如何調用它。ltob()函數在main()之前聲明。注意在成功運行后函數ltob()會返回'0',而且,如果任一指針為NULL則返回非零值。程序應向控制臺輸出以下結果:

創(chuàng)建一個新文件eswap.s51,輸入以下匯編代碼,并將它加入到項目endian中。這個匯編程序將我們的函數ltob()聲明為PUBLIC,因此它能夠由'C'程序調用。ltob()的第一個參數是指針,并通過DS80C400控制器的寄存器r3:r2:r1來傳遞。第二個參數也是一個指針,由IAR編譯器壓入偏移3至5堆棧(偏移3含有最低有效字節(jié),偏移5含有最高有效字節(jié))。首先,函數重新找到堆棧中存儲的指針(指向一個32位值),交換它所指向的值,將交換后的字節(jié)存儲在相同位置。同樣,16位值也被字節(jié)交換并存儲在交換前的同一位置。注意,通過匯編函數來保留寄存器r6和r7.這是因為IAR編譯器將這些寄存器視為永久寄存器,意味著任何函數調用都不應修改這些寄存器。

#include "reg400.inc"

r0_b0     equ 0                         ; Register bank 0 equates.

r1_b0     equ 1

r2_b0     equ 2

r3_b0     equ 3

r4_b0     equ 4

r5_b0     equ 5

r6_b0     equ 6

r7_b0     equ 7

PROGRAM ENDIAN_SWAP

PUBLIC ltob

RSEG FAR_CODE:CODE:NOROOT(0)

; ********************************************************************

;

; int ltob(unsigned int* shortptr, unsigned long* longptr)

;

; ********************************************************************

ltob:

// shortptr is in r3:r2:r1

// longptr is in stack at offset 5

; get the longptr stored in the stack

mov a,SP

clr c

subb a,#5

mov b,a

mov a,esp

anl a,#0x3

orl a,#0xDC       ; extended stack is at 0xff dc00

subb a,#00        ; subtract 0x0005 to point to MSB of 2 nd argument

mov DPX,#0xFF

mov DPH,a

mov DPL,b

push r6_b0        ; save r6:r7 for the compiler

push r7_b0

movx a,@DPTR

mov r4,a          ;store least significant byte of 'longptr' in r4

inc DPTR

movx a,@DPTR

mov r5,a          ;store middle byte of 'longptr' in r5

inc DPTR

movx a,@DPTR

mov r6,a          ;store most significant byte of 'longptr' in r6

mov a,r4_b0

orl a,r5_b0

orl a,r6_b0

jz ltob_err       ; is (longptr == NULL)?

mov dpx,r6_b0     ; point to the memory where 'longptr' is pointing to

mov dph,r5_b0

mov dpl,r4_b0

pop r6_b0         ; restore r6:r7 for the compiler

pop r7_b0

push dpx
  
push dpl

movx a,@dptr      ; get the long value (in r4:r3:r2:r1) from the memory

mov r4,a

inc dptr

movx a,@dptr

mov r5,a

inc dptr

movx a,@dptr

mov r6,a

inc dptr

movx a,@dptr

mov r7,a

inc dptr

pop dpl

pop dph

pop dpx

mov a,r7_b0         ; swap the long value bytes and store it in memory

movx @dptr,a

inc dptr

mov a,r6_b0

movx @dptr,a

inc dptr

mov a,r5_b0

movx @dptr,a

inc dptr

mov a,r4_b0

movx @dptr,a

mov a,r1_b0        ; is (shortptr == NULL)?

orl a,r2_b0

orl a,r3_b0

jz ltob_err

mov dpx,r3_b0      ; point to a memory where the 'shortptr' is pointing to

mov dph,r2_b0

mov dpl,r1_b0

push dpx

push dph

push dpl

movx a,@DPTR        ; get the integer value from memory

mov r2,a

inc dptr

movx a,@dptr

mov r1,a

inc dptr

pop dpl

pop dph

pop dpx

mov a,r1_b0         ; swap the integer bytes

movx @dptr,a

inc dptr

mov a,r2_b0

movx @dptr,a        ; bytes of an integer are swapped and stored in memory

mov r3,#00          ; return 'success'

mov r2,#00

sjmp ltob_exit

ltob_err:

mov r3,#00          ; return 'error'

mov r2,#01

ltob_exit:

ret

END                 ; end of assembly program

局限性以及開發(fā)問題

以下是使用6.11A版的IAR編譯器時發(fā)現(xiàn)的局限性:

IAR編譯器用堆棧存儲本地變量。在DS80C400中,堆棧限制為1024字節(jié)。DS80C400庫的默認堆棧交換為384字節(jié)(ROM_SAVESIZE) .如果您的程序聲明了多個堆棧變量,確保該限制也適當地變化。要改變默認任務的交換大小,使用Dallas Semiconductor的task_genesis(unsigned int savesize)庫或rom400_task.h中定義的task_fork(unsigned char priority, unsigned int savesize),并給savesize參數提供正確的值。

printf、sprintf等函數存在一些問題:只有選擇了'lowest optimization level'函數才能正常工作。要選擇優(yōu)化等級,找到project→options→ICC8051,并選擇Code標簽中的'None'.

IAR printf, sprintf的默認庫不能正常工作。要使它們正常工作,您的C程序應包含IAR提供的C文件(如#include )。

結論

Dallas Semiconductor為IAR編譯器提供支持C程序訪問DS80C400 ROM軟件的函數。用C程序能夠訪問網棧、存儲管理器、進程調度器以及DS80C400的其它許多函數。使用C語言的DS80C400微控制器開發(fā)者能夠編寫出更精簡的應用程序,賦予系統(tǒng)足夠的速度、能力和代碼空間。Dallas Semiconductor正致力于將所有目前工作與Keil編譯器的DS80C400庫移植到IAR.請經常訪問DS80C400 IAR庫主頁獲得升級。

此內容為AET網站原創(chuàng),未經授權禁止轉載。
主站蜘蛛池模板: 久久综合色88| 久久精品资源 | 免费国产在线精品一区二区三区 | 国产精品国产三级国产普通话99 | 日本视频网站在线观看 | 综合网伊人 | 亚洲色图视频在线 | 亚洲天堂视频在线播放 | 欧美激情在线一区二区 | 久一在线视频 | 日本黄色一级网站 | 成人午夜在线观看视频 | 国产又粗又硬又黄的视频 | 国产精品久久久久久久久久妞妞 | 91在线最新 | 国产三级在线观看免费 | 亚洲视频导航 | 久久综合导航 | 多男一女一级淫片免费播放口 | 二级大黄大片高清在线视频 | 国产精品盗摄!偷窥盗摄 | 北条麻妃一区二区三区中文字幕 | 国产最猛性xxxx | 无码国产精品久久一区免费 | 啪啪导航| julia中文字幕在线 | av大帝在线观看 | 国产美女mm131爽爽爽免费 | 啪啪网视频 | 中文字幕中文在线 | 欧美图片一区二区三区 | 国产乱码在线观看 | 亚洲女同女同女同女同女同69 | www.69视频 | 91探花在线播放 | 国产亚洲精品久久久久秋霞 | 国产三级精品在线 | 黄色大片免费的 | 性欧美极品另类 | 一级少妇淫片免费观看 | 东北少妇和黑人3p视频 | 国产精品久久久久久久久久影院 | jizz在线观看 | 欧美激情69| 亚洲精品国产精品乱码在线观看 | 欧美爱爱网站 | 国产污污网站 | 中国女人裸体乱淫 | www.久操| 天天做天天爱夜夜爽毛片毛片 | 午夜中出 | 国产精品二区在线 | 影音先锋资源av | 成人免费看片39 | 欧美日本三级少妇三级久久 | 中文字幕在线观看亚洲日韩 | 国产成人涩涩涩视频在线观看 | 天天揉久久久久亚洲精品 | 国产精品久久久久国产三级传媒 | 99久久亚洲精品 | 激情久久五月天 | 在线观看a级片 | 精品推荐国产精品店 | 午夜影院视频 | 欧美一区二区三区在线看 | 操夜夜 | 国产在线播放一区二区 | 国产精品免费视频二三区 | 自拍偷拍激情 | 黄色日比视频 | 亚洲综合在线另类色区奇米 | 国产日韩精品中文字无码 | 国产三级韩国三级日本带黄 | 国产操视频 | 国产第一页屁屁影院 | 成年人免费大片 | 成人在线免费看 | 国产中文区4幕区2022 | 欧美综合另类 | 亚洲男女激情 | 二区三区| 久久久国产精品免费 | 美女100%视频免费观看 | 欧美乱大交xxxxx潮喷 | 国产精品爽爽久久久久久蜜臀 | 刺激一区仑乱 | 一级大毛片 | 国产极品视频在线观看 | 欧美女同在线 | jzz在线观看 | 又色又爽又高潮免费视频观看酒店 | 日韩123区| 人与嘼交av免费 | 美女男女激情晚上看 | 新亚洲天堂 | 中文字幕精品视频在线观看 | 国产片久久 | 巨大乳の揉んで乳榨り奶水 | 香港三级午夜理伦三级 | 性生生活又硬又黄又爽 | 亚洲视频中文字幕在线观看 | 俄罗斯15一18性视频 | 久久精品视频3 | 日本一级做a爱片野花 | 国产伦子真实事例对白 | 伊人久久无码中文字幕 | 麻豆传传媒久久久爱 | 日本黄色一级视频 | 96亚洲精品久| av不卡免费观看 | 中文字幕伊人 | 中文字幕在线导航 | 91久久精品一区二区三区大 | 成人一区二区三区在线 | 日韩精品tv | 91成人在线免费视频 | 国产精品久久人妻无码网站一区 | 国产精品乱码久久久久久久久 | 91在线视频免费看 | 偷拍亚洲另类 | 99精品久久99久久久久 | 极品老师腿张开粉嫩小泬 | 少妇人妻无码专区在线视频 | 国产伦精品一区二区三区免费视频 | 国模少妇一区二区三区 | 精品久久久久久 | 国产真实交换配乱淫视频, 国产真实精品久久二三区 国产真实乱免费高清视频 国产制服丝袜一区 | 日本久久久久 | 精品五月天 | 亚洲最大成人综合网 | 亚洲永久 | 国产精品久久久久久av | 久久久国产精品免费 | 中文字幕乱偷无码av先锋 | 亚洲色av性色在线观无码 | 2020无码专区人妻系列日韩 | 牛牛在线视频 | 深夜免费福利 | 女人的黄 色视频 | 久久97精品久久久久久久不卡 | 91原创视频 | 国产操操操| 吃奶摸下激烈视频学生软件 | 亚洲国产精品免费 | 国产中文区二暮区2022 | 中文字幕免费高 | 成人黄色网址在线观看 | 性一交一乱一色一免费无遮挡 | 性生活在线视频 | 欧美a免费| 无码少妇一区二区三区免费 | 99mav | 精品欧美一区二区三区免费观看 | 手机在线观看av片 | 国产h视频在线 | 国产www在线| 在线观看av网站 | 午夜网站在线观看 | 日本视频免费在线 | 狼人无码精华av午夜精品 | 亚洲综合一区无码精品 | 97久久精品人人爽人人爽蜜臀 | 色哟哟一区二区 | 中文字幕一精品亚洲无线一区 | 天堂网在线最新版www中文网 | 日韩黄色在线播放 | 奇米影视777四色 | 国产999在线 | 国产人澡人澡澡澡人碰视频 | 天天射射综合 | 日本黄色免费 | 国产在线播放网站 | 日本视频在线看 | 欧州一区| 国产av无码专区亚洲a∨毛片 | 天天综合天天操 | 欧美精品偷自拍另类在线观看 | 日本a√在线观看 | 亚洲精品国品乱码久久久久 | 亚洲色www永久网站 少妇人妻综合久久中文字幕 | 日本免费一区二区三区视频 | 少妇被躁爽到高潮无码久久 | 中文字幕乱码熟妇五十中出 | 精品国产免费看 | 国产黄a| 日本熟伦人妇xxxx | 日韩欧美在线视频播放 | 黑人巨大精品欧美一区二区 | 午夜久久网 | 寂寞骚妇被后入式爆草抓爆 | 日韩精品黄 | 91亚洲国产成人精品一区二三 | 久久久亚洲精品石原莉奈 | 国产浮力影院 | 麻豆三级在线观看 | 国产第一页屁屁影院 | 蜜桃日本免费看mv免费版 | 四虎最新紧急入口 | 男女乱淫真视频免费播放 | 欧美日韩综合一区二区三区 | 国产草草影院ccyycom | 中文字幕一区二区三三 | 欧美第一页在线观看 | 一级特黄色毛片 | 麻豆黄色片 | 日本免费人成视频播放 | 在线观看视频免费入口 | 午夜乱码爽中文一区二区 | 亚洲精品久久久久久久不卡四虎 | 国产一区二区激情 | ass亚洲日本嫩体私拍ass | 欧美变态另类牲交 | 亚州中文字幕蜜桃视频 | 林由奈在线观看 | 99色综合 | 欧美精品久久久久久久 | 久热国产精品视频一区二区三区 | 亚洲欧美天堂 | 性做久久久久久久久 | 国产综合图片 | 日韩精品视频免费专区在线播放 | 国产免费又爽又刺激在线观看 | 无码成人1000部免费视频 | 亚洲一区二区欧美 | 欧美色图中文字幕 | 成人羞羞国产免费图片 | 可以看av的网站 | 欧美视频一二三区 | 思九九爱九九 | 国产成人无码a在线观看不卡 | 午夜精品久久久久久久久久久久 | 白人と日本人の交わりビデオ | 国产一级av毛片 | 免费一二区 | 国产911情侣拍拍在线播放 | 亚洲18色成人网站www | 中文字幕视频网站 | 亚洲中文精品久久久久久不卡 | 午夜精品久久久久久久99热 | 日本黄色免费在线观看 | 黄色一级网址 | 女人18毛片毛片毛片毛片区二 | 先锋影音xfyy5566男人资源 | 国产精品国产三级国产专播i12 | 国产精品视频免费看 | 内射少妇一区27p | 亚洲精品成人av在线 | 国产精品一二三区视频 | 国产精品久久久久久久久久久久人四虎 | 欧美青青草| 日日麻批免费40分钟无码 | 亚洲色图视频在线观看 | 国产精品影音先锋 | 超碰综合 | 国产精品一二区在线观看 | 婷婷久久综合九色综合88 | 国产在线精品一区二区高清不卡 | www亚洲天堂com | 国产天码青椒老色批青椒影视 | 色综合综合网 | 他揉捏她两乳不停呻吟动态图 | 国产精品视频偷伦精品视频 | 免费视频久久 | 男人用嘴添女人下身免费视频 | 99国产精品视频免费观看 | 成人国产精品齐天大性 | 成人在线激情视频 | 亚洲精品久久一区二区三区777 | 欧美精品少妇 | 欧美日韩免费 | 人人草在线视频 | 精品日本一区二区三区在线观看 | 日韩欧美专区 | 99久热在线精品视频成人一区 | 优月まりな乳狂在线观看 | 亚洲情侣偷拍激情在线播放 | 国内精品久久久久久久久久久久 | 成人av专区| av在线免费观看网址 | jjzz日本女人 | 91精品国产人妻国产毛片在线 | 老女人任你躁久久久久久老妇 | 精品免费在线观看 | 香蕉在线视频观看 | 女同三级在线观看bd | 波多野结衣亚洲视频 | 免费人成网站在线观看欧美高清 | 国产婷婷在线观看 | 99久久婷婷国产综合精品电影 | 久久久久久久久久网站 | 中出人妻中文字幕无码 | 久久成人黄色 | 少妇浴室愉情韩国理论 | 日韩欧美在线免费 | 小黄鸭精品aⅴ导航网站入口 | 亚洲妇熟xxxx妇色黄 | 香港黄色网| 日日狠狠久久偷偷四色综合免费 | 欧美精品成人一区二区三区四区 | 亚洲伊人色欲综合网 | 日韩欧美卡一卡二卡新区 | 天堂资源 | 国产麻豆精品视频 | 久久精品国产网红主播 | sm免费人成虐网站 | 国产一区二区三区久久久久久久久 | 久久综合九色综合欧美狠狠 | 在线观看91 | 欧美一区二区三区色 | 中文字幕亚洲无线码 | 美女扒开尿口让男人桶 | 草草影视在线观看 | 999zyz玖玖资源站在线观看 | 欧美特级黄| 69亚洲精品久久久蜜桃 | 国产人妻精品一区二区三区 | 国产日韩欧美精品一区二区三区 | 日本猛少妇色xxxxx | 日本福利片在线观看 | 成人毛片18女人毛片 | 强奷乱码中文字幕 | 永久中文字幕 | 后进极品美女白嫩翘臀 | 国产iv一区二区三区 | 夜夜高潮夜夜爽精品欧美做爰 | 韩国r级大尺度激情做爰外出 | 性丰满白嫩白嫩的hd124 | 真实乱视频国产免费观看 | 又色又爽又黄的美女裸体网站 | 久久99精品久久久久久园产越南 | 欧美爱视频 | 91超碰中文字幕久久精品 | 国产一二三区av | 国产品无码一区二区三区在线 | 国产乱码精品一区二区三区不卡 | 99riav视频| 黄色一级视频片 | 白白色免费视频 | 无套内谢的新婚少妇国语播放 | 麻豆国产av超爽剧情系列 | 久久综合入口 | 久久好在线视频 | 懂色av粉嫩av色老板 | 欧美激情久 | 乡野欲潮:绝色村妇 | 巨粗进入警花哭喊求饶在线观看 | 性一交一乱一乱视频 | 在线免费观看成人 | 婷婷情更久日本久久久片 | 夜夜爽天天操 | 美日韩中文字幕 | www国产成人免费观看视频深夜成人网 | 免费高清a级南片在线观看 免费高清成人 | heyzo朝桐光一区二区 | 久久久久久久久久久小说 | 97超碰免费在线 | 久久特黄视频 | 黄色一级片免费 | 午夜国产羞羞视频免费网站 | 草久久久 | 国产内射老熟女aaaa∵ | 东北女人啪啪对白 | 欧美性受xxxx黑人猛交 | 99国产精品久久久久久久成人 | 亚州综合网| 免费一区在线观看 | 欧美人与性动交xxⅹxx | 在线免费观看成人 | 亚洲毛片在线免费观看 | 日韩欧美黄色片 | 欧美人与动牲交片免费 | 亚洲日韩中文字幕一区 | 国产刺激出水片 | 97一区二区国产好的精华液 | 国产日韩欧美视频免费看 | 超碰在线公开免费 | 成人做爰9片免费视频 | caopeng在线视频 | 国产又色又爽无遮挡免费 | 久久久久av综合网成人 | 99精品国产兔费观看久久 | 欧美老熟妇乱子伦视频 | 日本猛少妇色xxxxx猛叫 | 激情射精爽到偷偷c视频无码 | 国产精品va无码一区二区 | 日本丰满护士bbw | 日韩免费精品视频 | 欧美日本乱大交xxxxx | 婷婷综合久久中文字幕蜜桃三电影 | 精品国产品香蕉在线 | 在线亚洲色图 | www成人国产| 日韩一区二区三区在线 | 中文字幕一区二区三区精华液 | 国产毛片又黄又爽 | 周妍希大尺度国产一区二区 | 国产日韩免费视频 | 国产精自产拍久久久久久蜜 | 国产特级淫片免费看 | 国产精品久久久久久久久久iiiii | 国产一区99 | 国产一区二区三区精品在线观看 | 亚洲咪咪 | 一二三区在线视频 | 色88久久久久高潮综合影院 | 一区二区三区久久 | 国产视频一区二区三区在线 | 成人aaa片一区国产精品 | 久99视频| jizz欧美| 最近中文字幕免费mv在线视频 | 久久国产欧美日韩精品图片 | 国内大量偷窥精品视频 | 亚洲国产影院 | 国产免费黄色大片 | 91国自产精品中文字幕亚洲 | a毛片基地 | 免费看日韩| a级高清免费毛片av播放 | 色翁荡息又大又硬又粗视频 | 377p欧洲日本亚洲大胆噜噜 | 少妇性l交大片毛多 | 日韩欧美精品免费 | 制服一区 | 亚洲精品字幕 | 国产精品一级无遮挡毛片 | 欧美精品久久久久久久久大尺度 | 香港三日三级少妇三级99 | 91丨九色丨国产 | 国产精久久久久 | 日韩一卡二卡三卡 | 久久久久久伊人 | 在线精品福利 | 亚洲情综合五月天 | 成人国产1314www色视频 | 久久久久无码精品国产不卡 | 久草手机在线视频 | 天堂网一区二区 | 美日韩黄色片 | 成人爽爽爽 | 国产精品无码aⅴ嫩草 | 日本囗交做爰视频 | 农村人伦偷精品视频a人人澡 | 在线播放亚洲第一字幕 | 亚洲乱码中文字幕久久孕妇黑人 | 久久乐国产精品亚洲综合 | 成人欧美视频 | 中文字幕免费在线视频 | av大片网址 | 国产日韩在线观看视频 | 亚洲的天堂av | av中出| 亚洲在线一区二区三区 | 巨大巨粗巨长 黑人长吊 | 欧美性受xxxx黒人xyx性爽 | 欧美亚洲日本国产黑白配 | 欧美精品一区二区三区久久久竹菊 | 国产精品亚洲一区二区在线观看 | 国产精品久久久久9999小说 | 极品妇女扒开粉嫩小泬 | 天堂伊人久久 | japanese日本精品少妇 | 交换配乱吟粗大农村大坑性事视频 | 国产精品美女www爽爽爽软件 | 国产欧美另类久久久精品图片 | 18禁真人抽搐一进一出免费 | 精品无码成人网站久久久久久 | 国产乱淫a∨片免费视频牛牛 | 国产一级自拍 | 欧美在线三区 | 成人免费视频一区二区三区 | 青草视频在线播放 | 亚洲自拍偷拍视频 | 亚洲韩国精品 | 麻豆国产va免费精品高清在线 | 男主和女配啪慎入h闺蜜宋冉 | 欧美一级黄色片免费看 | 又粗又大又黄又硬又爽免费看 | 国产日韩亚洲欧美 | 在线视频97| 国产精品无码素人福利不卡 | 亚洲а∨天堂久久精品9966 | 在线播放免费播放av片 | 久热这里只有 | 久久激情影院 | 黄色片地址 | 一区二区不卡在线 | 他掀开裙子舌头进去69式 | 伦理片免费完整片在线观看 | 调教贱奴视频一区二区三区 | 爱爱视频一区 | 日韩欧美视频一区 | 大尺度av | 国产精品国产三级国产不产一地 | 黄色片在线免费看 | 成人做爰免费视频免费看 | 国产一国产二国产三 | 夜色视频网站 | 奇米影视四色777 | 韩国av中文字幕 | 日批在线播放 | 日日热| 久久久伊人网 | 成年人的黄色片 | 亚洲二区在线播放视频 | 一区二区三区四区精品 | www.香蕉视频在线观看 | 色视频欧美一区二区三区 | 99在线视频观看 | 亚洲 欧美 变态 国产 另类 | 欧美内射深喉中文字幕 | 99re国产| 日本免费一区二区三区视频 | 青青草视频污 | 在线观看免费视频黄 | 亚洲国产超清无码专区 | 欧美拍拍视频 | 欧美毛片在线 | 五月婷婷综合激情网 | 中文字幕视频一区二区 | 91精品成人| 国产精品成人影院在线观看 | 国产在线观看黄色 | 91精品国| 久艹av| 香蕉成人啪国产精品视频综合网 | 自拍偷拍色 | 精品国产制服丝袜高跟 | 最新毛片网 | 久久99视频 | 日日躁夜夜躁狠狠躁超爽2001 | 日本少妇白嫩猛烈进入免费视频 | 少妇一级1淫片 | 最近更新中文字幕 | 国产淫语对白 | 欧美精品福利视频 | 日本理伦片午夜理伦片 | 国产久色在线拍揄自揄拍 | 屁屁影院第一页 | 精品动漫卡一卡2卡三卡四卡 | 91精品国产综合久久香蕉最新版 | 五月婷婷久久草 | 日本高清免费观看 | 亚洲揄拍窥拍久久国产自揄拍 | a级毛片在线免费看 | 又大又长粗又爽又黄少妇毛片 | 久久亚洲一区 | 性猛交ⅹxxx富婆video | 亚洲精品国产精品乱码不99按摩 | 国产熟睡乱子伦午夜视频 | 久久精品蜜桃 | jizzjizz国产 | 高潮喷水抽搐无码免费 | 天天射天天干天天操 | 亚洲精品综合五月久久小说 | 中文字幕一区二区三区在线观看 | 粉嫩粉嫩一区性色av片 | 性欧美13处14破xxx极品 | 色一情一区二 | 精品国产乱码久久久久久蜜臀网站 | 欧美黑人狂野猛交老妇 | h在线免费 | 日本黄色一级视频 | 午夜视频在线网站 | 亚洲成a人片在线观看中文 精品久久久久久久中文字幕 | 毛片毛片毛片毛片毛片毛片 | 天天看片天天av免费观看 | 日韩欧美自拍 | 国产激情精品一区二区三区 | 伊人色综合久久天天 | 国产69久久精品成人看 | 国产精品一区二区欧美黑人喷潮水 | 欧美区国产区 | 成人做爰高潮片免费视频美国 | 国产精品成人在线观看 | 欧美性受xxxx黑人猛交88 | 第一次处破女hd精品出血 | 高清视频在线观看一区二区三区 | 久久久www成人免费无遮挡大片 | 日日干日日干 | 日日热 | 亚洲欧美日韩偷拍 | 免费日韩视频 | av片久久| 免费看一区二区三区 | 曰本极品少妇videossexhd 曰本一级黄色片 | 一个人免费观看的www视频 | 亚洲色图偷| 久久精品国产亚卅av嘿嘿 | 国产成人在线影院 | 韩日一级片| 亚洲aⅴ精品一区二区三区91 | 自拍偷拍亚洲 | 丰满少妇夜夜爽爽高潮水网站 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 天天操天天操天天干 | 亚洲综合欧美综合 | 免费看污黄网站在线观看 | 国产美女视频国产视视频 | 福利在线视频导航 | 午夜成人在线视频 | 亚洲精品日本无v一区 | 亚洲v欧美| 在线亚洲欧美 | 手机av在线免费观看 | 波多野结衣aⅴ在线 | 中文有码视频 | 一个人在线免费观看www视频 | 99久久久无码国产精品不卡 | 亚洲成年女人av毛片性性教育 | 亚洲自拍偷拍视频 | 欧美成人精品欧美一级 | 日韩六九视频 | 久久a久久 | 少妇羞涩呻吟乳沟偷拍视频 |