《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 其他 > SPMC75系列單片機地C和ASM(匯編)混合編程的應(yīng)用

SPMC75系列單片機地C和ASM(匯編)混合編程的應(yīng)用

2009-09-19
關(guān)鍵詞: SPMC75

SPMC75系列單片機地C和ASM(匯編)混合編程的應(yīng)用

本文主要介紹凌陽16位變頻控制單片機SPMC75系列單片機地C和ASM(匯編)混合編程的應(yīng)用。
關(guān)鍵詞:SPMC75 嵌入式匯編
 
1 引言
  支持C語言幾乎是所有微控制器程序設(shè)計的一項基本要求,當(dāng)然SPMC75系列單片機也不例外。μ'nSPTM 指令結(jié)構(gòu)的設(shè)計就著重考慮對C語言的支持,GCC就是一種針對μ'nSPTM 操作平臺的ANSI-C編譯器。但是在應(yīng)用中對于程序的設(shè)計,特別是C和ASM混合使用的時候有些地方是需要注意的,在C中如何嵌入ASM也是一個不可回避的問題。

2 芯片特性簡介
  SPMC75系列單片機是由凌陽科技設(shè)計開發(fā)的16位微控制器芯片,其內(nèi)核采用凌陽科技自主知識產(chǎn)權(quán)的μ'nSP微處理器。SPMC75系列單片機集成了能產(chǎn)生變頻電機驅(qū)動的PWM發(fā)生器、多功能捕獲比較模塊、BLDC電機驅(qū)動專用位置偵測接口、兩相增量編碼器接口等硬件模塊;以及多功能I/O口、同步和異步串行口、ADC、定時計數(shù)器等功能模塊,利用這些硬件模塊支持,SPMC75可以完成諸如家電用變頻驅(qū)動器、標(biāo)準(zhǔn)工業(yè)變頻驅(qū)動器、多環(huán)伺服驅(qū)動系統(tǒng)等復(fù)雜應(yīng)用。下面介紹SPMC75系列單片機資源特性:

■ 高性能的 16 位 CPU 內(nèi)核
- 凌陽 16 位 u'nSP 處理器
- 2 種低功耗模式: Wait/Standby
- 片內(nèi)低電壓檢測電路
- 片內(nèi)基于鎖相環(huán)的時鐘發(fā)生模塊
- 最高系統(tǒng)頻率 Fck : 24MHz
■ 片內(nèi)存儲器
- 32KW (32K × 16bit) Flash
- 2KW (2K × 16bit) SRAM
■ 工作溫度: -40 ℃~ 85 ℃
■ 10 位 ADC 模塊
- 可編程的轉(zhuǎn)換速率,最大轉(zhuǎn)換速率 100Ksps
- 6 ~~ 8 個通道
- 可與 PDC 或 MCP 等定時器聯(lián)動,實現(xiàn)電機控制中的電參量測量
■ 串行通 訊 接口
- 通用異步串行通訊接口 (UART)
- 標(biāo)準(zhǔn)外圍接口 (SPI)
■ 可編程看門狗定時器
■ 內(nèi)嵌在線仿真電路 ICE 接口:可實現(xiàn)在線仿真、調(diào)試和下載
■ 兩個 CMT 定時器
- 通用 16 位定時 / 計數(shù)器

■ MCP 定時器
- 能產(chǎn)生三相六路可編程的 PWM 波形,如三相 SPWM 、 SVPWM 等
- 提供 PWM 占空比值同步載入邏輯
- 可選擇與 PDC 的位置偵測變化同步
- 可編程硬件死區(qū)插入功能,死區(qū)時間可設(shè)定
- 可編程的錯誤和過載保護邏輯
- 16 位定時 / 計數(shù)器功能
■ PDC 定時器
- 可同時處理三路捕獲輸入
- 可產(chǎn)生三路 PWM 輸出(中心對稱或邊沿方式)
- BLDC 驅(qū)動的專用位置偵測接口
- 兩相增量碼盤接口,支持四種工作模式,擁有四倍頻電路
- 16 位定時 / 計數(shù)器功能
■ TPM 定時器
- 可同時處理二路捕獲輸入
- 可產(chǎn)生二路 PWM 輸出(中心對稱或邊沿方式)
- 16 位定時 / 計數(shù)器功能
■ 封裝
- QFP 和 SDIP 兩種封裝,
- 42 ~~ 80 腳系列

3 函數(shù)調(diào)用
3.1 調(diào)用協(xié)議
  模塊代碼間的調(diào)用,是遵循μ'nSPTM體系的調(diào)用協(xié)議(Calling Convention)。所謂調(diào)用協(xié)議,是指用于標(biāo)準(zhǔn)子程序之間一個模塊與令一個模塊的通信約定。即使兩個模塊是以不同的語言編寫而成。
  調(diào)用協(xié)議是指這樣一套法則:它使不同的子程序之間形成一種握手通信接口,并完成一個子程序到另一個子程序之間的參數(shù)傳遞和控制,以及定義出子程序調(diào)用與子程序返回值的常規(guī)規(guī)則。
調(diào)用協(xié)議包括以下相關(guān)要素:
(1)調(diào)用子程序間的參數(shù)傳遞;
(2)子程序返回值;
(3)調(diào)用子程序過程中所用堆棧;
(4)用于暫存數(shù)據(jù)的中間寄存器。
μ'nSPTM調(diào)用協(xié)議的內(nèi)容如下:
1、由于C編譯器產(chǎn)生的所有標(biāo)號都以下劃線(_)為前綴,而C程序在調(diào)用匯編程序時要求匯編程序名也以下劃線(_)為前綴。
2、參數(shù)以相反的順序(從右到左)被壓入堆棧中。必要時所有的參數(shù)都被轉(zhuǎn)換成其在函數(shù)原型中被聲明過的數(shù)據(jù)類型。但如果函數(shù)的調(diào)用發(fā)生在其聲明之前,則傳遞在調(diào)用函數(shù)里的參數(shù)不會進行任何數(shù)據(jù)類型轉(zhuǎn)換的。
3、各參數(shù)和局部變量在堆棧中的排列如圖3-1所示。
4、16-Bit的返回值放在寄存器R1中,32-Bit的返回值存入寄存器R1和R2中,其中低字節(jié)在R1中,高字節(jié)在R2中。若要返回結(jié)構(gòu)或指針需要在R1中存放一個指向結(jié)構(gòu)的指針。
5、編譯器會產(chǎn)生prolog/epilog過程動作來暫存或恢復(fù)PC、SR及BP寄存器。匯編器則通過CALL指令可將PC和SR自動壓入堆棧中,而通過RETF或RETI指令將其自動彈出堆棧。
6、編譯器所認(rèn)可的指針是16-Bit的。函數(shù)指針實際上并非指向函數(shù)的入口地址,而是一個段地址的向量_function_entry,在該向量的兩個連續(xù)Word的數(shù)據(jù)單元存放的值才是函數(shù)的入口地址。

圖3-1 程序調(diào)用的堆棧使用

3.2 舉例說明
◆ C程序中調(diào)用ASM函數(shù)
【例3-1】 無參數(shù)傳遞的C語言調(diào)用ASM函數(shù)。

/*-------------------------------------------------------*/

/* C 程序

/*-------------------------------------------------------*/

extern void F_Function(void);

main()

{

/*-------------------------------------------------------*/

/* C 程序調(diào)用 ASM 函數(shù)

/*-------------------------------------------------------*/

F_Function();

while(1){;}

}

/*-------------------------------------------------------*/

/* ASM 程序

/*-------------------------------------------------------*/

//=============================================================

// ----Function: void F_Function(void);

// -Description: ASM 函數(shù)

// --Parameters: none

// -----Returns: none

// -------Notes: none

// -----Destroy: none

//=============================================================

.CODE

.PUBLIC _F_Function

_F_Function: .proc

nop;

RETF;

.endp

【例1-2】C 程序調(diào)用ASM函數(shù),輸入兩個UInt16參數(shù),返回一個UInt16參數(shù)。

/*-------------------------------------------------------*/

/* C 程序

/*-------------------------------------------------------*/

extern UInt16 F_F_Addition(UInt16 arg1,UInt16 arg2);

main()

{

UInt16 uiErr=0;

/*-------------------------------------------------------*/

/* C 程序調(diào)用 ASM 函數(shù),輸入兩個 UInt16 參數(shù),

/* 返回一個 UInt16 參數(shù)

/*-------------------------------------------------------*/

uiErr = F_Addition(0x00F3,0x9F00);

while(1){;}

}

/*-------------------------------------------------------*/

/* ASM 程序

/*-------------------------------------------------------*/

.CODE

//=============================================================

// ----Function: UInt16 F_Addition(UInt16 arg1,UInt16 arg2);

// -Description: 兩數(shù)相加

// --Parameters: arg1 ,被加數(shù); arg2 ,加數(shù)

// -----Returns: UInt16 兩數(shù)相加的和

// -------Notes: ASM 程序,示范參數(shù)傳遞及 UInt16 參數(shù)返回

// -----Destroy: R1 、 R2

//=============================================================

.PUBLIC _F_Addition

_F_Addition: .proc

PUSH BP to [SP]; // 保護 BP 數(shù)據(jù) ( 1 )

BP = SP+1; // 調(diào)整指針 ( 2 )

R1 = [BP+3]; // 第一個參數(shù) ( 3 )

R2 = [BP+4]; // 第二個參數(shù) ( 4 )

R1 += R2; // 通過 R1 返回結(jié)果 ( 5 )

POP BP from [SP]; ( 6 )

RETF;

.endp

  如圖3-2所示程序調(diào)用時堆棧使用情況。通過圖可以清楚的看出在C調(diào)用ASM函數(shù)的時候,第一個參數(shù)將跟著第二個參數(shù)陸續(xù)自動的壓入堆棧;接下來是PC指針和SR寄存器在CALL指令執(zhí)行后壓入堆棧,這些都是自動完成的,使用者只需要了解,是無法也沒有必要干預(yù)的。
  在下來將跳入執(zhí)行ASM函數(shù),在執(zhí)行語句(1)的時BP被壓入堆棧保護起來。那么可以發(fā)現(xiàn)ASM所需要接收的參數(shù)在堆棧中的實際位置,再執(zhí)行語句(2)將當(dāng)前堆棧指針加一賦給變址寄存器BP,則第一個參數(shù)的位置就應(yīng)該是BP+3,第二個參數(shù)的位置為BP+4,可以通過語句(3)、(4)來取出參數(shù)。
  結(jié)果的返回可以按照調(diào)用協(xié)議所講的保存在R1中來返回參數(shù)。

圖3-2 程序調(diào)用時堆棧使用情況

【例1-3】C 程序調(diào)用ASM函數(shù),輸入兩個UInt16參數(shù),返回一個Uint32參數(shù)。

/*-------------------------------------------------------*/

/* C 程序

/*-------------------------------------------------------*/

extern UInt32 F_Multiplication(UInt16 arg1,UInt16 arg2);

main()

{

UInt32 ulErr=0;

/*-------------------------------------------------------*/

/* C 程序調(diào)用 ASM 函數(shù),輸入兩個 UInt16 參數(shù),

/* 返回一個 Uint32 參數(shù)

/*-------------------------------------------------------*/

uiErr = F_ Multiplication(0xF0F3,0x0F00);

while(1){;}

}

/*-------------------------------------------------------*/

/* ASM 程序

/*-------------------------------------------------------*/

.CODE

//=============================================================

// ----Function: UInt32 F_Multiplication(UInt16 arg1,UInt16 arg2);

// -Description: 兩數(shù)相乘

// --Parameters: arg1 ,被乘數(shù); arg2 ,乘數(shù)

// -----Returns: UInt32 兩數(shù)相乘的積

// -------Notes: ASM 程序,示范參數(shù)傳遞及 UInt32 參數(shù)返回

// -----Destroy: R1 、 R2 、 R3 、 R4

//=============================================================

.PUBLIC _F_Multiplication

_F_Multiplication: .proc

PUSH BP to [SP];

BP = SP+1;

R1 = [BP+3];

R2 = [BP+4];

MR = R1*R2,uu;

R1 = R3; // 通過 R1 、 R2 返回一個 UInt32/Int32 數(shù)據(jù)

R2 = R4;

POP BP from [SP];

RETF;

.endp

◆ ASM函數(shù)中調(diào)用C程序
  在ASM函數(shù)中要調(diào)用C子函數(shù),那么應(yīng)該根據(jù)C的函數(shù)原型所要求的參數(shù)類型,分別把參數(shù)壓入堆棧后再調(diào)用C函數(shù),以保證參數(shù)的正確傳遞。在調(diào)用調(diào)用結(jié)束后還需要進行彈棧,以恢復(fù)調(diào)用C函數(shù)前的堆棧指針。在這個過程中很容易產(chǎn)生bug,所以在使用的時候希望細(xì)心的處理。
【例3-4】ASM程序調(diào)用C 函數(shù),輸入兩個UInt16參數(shù),返回一個UInt16參數(shù)。

/*-------------------------------------------------------*/

/* ASM 程序

/*-------------------------------------------------------*/

.CODE

.EXTERNAL _SP_Addition //C 函數(shù)

.PUBLIC _F_Dummy_Main

_F_Dummy_Main: .proc

PUSH R1,R2 to [SP]; // 寄存器保護

R2 = 0xA800; // 第二個參數(shù)

R1 = 0x00E9; // 第一個參數(shù)

// PUSH R1,R2 to [SP]; // 傳遞參數(shù)入棧

PUSH R2 to [SP]; // 第二個參數(shù)入棧 ( 1 )

PUSH R1 to [SP]; // 第一個參數(shù)入棧 ( 2 )

call _SP_Addition; // 調(diào)用 C 函數(shù) ( 3 )

R1 = R1; // 函數(shù)返回值 ( 4 )

// SP + = 2; // 調(diào)整堆棧指針 ( 5 )

POP R1 from [SP]; ( 6 )

POP R2 from [SP]; ( 7 )

POP R1,R2 from [SP];

RETF;

.endp

/*-------------------------------------------------------*/

/* C 程序

/*-------------------------------------------------------*/

//=============================================================

// ----Function: UInt16 SP_Addition(UInt16 i,UInt16 j)

// -Description: C 函數(shù),示范匯編調(diào)用 C 函數(shù)

// --Parameters: i , j :被加數(shù)和加數(shù)

// -----Returns: 兩數(shù)的和

// -------Notes: none

//=============================================================

UInt16 SP_Addition(UInt16 i,UInt16 j)

{

UInt16 sum = 0;

sum = i+j;

return(sum);

}

  如圖3-3所示程序調(diào)用時堆棧使用情況。在ASM調(diào)用C的時候需要把堆棧調(diào)整成和C調(diào)用C函數(shù)的樣子,所以需要對參數(shù)的傳遞方式有個了解,按照圖3-3的形式來調(diào)整堆棧。

圖3-3 程序調(diào)用時堆棧使用情況

4 嵌入?yún)R編
  為了使C語言程序具有更高的效率和更多的功能,需在C語言里嵌入用匯編語言寫的子程序。一方面,是為了提高子程序的執(zhí)行速度和效率;另一方面,可以解決某些用C語言程序無法實現(xiàn)的機器語言操作。勿庸置疑,C語言代碼與匯編代碼的接口問題是任何C編譯器都要解決的問題。
  通常有兩種方法可以將匯編語言代碼與C語言代碼聯(lián)合起來,一種是把獨立的匯編語言程序用C函數(shù)連接起來,通過API(Application Program Interface)的方式調(diào)用;另一種就是下面將要提到的在線匯編方法,即將直接插入?yún)R編指令嵌入到C函數(shù)中。
  采用GCC規(guī)定的在線匯編指令格式進行指令的輸入,是GCC實現(xiàn)將μ'nSPTM匯編指令嵌入C函數(shù)中的方法。GCC在線匯編指令格式規(guī)定如下:
  asm(匯編指令模板:輸出參數(shù):輸入?yún)?shù):clobbers參數(shù));
  若無clobber參數(shù),則在線匯編指令格式可以簡化為:
  asm(匯編指令模板:輸出參數(shù):輸入?yún)?shù));

4.1 嵌入式匯編介紹
1、匯編指令模板
  模板是在線匯編指令中的主要成分,GCC據(jù)此可以在當(dāng)前產(chǎn)生匯編指令輸出。例如下面的一條在線匯編指令:
asm("%0 += %1":"+r(foo):"r"(bar));
  其中:"%0 += %1"就是模板。操作數(shù)"%0"、 "%1"作為一種形式參數(shù),分別會由第一個冒號后面實際的輸入、輸出參數(shù)取代。帶百分號后的數(shù)字表示的是冒號后參數(shù)的序號。例如:
asm("%0 = %1 + %2":"=r(foo):"r"(bar), "i"(10));
  "%0"會由參數(shù)foo取代,"%1"會由參數(shù)bar取代,而"%2"會由數(shù)值10取代。
  在匯編輸出中,一個匯編指令模板里可以掛接多條匯編指令。其方法是用換行符"\n"來結(jié)束每一條指令,并可以用Tab鍵符"\t"將同一模板產(chǎn)生的匯編輸出中的各條指令的換行顯示時縮進到同一列,以使匯編指令顯示清晰。例如:
asm("%0 += %1" \n\t "%0 += %1":"+r(foo):"i"(10));

2、操作數(shù)
  在線匯編指令格式中,第一個冒號后的參數(shù)為輸出操作數(shù),第二個冒號后的參數(shù)為輸入操作數(shù),第三個冒號后跟著的則是clobber操作數(shù)。在各類操作數(shù)中,引號里的字符代表的是其存儲類型約束符,括號里面的字符串表示是實際的操作數(shù)。
  如果輸出參數(shù)有若干個,可以用逗號將每一個參數(shù)隔開。同樣,該法則適用于輸入?yún)?shù)或clobber參數(shù)。注意clobber參數(shù)只能是1、2、3和4中的一個或多個,但不能是全部。

3、操作符約束符
  約束符的作用在于指示GCC,使用在匯編指令模板中的操作數(shù)的存儲類型。表1-1列出了一些約束符和它們分別代表的操作數(shù)不同的存儲類型,也列出了用在操作數(shù)約束符之間的兩個約束符前綴。

表 1-1 操作數(shù)存儲類型約束符及約束符前綴

約束符

操作數(shù)存儲類型

約束符前綴及含義解釋

r

寄存器中的數(shù)值

m

存儲器中的數(shù)值

為操作數(shù)賦值

操作數(shù)在賦值前先參加運算

i

立即數(shù)

p

全局變量操作數(shù)

4.2  應(yīng)用舉例
【例4-1】利用嵌入式匯編實現(xiàn)對端口寄存器的操作。

//===================================================================

asm(".include Spmc75_regs.inc"); ( 1 )

//===================================================================

//-------------------------------------

asm("[P_IOD_Attrib_ADDR] = %0 \n\t" \ ( 2 )

"[P_IOD_Dir_ADDR] = %0 \n\t" \ ( 3 )

"[P_IOD_Buffer_ADDR] = %0 \n\t" \ ( 4 )

"[P_IOD_Data_ADDR] = %1 \n\t" \ ( 5 )

: \ ( 6 )

:"r"(0xFFFF),"r"(0x0000) \ ( 7 )

:"1"); ( 8 )

//-------------------------------------

  在C的嵌入式匯編中,當(dāng)使用端口寄存器時,需要在C文件中加入?yún)R編的包含頭文件,(1)所示。那么可以使用端口寄存器的名稱,而不必去使用端口的實際地址;(2)、(3)、(4)和(5)分別對端口寄存器的各個屬性賦值初始化;(6)沒有輸出參數(shù);(7)操作數(shù)%0=0xFFFF,%1=0x0000,操作數(shù)的存儲類型都是寄存器中的數(shù)值;(8)clobber參數(shù),在寄存器傳遞實參的時候不能使用寄存器R1。

【例4-2】利用嵌入式匯編實現(xiàn)對端口寄存器的位值讀取。

A .

//-------------------------------------

asm("r1 = %1; \n\t" \ ( 1.a )

"tstb [r1],%2; \n\t" \ ( 2.a )

"jz 2; \n\t" \ ( 3.a )

"%0 = 0x01; \n\t" \ ( 4.a )

"jmp 1; \n\t" \ ( 5.a )

"%0 = 0x00; \n\t" \ ( 6.a )

:"=r"(result) \ ( 7 )

:"i"(P_IOD_Buffer),"i"(14) \ ( 8 )

:"1","2"); ( 9 )

//-------------------------------------

B .

//-------------------------------------

// GCC inline ASM start

r1 = 28793; ( 1.b )

tstb [r1],14; ( 2.b )

jz 2; ( 3.b )

R3 = 0x01; ( 4.b )

jmp 1; ( 5.b )

R3 = 0x00; ( 6.b )

// GCC inline ASM end

  上面A、B分別是嵌入式匯編和實際編譯出來的代碼。首先需要清楚一點%0=i、%1=P_IOD_Buffer、%2=14,通過(7)和(8)行可以了解。(1.a)將端口IOD的地址存放到R1中;(2.a)測試IOD的14位;(3.a)如果等于零跳過兩行,即跳過(4.a)和(5.a)在(6.a)中為輸出參數(shù)賦值0x00;如果不等于零則順序執(zhí)行(4.a)為輸出參數(shù)賦值0x01;(5.a)跳過一行,即跳過(6.a)。通過上面的過程可以應(yīng)用嵌入式匯編實現(xiàn)對端口位的測試,將測試的結(jié)果保存在變量result中,行(7)所示。行(9)clobber參數(shù),約束行(7)的"r"在編譯時不能使用R1和R2,所以可以在(4.b)和(6.b)中看到使用了R3。但如果行(9)是":"1","2","3");",那么編譯出來的(4.b)和(6.b)中只能使用R4,由此可知":"1","2","3","4");"是絕對不允許的。

【例4-3】典型的應(yīng)用方式。
  通常的應(yīng)用是用宏匯編的形式定義出來,使用的時候就象函數(shù)一樣來使用。

//================================================================

//Function: SETB Function

//Example: SETB(_P_IOA_Data,0x8);

//================================================================

#define SETB(Addr,Num) \

asm( \

"r1=%0;\n\t" \

"r2=%1;\n\t" \

"setb [r1],r2\n\t" \

: \

:"i"(Addr),"i"(Num) \

:"1","2" \

);

SETB ( P_IOD_Data , 14 ); // 置位 IOD14

SETB ( P_IOB_Data , 10 ); // 置位 IOB10

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 狠狠躁夜夜躁人人爽超碰91 | 99精品久久久 | 免费精品 | 精品久久久久久一区二区里番 | 国产强被迫伦姧在线观看无码 | 免费网站看v片在线观看 | 直接在线观看的三级网址 | 亚洲欧美日韩精品久久奇米一区 | 免费se99se| 极品美妇后花庭翘臀娇吟小说 | 久久鲁鲁| 嫩草综合 | 色综合久久88色综合天天 | 97夜色| 97在线免费视频观看 | 国产精品国产三级国产专业不 | 亚洲精品一区二区不卡 | 免费成人深夜夜国外 | 在线精品自偷自拍无码 | 国产成人无码午夜视频在线观看 | 大陆极品少妇内射aaaaa | 男女啪啪免费体验区 | 亚洲女同av | 国产精品国产三级国产专区51 | 亚洲日本aⅴ片在线观看香蕉 | 成熟丰满熟妇高潮xxxxx | 欧美成人精品欧美一级乱 | 欧美一级视频免费 | 毛片的网址| 乌克兰少妇xxxx做受野外 | 少妇一边呻吟一边说使劲视频 | 亚洲欧美日韩国产成人精品影院 | 欧美激情一区二区在线 | 欧美成人免费一区二区三区 | 一区二视频 | 香蕉久久人人爽人人爽人人片av | 欧美精品久久久久久久多人混战 | 亚洲桃色综合影院 | 蜜桃av噜噜一区二区三区麻豆 | 双性调教总裁失禁尿出来 | 亚洲天堂日韩在线 | 久久久久国色av免费观看性色 | 日本在线一 | 亚洲日韩av无码中文字幕美国 | 韩欧美精品| 辟里啪啦国语版免费观看 | 免费黄色小视频在线观看 | 九色丨porny丨自拍视频 | 免费国产区 | 91视频黄版 | 永久黄色网址 | 伊人精品成人久久综合软件 | 同性情a三级a三级a三级 | 99热久久这里只精品国产www | 色婷婷综合激情综在线播放 | 色狠狠一区二区三区香蕉 | videosg最新另类大全 | 亚洲精品www久久久久久 | 中文字幕久久久久 | 欧美一区免费观看 | 欧美日韩不卡视频 | 麻豆国产人妻欲求不满 | 亚洲国产成人女毛片在线主播 | 久久久久人妻精品一区三寸 | 久久精品视频99 | 福利片第一页 | 欧美日韩一区二区三区在线观看视频 | 久久欧美精品久久天美腿丝袜 | 香蕉视频入口 | 久久综合久久网 | 国产视频网站在线观看 | 黄色片视频网站 | 国产精品久久9 | 国产成人麻豆精品午夜在线 | 九九久久精品国产免费看小说 | 久久精品欧美日韩精品 | 97人人澡人人爽人人模亚洲 | 伊人久久大香线蕉综合75 | aaa黄色| 亚洲视频不卡 | 国产精品久久久久久久模特 | 日本特级毛片 | 人人妻人人澡人人爽 | 国内精品久久久久久久 | 久久99色| 91三级视频| 亚洲一区二区天堂 | 久久人人爽人人爽人人片亞洲 | 在线黄色av网站 | 嫩草在线播放 | 狠狠撸视频 | 国产精品无码无片在线观看 | 日本免费色 | 日日夜夜超碰 | 久久久综合av | 青青青草网站免费视频在线观看 | 人妻少妇精品中文字幕av蜜桃 | 美女隐私黄www网站免费 | 日本美女色视频 | 黄色大片免费观看视频 | 国产成人精品日本亚洲专区 | 在线亚洲自拍 | 亚洲啪啪综合av一区 | 五月激情啪啪 | 亚欧激情 | 中文字幕一本一二本迫 | 午夜尤物丰满大乳美女 | 欧美一级爆毛片 | 96成人爽a毛片一区二区 | 亚洲成人在线播放视频 | 伊人免费在线观看 | 日本不卡在线观看 | 91国内在线观看 | 激情综合网五月激情 | 狠狠干一区 | 成年人视频在线观看免费 | 亚洲国产www | 99精品网| 自慰小少妇毛又多又黑流白浆 | 亚洲欧美日韩另类精品一区二区三区 | 手机成人在线 | 中文字幕无码热在线视频 | 欧美性xxxx极品hd大豆行情 | 91影院在线 | 久草在线新首页 | 亚洲精品乱码久久久久久 | 中国二级毛片 | 日本在线网 | 可以看毛片的网站 | 影音先锋亚洲成aⅴ人在 | 国产精品igao视频网 | 粉嫩av一区二区三区四区在线观看 | 亚洲天堂av中文字幕 | 欧美在线观看网站 | 日韩中文字幕成人免费视频 | av在线亚洲男人的天堂 | 国产精品99久 | 上司的丰满人妻中文字幕 | 久章操 | 成人精品水蜜桃 | 蜜桃久久精品 | 国产日本欧美在线观看 | 91玉足脚交白嫩脚丫在线播放 | 免费av在线网站 | 99在线成人精品视频 | 亚洲第一黄网 | 亚洲精品久久久久久一区二区 | 91国偷自产一区二区三区蜜臀 | 草草夜色精品国产噜噜竹菊 | 亚洲女成人图区 | 日韩精品亚洲人成在线观看 | 五级黄高潮片90分钟视频 | 婷婷综合少妇啪啪喷水动态小说 | 天堂资源站 | 国产嫩草在线观看视频 | 无码国产伦一区二区三区视频 | 久久天天操| 15p亚洲| 午夜在线观看免费视频 | 伦xxxx在线| 青青视频免费在线观看 | 搡女人真爽免费午夜网站 | 久久影院一区 | 欧美色窝79yyyycom | 在线观看精品视频 | av片在线看免费高清网站 | 熟女体下毛毛黑森林 | 99热在线观看 | 强制憋尿play黄文尿奴 | 林雅儿欧洲留学恋爱日记在线 | 欧美激情一二区 | 337p粉嫩大胆色噜噜噜 | 日本一区午夜艳熟免费 | 意大利少妇愉情理伦片 | 成人性做爰aaa片免费看不忠 | 欧美乱码精品一区二区三区 | 国产精品大全 | 国产精品青草综合久久久久99 | 日韩精品三区 | 黄网av | 国产成人免费观看久久久 | 国产精品乱码 | 91在线精品播放 | 国产精品免费拍拍10000部2 | 精品无人区一区二区 | 中文字幕在线视频不卡 | 天天射天天干天天色 | 九九夜| 亚洲色图网址 | 久久久水蜜桃 | 色噜噜亚洲男人的天堂 | yy6080亚洲精品一区 | 国产成人精品av久久 | 久久久久九九九 | 欧美又大又色又爽bbbbb片 | 久久香蕉国产线看观看猫咪av | 亚洲一区二三区 | 亚洲精品国产剧情久久9191 | 一本大道综合伊人精品热热 | 91视频免费入口 | 欧美成人性生活免费视频 | 久久久久久久久久久久久久久久久久久 | 一级黄色免费毛片 | 久久久av亚洲男天堂 | 3344永久在线观看视频免费 | av资源在线| 激情小说在线观看 | 天堂禾欧美城网站 | 天堂网在线最新版www | 欧美性受xxxx白人性爽 | 午夜精品福利一区二区 | 一二三区乱码2021 | 天堂8中文在线最新版在线 拍真实国产伦偷精品 | 中文字字幕| 日本精品人妻无码免费大全 | 久久99久久99精品免观看 | 一级片www | 亚洲激情视频小说 | 欧美激情视频二区 | 在线观看小视频 | 九九精品国产 | 亚洲成人午夜影院 | 亚洲日韩一区二区三区 | 特级无码毛片免费视频 | 欧美成人精品一区 | 91少妇和黑人露脸 | 69人人| 日日躁狠狠躁aaaaxxxx | 国产精品入口免费视 | 久久九九免费视频 | 久热在线 | av动漫精品| 亚洲国产综合色产精品色在线 | 嫩草视频在线观看 | 3级av | 九一自拍中文字幕 | 天天综合网久久 | 午夜青青草 | 99国产精品国产精品九九 | 色老头免费视频 | 99久久免费视频在线观看 | 40岁成熟女人牲交片 | 99精产国品一二三产区网站 | 在线视频网站 | 国产播放隔着超薄丝袜进入 | 国产经典毛片 | 国产av一区最新精品 | 黄色美女视频网站 | 色综合久久88色综合天天提莫 | 欧美视频区 | 99久热在线精品视频观看 | 国产又色又爽又黄的视频在线观看 | 91啪在线观看 | 7777久久亚洲中文字幕蜜桃 | 女人真人毛片全免费看 | 欧美亚洲第一区 | 丝袜 国产 日韩 另类 美女 | 农村妇女一区二区 | 激情超碰 | 99久久综合狠狠综合久久 | 婷婷伊人五月天 | 西西午夜 | 青青草视频在线看 | 国产精品伦一区二区三级视频 | 亚洲一区二区三区四区五区xx | 台湾无码一区二区 | 欧美三级午夜理伦三级老人 | 韩国主播青草55部完整 | 超污网站在线观看 | 久久国产这里只有精品 | 久久99免费| 国产日韩欧美不卡在线二区 | 日本japanese少妇毛耸耸 | av中文在线播放 | 干欧美 | 91午夜精品一区二区三区 | 午夜免费福利在线 | 露脸叫床粗话东北少妇 | 搡少妇在线视频中文字幕 | 手机在线免费看av | 国产成人av免费观看 | 国产精品乱码一区二区视频 | 护士的小嫩嫩好紧好爽 | 久久瑟瑟 | 国产三级漂亮女教师 | 亚洲精品国产第一综合99久久 | 一道本道加勒比天天看 | 91超碰免费在线 | 丰腴饱满的极品熟妇 | av在线免| 三级av在线免费观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产美女视频国产视视频 | 青青草精品在线 | 天堂中文在线最新 | 青青青国产在线观看免费 | 性生交大片免费看l | 亚洲熟妇中文字幕五十中出 | 免费在线观看av网站 | 国产高清精品软件丝瓜软件 | 黑人粗大猛烈进出高潮视频 | 午夜精品福利一区二区 | 国产一区二区三区精品在线 | 风间由美性色一区二区三区四区 | 亚州av一区 | aaa大片十八岁禁止 aa爱做片免费 | 亚洲欧美视频在线 | 男人的天堂无码动漫av | 午夜精品久久久久久久99老熟妇 | www..com黄色| 中文字幕精品亚洲无线码二区 | 草视频在线 | 毛片直接看 | 日韩精品91| 夜夜夜网站 | 国产丰满麻豆videossexhd 无码少妇一区二区三区免费 | 美国一级大黄一片免费中文 | 色婷婷香蕉在线一区 | 女学生处破外女出血av喊痛 | 精品国产乱码久久久久久口爆网站 | 日韩欧美国产片 | 99国产偷伦视频在线观看 | 97香蕉超级碰碰久久免费软件 | 天堂在线精品 | 亚洲 欧美 偷自乱 图片 | 国产猛烈尖叫高潮视频免费 | 久久伊人影视 | 懂色a v | 国产麻豆精品一区二区三区v视界 | 草逼视频网站 | 2020国产成人精品视频 | 精品久久久久久久久久久久久久 | 男人的天堂无码动漫av | 久久夜色精品亚洲 | 日本aⅴ写真网站免费 | 日本欧美一区 | 日韩精品中字 | 日韩欧美一区二区在线 | 日韩精品日韩激情日韩综合 | 狠狠精品久久久无码中文字幕 | 国产精品国产三级国产aⅴ9色 | 国产微拍精品 | 福利片第一页 | 最近中文字幕2019视频1 | 国产丰满老妇伦 | 伊人黄色片| 国产乱子伦农村叉叉叉 | 777色婷婷视频二三区 | 性一交一乱一色一视频麻豆 | 国产目拍亚洲精品99久久精品 | 国产日批视频在线观看 | 欧美日韩精品免费 | 日本夜夜操 | 国产麻豆精东果冻传媒 | 在线视频一区二区三区 | 北条麻妃久久精品 | 欧美日韩视频在线观看免费 | 欧美精品网址 | 国产一区二区三区在线观看 | 亚洲午夜精品17c | 波多野结衣视频播放 | 中国熟妇人妻xxxxx | 最新成人av | 午夜精品国产 | 色拍拍欧美视频在线看 | 亚洲色偷偷av男人的天堂 | 97国产情侣爱久久免费观看 | 亚洲午夜久久久久 | 友田真希中文字幕在线视频中 | 国模无码视频一区 | 又粗又猛又黄又爽无遮挡 | 免费精品99久久国产综合精品 | 91av在线播放 | 国产女主播福利 | 天天视频色 | 国产乱码日产乱码精品精 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产剧情自拍 | 亚洲综合精品香蕉久久网 | av黄色国产| 99久久亚洲精品日本无码 | 少妇口述偷人好爽的一次 | 狠狠综合久久av一区二区小说 | 国产毛片精品 | 日本aⅴ写真网站免费 | 中文精品久久久久人妻不卡 | 成人黄色网| 欧美亚洲国产一区二区三区 | 无码国产69精品久久久久孕妇 | 曰本女人与公拘交酡 | 97免费在线| 日本黄色a视频 | 亚洲天堂一区二区三区四区 | 视频在线一区 | 天堂va蜜桃一区二区三区 | 午夜xxxx| 911久久香蕉国产线看观看 | 友田真希中文字幕在线视频中 | 欧美成人手机在线视频 | 欧美色图1 | 精品久久久久久人妻无码中文字幕 | 国产午夜精品av一区二区 | 久久人人爽人人爽人人片 | www在线看片| 国产精品我不卡 | 亚洲 综合 清纯 丝袜 自拍 | 69视频免费观看 | 国产乱了真实在线观看 | 日日噜噜噜噜人人爽亚洲精品 | 一本一道精品欧美中文字幕 | 一女被多男玩喷潮视频 | 亚洲色婷婷六月亚洲婷婷6月 | 强开小嫩苞一区二区三区网站 | 国产色拍 | 后入内射欧美99二区视频 | 自拍偷拍免费 | 爱的色放3 | 亚洲一区二区三区乱码aⅴ 亚洲一区二区三区日本久久九 | 少妇熟女久久综合网色欲 | 亚洲毛片在线播放 | 成人性生交大片免费看视频app | 天堂а在线中文在线新版 | 最新中文无码字字幕在线 | 国内精品久久久久久久果冻传媒 | 91网站在线播放 | chinese精品自拍hd | 精品乱子伦一区二区三区 | 日韩少妇av | av九九九| 免费人成网站在线观看欧美高清 | 97久久超碰国产精品2021 | 精品久久久久久中文字幕 | 麻豆视频精品 | 精品无人区无码乱码毛片国产 | 久久久久免费视频 | 五月色婷婷俺来也在线观看 | 激情伊人五月天久久综合 | 日本免费一区二区三区四区五区 | 久久久国产精品久久久 | 日日躁夜夜躁xxxxaaaa | 欧美日韩一区二区在线观看 | 欧美一区二区三区四区在线 | 午夜精品av | 99久久婷婷国产综精品喷水 | gogo精品国模啪啪作爱 | 精品久久久久久久无码人妻热 | 在线免费观看日本视频 | 欧美日韩亚洲一区二区 | 国产又粗又猛又爽视频上高潮 | av老司机在线 | ass日本丰满熟妇pics | 日本理论片中文字幕 | 啪免费| 午夜无码人妻av大片色欲 | 日韩黄色在线 | 日韩免费观看视频 | 在线综合色| 无码伊人久久大杳蕉中文无码 | 日本一区二区黄色 | 一本一道久久a久久精品 | 大陆少妇xxxx做受高清 | wwwzzz成人啪啪 | 成人免费在线观看av | 日韩免费无码一区二区三区 | 免费又黄又爽又猛的毛片 | 精品国产成人一区二区三区 | 人成免费 | 成人国产免费 | 欧美在线激情视频 | 国产伦子真实事例对白 | 亚洲精品视频大全 | 日本成人黄色 | 亚洲视频色 | 国产crm系统91在线 | jizzjizz在线 | 国产a一区二区 | 中文字幕在线观看视频免费 | 成人做爰高潮片免费看 | 亚洲精品成人网 | 911国产在线 | 日本视频www色 | 97国产精品视频人人做人人爱 | 黑人大战中国av女叫惨了 | 爱情岛亚洲品质自拍极速福利网站 | 久久666| 久久麻豆av| 99精品视频九九精品视频 | 国产视频一区二区三区在线 | 久久精品日日躁夜夜躁 | 亚洲色图150p | 国内自拍一二三四2021 | 波多野结衣久久久久 | 日韩一级黄色毛片 | 那里有毛片看 | 亚洲欧美偷拍另类a∨色屁股 | 婷婷色亚洲 | 久久婷婷综合色丁香五月 | 国产91观看 | 青青久久av北条麻妃黑人 | 葵司免费一区二区三区四区五区 | 久久天天躁狠狠躁夜夜2020一 | а中文在线天堂 | 青青青看免费视频在线 | 51免费看成人啪啪片 | 98视频在线 | 久久激情网站 | 偷国产乱人伦偷精品视频 | 国产99久久久国产精品~~牛 | 青草福利在线 | 狠狠色噜噜狠狠狠狠69 | 国内女人喷潮完整视频 | 尹人成人网 | 亚洲日日操 | www.久久爱.com狼人 | 欧美视频免费看 | 深夜福利影院 | 网站在线免费网站在线免费观看国产网页 | lutu成人福利在线观看 | 天天躁日日躁很很很躁 | 日本免费黄色小视频 | 亚洲国产精品久久久久秋霞蜜臀 | 国产伦理片在线观看 | 91在线免费播放 | 12一15性xxxx粉嫩国产 | 午夜xxx| 少妇人妻精品一区二区 | 欧美成人精品在线观看 | 伊人久久精品无码麻豆一区 | 欧美色炮 | 人人澡人人透人人爽 | 欧美成人午夜精品久久久 | 7777久久亚洲中文字幕 | 亚洲精品第一国产综合亚av | 中文字幕一区二区人妻性色 | 狠狠色丁香婷婷综合最新地址 | 青草久久久 | 性丰满白嫩白嫩的hd124 | 成人男同在线观看 | 成人在线视频一区 | 日本ww色| 久久91久久久久麻豆精品 | 亚洲乱码无码永久不卡在线 | 大陆极品少妇内射aaaaaa | 亚洲性喷水 | 日日躁夜夜躁狠狠躁aⅴ蜜 日日躁夜夜躁狠狠躁超爽2001 | 亚欧洲乱码视频 | 欧美色狠 | 国产男女无套 | 国产三级一区二区三区 | 精品无码久久久久久久久久 | 亚洲揄拍窥拍久久国产自揄拍 | 亚洲国产精品女人 | 在线永久免费观看黄网站视频 | 男人天堂新地址 | 亚洲一区二区精品在线 | 亚洲三级色 | 黄色片在线免费 | 男人av无码天堂 | 粉嫩粉嫩的虎白女18在线软件 | 亚洲女人天堂av | 午夜激情福利视频 | 婷婷伊人五月色噜噜精品一区 | 一边吃奶一边做动态图 | 97中文字幕在线观看 | 日韩欧美视频 | 国产高清在线精品一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 国产色婷婷精品综合在线 | 神马国产| 91天天爽 | 国产亚洲精品久久久97蜜臀 | 精品国产一区av天美传媒 | 国产日韩一区二区在线观看 | 亚洲国产美女视频 | 亚洲第一天堂久久 | 国产精品人妻一区二区三区四 | 久久精品无码专区免费 | 在线播放国产视频 | 爱爱网站免费 | 日本少妇xx | 开心激情站 | 日本aⅴ在线观看 | 色综合久久88色综合天天 | 丝袜 亚洲 欧美 日韩 综合 | 久久国产精品成人免费 | 人摸人人人澡人人超碰97 | 日本三级免费网站 | 国产jjizz一区二区三区视频 | 国产精品久久精品第一页 | 国产日产精品一区二区三区四区介绍 | 成年人av在线播放 | www.youjizz.com在线观看 | 国产素人av| 国产真实伦对白全集 | 国产精品成人免费 | 亚洲成av人片一区二区密柚 | 亚洲国产欧美一区二区三区丁香婷 | 国产精品午夜视频 | www婷婷| 国产亚洲精品久久yy50 | 精品无码一区二区三区不卡 | 四虎影库在线永久影院免费观看 | 裸体性做爰免费视频网站 | 久久99精品国产麻豆91樱花 | 欧美人与物videos另类xxxxx | 黄色av免费网址 | 国内成人自拍视频 | 欧美激情免费视频 | 亚州av久久精品美女模特图片 | 亚洲一级片在线观看 | 波多野结衣成人在线 | 中文日韩亚洲欧美字幕 | 性做久久久久久免费观看欧美 | 涩涩999 | 中文成人无码精品久久久不卡 |