《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 通過TMS320VC5410燒寫FLASH實現(xiàn)并行引導(dǎo)裝載的研究
通過TMS320VC5410燒寫FLASH實現(xiàn)并行引導(dǎo)裝載的研究
葉海炳
摘要: 隨著DSP的廣泛應(yīng)用,如何對DSP系統(tǒng)上的FALSH重新編程的問題日益突出。在介紹Flash存儲器 Am29LV200B操作方法的基礎(chǔ)上,通過TMS320VC5410對FLASH進(jìn)行程序燒寫,從而實現(xiàn)TMS320VC5410上電后用戶程序并行自舉引導(dǎo)。
Abstract:
Key words :

    摘 要: 隨著DSP" title="DSP">DSP的廣泛應(yīng)用,如何對DSP系統(tǒng)上的FALSH重新編程" title="編程">編程的問題日益突出。在介紹Flash" title="Flash">Flash存儲器 Am29LV200B操作方法的基礎(chǔ)上,通過TMS320VC5410" title="TMS320VC5410">TMS320VC5410對FLASH進(jìn)行程序燒寫,從而實現(xiàn)TMS320VC5410上電后用戶程序并行" title="并行">并行自舉引導(dǎo)。
    關(guān)鍵詞: DSP  FLASH   TMS320VC5410  并行  引導(dǎo)裝載" title="引導(dǎo)裝載">引導(dǎo)裝載  編程

    FLASH是一種可在線進(jìn)行電擦寫而掉電后信息又不丟失的存儲器。它具有功耗低、容量大、擦寫速度快等特點,并且使用內(nèi)部嵌入算法對芯片進(jìn)行操作,因而在很多采用DSP+FLASH自舉引導(dǎo)裝載方案的數(shù)字信號處理系統(tǒng)中得到了廣泛的應(yīng)用。本文通過一個完整的實例,介紹Am29LV200B FLASH存儲器的燒寫方法,實現(xiàn)TMS320VC5410(以下簡稱C5410)上電后用戶程序的并行引導(dǎo)裝載。
1 Am29LV200B FLASH存儲器
1.1 FLASH存儲器簡介

    Am29LV200B是AMD公司生產(chǎn)的FLASH存儲器,其主要特點[6]有:3V單電源供電,可使內(nèi)部產(chǎn)生高電壓進(jìn)行編程和擦除操作;支持JEDEC單電源FLASH存儲器標(biāo)準(zhǔn);只需向其命令寄存器寫入標(biāo)準(zhǔn)的微處理器指令,具體編程和擦除操作可由內(nèi)部嵌入的算法實現(xiàn),并且可以通過查詢特定的引腳或數(shù)據(jù)線監(jiān)控操作是否完成;可以對任一扇區(qū)進(jìn)行讀、寫或擦除操作,而不影響其它部分的數(shù)據(jù)。本文中128K×16位Am29LV200B FLASH映射為C5410的片外數(shù)據(jù)存儲空間,地址為:0x8000~0xFFFF,數(shù)據(jù)總線16位,用于16位方式的并行引導(dǎo)裝載。128K的FLASH ROM用32K地址分四頁進(jìn)行訪問,上電加載程序時使用FLASH ROM的第3頁。
1.2 Flash存儲器的操作命令
    只要向FLASH存儲器的特定寄存器寫入地址和數(shù)據(jù)命令,就可對FLASH存儲器編程。但要按一定的順序操作,否則就會導(dǎo)致FLASH存儲器復(fù)位。由于編程指令不能使“0”變?yōu)?ldquo;1”,只能使“1”變?yōu)?ldquo;0”,而擦除命令可使“0”變?yōu)?ldquo;1”,所以正確順序是先擦除、后編程。下面介紹幾個常用的操作命令:編程命令、擦除命令、讀數(shù)據(jù)命令、復(fù)位命令。
    (1)編程命令。該命令向FLASH的指定地址寫入數(shù)據(jù),需要四個總線周期,前兩個周期是解鎖周期,第三個周期建立編程命令,最后一個周期則向編程地址寫入編程數(shù)據(jù),如表1所示。

 


    由于向每個編程地址寫入數(shù)據(jù)都需要四個周期,所以在循環(huán)寫FLASH時使用宏比較簡單。FLASH ROM的首地址為0x8000,故偏移地址0x555對應(yīng)的物理地址就為0x8555。_WRITECOMMAND是實現(xiàn)一個周期編程的寫命令宏,而_WRITEFlash則是對指定地址進(jìn)行編程的四個完整周期。
    具體編程程序如程序1、程序2所示。
    程序1

    _WRITECOMMAND .macro pa,pd
    ; 單一周期編程的寫命令宏,
    ; pa是編程地址,pd是編程數(shù)據(jù)
    PSHM AR1
    STM pa,AR1  ; AR1指向編程地址
    LD pd,A
    STL A,*AR1  ; 把編程數(shù)據(jù)放入AR1的編程地址
    RPT #12
    NOP
    POPM AR1
    .endm
    程序2
    _WRITEFlash .macro par,pdr
    ; 編程宏,par是編程地址寄存器,
    ; pdr是存放編程數(shù)據(jù)的寄存器
    _WRITECOMMAND #8555H,#0AAH  ;周期1(解鎖)
    _WRITECOMMAND #82AAH,#0A0H  ;周期2(解鎖)
    _WRITECOMMAND #8555H,#0A0H  ;周期3(建立)
    LD pdr, A ;周期4(編程)
    STL A, par   ;把pdr寄存器中數(shù)據(jù)放入par寄存器的地址
    RPT #12
    NOP
    _JUDGE par, pdr
    ; 檢測編程是否正確,見FLASH的操作檢測
    .endm
    (2)擦除命令。該命令有片擦除和扇區(qū)擦除兩種,都需要6個總線周期,前兩個是解鎖周期,第三個是建立周期,第四、第五兩個是解鎖周期,最后是片擦除或扇區(qū)擦除周期,如表2所示。

 

 

    一旦執(zhí)行編程或擦除命令后,就啟動FLASH的內(nèi)部編程或擦除算法,自動完成編程或擦除操作。擦除程序如程序3所示。
    程序3

    _ERASEFlash .macro ;擦除宏
    _WRITECOMMAND #8555H, #0AAH ;周期1(解鎖)
    _WRITECOMMAND #82AAH, #055H ;周期2(解鎖)
    _WRITECOMMAND #8555H, #080H ;周期3(建立)
    _WRITECOMMAND #8555H, #0AAH ;周期4(解鎖)
    _WRITECOMMAND #82AAH, #055H ;周期5(解鎖)
    _WRITECOMMAND #8555H, #010H ;周期6(片擦除)
    STM #8555H,AR3
    LD #010H, A
    STL A, *AR5
    _JUDGE *AR3, *AR5
    ;檢測擦除是否結(jié)束,見FLASH的操作檢測
    .endm

    (3)讀數(shù)據(jù)命令。上電或內(nèi)部編程、擦除操作結(jié)束后就進(jìn)入讀數(shù)據(jù)狀態(tài),寫入要讀取的地址即可讀出該地址的數(shù)據(jù)。
    (4)復(fù)位命令。該命令使存儲器復(fù)位,進(jìn)入讀數(shù)據(jù)狀態(tài)。向任何一個地址寫入數(shù)據(jù)0xF0就能使FLASH存儲器復(fù)位。在進(jìn)行編程、擦除之前,都應(yīng)先復(fù)位,在編程或擦除等正常操作中出現(xiàn)錯誤時也要復(fù)位。復(fù)位程序如程序4所示。
    程序4

    _RESETFlash .macro ;復(fù)位宏
    _WRITECOMMAND #8001H,0F0H
    ;向8001H寫入0F0H使FLASH復(fù)位
    RPT #12
    NOP
    .endm

1.3 Flash的操作檢測
    FLASH內(nèi)部的編程或擦除算法可自動完成編程或擦除操作,但必須了解其內(nèi)部的操作檢測機制,以便知道操作是否完成或正確。常用的檢測狀態(tài)位有:跳變位(DQ6)、超時標(biāo)志位(DQ5)、數(shù)據(jù)查詢位(DQ7)和Ready/Busy引腳(RY/)。檢測的方法有三種。第一種是判斷引腳RY/的狀態(tài)。在編程、擦除或擦除掛起操作過程中,RY/引腳一直為“0”,操作完成后變?yōu)?ldquo;1”。 第二種是檢測跳變位DQ6,在編程或擦除時對任何地址進(jìn)行連續(xù)的讀均引起DQ6連續(xù)跳變,直至操作結(jié)束才停止跳變。最后一種是使用數(shù)據(jù)線的DQ7、DQ5。DQ7位在編程或擦除過程中輸出的數(shù)是寫入該位數(shù)據(jù)的反碼,當(dāng)操作完成時輸出才變?yōu)閷懭朐撐坏臄?shù)據(jù);DQ5的狀態(tài)為“1”時表示操作超時,此時應(yīng)再讀一次DQ7的狀態(tài),若DQ7輸出仍不是寫入的數(shù)據(jù),則操作失敗,復(fù)位FLASH。其流程如圖1所示,檢測程序如程序5所示。

 

 

    程序5

    JUDGE .macro par,pdr
    ;檢測宏程序。par是編程地址寄存器,
    ;pdr是存放編程數(shù)據(jù)的寄存器
    _JUDGEBEGIN?: PSHM AR1
    LD pdr,B; 獲取寫入的數(shù)據(jù)
    AND #00FFh,B  ;取被寫入數(shù)據(jù)的DQ7~DQ0
    LD par,A;讀被燒寫地址的數(shù)據(jù)
    ADN #00FFh, A   ;取DQ7~DQ0
    STL A, TEMP; 保存
    LD A,-7,A    ;讀DQ7狀態(tài)
    XOR B, -7,A   ;是否是反碼?
    BC_JUDGESUCCESS?,AEQ
    ;DQ7不是反碼而是寫入數(shù)據(jù)表示操作成功
    BITF TEMP, #20h
    BC_JUDGEBEGIN?芽,ntc
    ;DQ5=1表示操作超時
    LD par,A    ;再讀被燒寫地址的數(shù)據(jù)
    AND #00FFh,A
    LD A,-7,A
    XOR B, -7,A
    BC_JUDGESUCCESS?. AEQ
    ;DQ7不是寫入數(shù)據(jù),表示操作失敗
    _JUDGEERR0?
    _RESETFlash    ;復(fù)位FLASH
    _JUDGESUCCESS?
    POPM AR1
    .endm

2 C5410 的自舉引導(dǎo)
    脫離仿真器獨立運行程序一般有兩種方式:一種是上電后用戶程序直接在FLASH存儲器中運行,這種方式運行速度比較慢;另一種是上電或復(fù)位后將用戶程序從FLASH存儲器引導(dǎo)到高速數(shù)據(jù)存儲器中運行,此方法最常用,可以較低的成本實現(xiàn)高速的運行。為了實現(xiàn)這個過程就必須運用DSP的自舉引導(dǎo)功能。
2.1 自舉引導(dǎo)[1~3]
    C5410上電復(fù)位后,首先檢查MP/MC狀態(tài):若為高電平,說明DSP處于微處理器工作方式,即從外部程序存儲器0FF80H地址處開始執(zhí)行用戶程序;若為低電平,說明DSP被設(shè)置為微計算機工作方式,從片內(nèi)ROM的0FF80H地址處開始執(zhí)行程序。0FF80H地址存放的是中斷向量表,它實為一條分支轉(zhuǎn)移指令(BD 0F800H),使程序跳轉(zhuǎn)至0F800H執(zhí)行自舉引導(dǎo)程序(Bootloader)。Bootloader是固化在DSP芯片內(nèi)ROM中的一段代碼程序,其功能是將用戶程序從外部加載至片內(nèi)RAM或擴展的RAM中,使其高速運行。在搬運程序之前,Bootloader首先完成初始化工作:使中斷無效、內(nèi)部RAM映射到程序/數(shù)據(jù)區(qū)(OVLY=1)、對程序和數(shù)據(jù)區(qū)均設(shè)置7個等待狀態(tài)等。C5410有以下幾種自舉引導(dǎo)方式[4~5]:主機接口HPI、并行口(8/16位)、標(biāo)準(zhǔn)串行口(MCBSP0是16位引導(dǎo)模式,MCBSP2是8位引導(dǎo)模式)以及I/O口(8/16位)自舉引導(dǎo)方式。
2.2 并行自舉引導(dǎo)
    這種方式是比較常用的一種方式,外部存儲器的字寬為8位或16位。在自舉引導(dǎo)時,通過外部并行接口總線將這些代碼從數(shù)據(jù)存儲空間傳送到程序存儲空間,而且可以重新設(shè)置SWWSR及BSCR寄存器的內(nèi)容。并行自舉引導(dǎo)方式首先從地址為0FFFFH的I/O口讀取自舉表首地址的內(nèi)容,如果此內(nèi)容不符合8位或16位的引導(dǎo)方式,就從地址為0FFFFH的數(shù)據(jù)存儲器讀取,進(jìn)行8位或16位并行自舉引導(dǎo)。所以在燒寫FLASH數(shù)據(jù)的同時,也要在0FFFFH燒入自舉表的首地址。引導(dǎo)流程如圖2所示。

 


2.3 建立自舉表
    自舉表內(nèi)容不僅包括欲加載的各段代碼,而且包括各段代碼長度、各代碼段存放的目標(biāo)地址、程序入口地址等信息。若要完成自舉引導(dǎo)功能,必須建立正確的自舉表。自舉表可以由hex500格式轉(zhuǎn)換器自動生成;也可以手動建立自舉表,就是把被燒寫的程序直接放在燒寫程序中,根據(jù)被燒寫程序的相關(guān)信息手動建立自舉表。
3  通過C5410燒寫FLASH及并行自舉引導(dǎo)
    下面通過一個FLASH燒寫實例,介紹怎樣將用戶程序燒寫進(jìn)FLASH,以及怎樣手動建立自舉表,并且脫離仿真器以并行自舉引導(dǎo)方式使用戶程序獨立運行。被燒寫和燒寫程序如程序6所示。
    程序6 

    .title“FLASH”
          .mmregs
    SWCR  .set 002BH
          .set 0060H
          .data
          .sect “.BOOT”
          .label BOOTTABLE  ;自舉表開始
          .word 10AAH   ;16位自舉標(biāo)記
          .word 7FFFH   ; 7位等待周期(SWWSR)
          .word 0F000H   ;塊轉(zhuǎn)換寄存器(BSCR)
          .word 0000h   ;程序入口XPC
          .word 0200h  ;程序入口地址(MAIN_START)
          .word LOADEND - LOADSTART
    ;程序塊長度(0116H)
          .word 0000h  ;存放目標(biāo)XPC
          .word 0100h  ;存放目標(biāo)地址
    LOADSTART:      ;中斷向量表開始地址
          .copy “vector.asm”;復(fù)位處跳轉(zhuǎn)MAIN_START 
    MAIN_START:   ;被燒寫的主程序
           STM #0F7h,SP
           STM #012Ch,PMST
    ; IPTR=01(中斷向量指針為100,指向目標(biāo)址)
    ; MP/MC=0,OVLY=1,AVIS=0,DROM=1,CLKOFF=1
    LOOPF:RSBX XF   ;XF置低
           CALL DELAY  ;延時
           SSBX XF   ;XF置高
           CALL DELAY
           B LOOPF
           DELAY:  PSHM AR6
           STM #0090H,AR6
           DELAY_LOOP;
           RPT #0FF0h
           NOP
    BANZ DELAY_LOOP, *AR6-
           POPM AR6
           RET
    LOADEND:      ;被燒寫的程序結(jié)束
           .space 20h
           .mmregs
           .label FINDTABLE
           .word 8000h
           .text
           ERASE_WRITE_Flash:  ;燒寫程序開始
           STM #0FFA0H,PMST
           STM #07FFFH,SWWSR
           STM #0FFFFH,SWCR
           _RESETFlash     ;FLASH復(fù)位
           _ERASEFlash    ;擦除FLASH
           WRIFlashSTART:   ;開始編程FLASH
           SSBX SXM
           RSBX OVM
           _RESETFLASH     ;FLASH復(fù)位
           STM#8000H, AR0  ;FLASH起始地址8000H
           STM BOOTTABLE,AR5 ;被燒寫的源地址(自舉表首地址)
           STM #(LOADEND-BOOTTABLE),AR4
           ;寫入011E個字WRI_RPT
           _WRITEFlash *AR0,*AR5 ;調(diào)入編程宏
           LD *AR0+,A
           LD *AR5+,A   ;完成AR0和AR5地址自動加1
    BANZ WRI_RPT,*AR4-
    STM #0FFFFH,AR0   ;AR0指向數(shù)據(jù)空間的FFFF地址
    STM FINDTABLE,AR5
    _WRITEFlash *AR0,*AR5
    ;向數(shù)據(jù)空間的FFFF地址寫入自舉表的首地址8000H
    ENDD: NOP
    B ENDD
    .end

    被燒寫的主程序是從MAIN_START開始,一直到LOADEND。程序的主要功能是不斷改變XF引腳的狀態(tài)。LOADSTART是中斷向量文件(vector.asm)的開始,在中斷復(fù)位(RESET)處放入一條跳轉(zhuǎn)到MAIN_START的指令(BD MAIN_START)。ERASE_WRITE_FLASH是燒寫程序的開始,只要程序指針(PC)指向ERASE_WRITE_FLASH,開始運行就可以完成對FLASH的燒寫操作。從自舉表首地址BOOTTABLE(0F8H)到LOADEND(0216H)存放的數(shù)據(jù)就是要寫入Flash的內(nèi)容,從LOADSTART到LOADEND的數(shù)據(jù)是DSP自舉程序從FLASH搬運到片內(nèi)RAM的程序。根據(jù)以上信息就可以完成自舉表的內(nèi)容,如表3所列。

 


    整個并行自舉引導(dǎo)過程為:C5410上電復(fù)位后,判斷MP/MC=0 處于微計算機工作方式,從片內(nèi)ROM的0FF80H處執(zhí)行中斷向量表的分支轉(zhuǎn)移指令(BD 0F800H),使程序跳轉(zhuǎn)至0F800H處執(zhí)行自舉引導(dǎo)程序。自舉引導(dǎo)程序完成初始化后,讀取數(shù)據(jù)空間的0FFFFH地址的內(nèi)容,找到自舉表首地址8000H,從8000H處開始讀取內(nèi)容。首先是16位自舉標(biāo)記(10AA)。然后分別是寄存器SWWSR及BSCR的內(nèi)容、程序入口地址、代碼段長度、存放代碼段的目標(biāo)地址等信息。最后,根據(jù)這些信息把FLASH的8008H~811EH的程序搬運到片內(nèi)RAM的100H開始的地址中,跳轉(zhuǎn)至片內(nèi)RAM 100H,即PC為100H、XPC為0,開始執(zhí)行用戶程序,完成用戶程序的并行自舉過程。
    把程序燒寫入FLASH后,復(fù)位C5410,使其處于微計算機工作方式;使用示波器測試XF引腳,觀察程序運行正確與否。通過上述方法可完成C5410對Am29LV200B FLASH的燒寫,很好地實現(xiàn)C5410上電后的用戶程序自舉引導(dǎo)功能。
參考文獻(xiàn)
1 韋江維,寥義奎,農(nóng)建波等.TMS320VC5402 DSP的并行I/O引導(dǎo)裝載方法研究. 電子技術(shù)應(yīng)用,2000;15(8):42~44
2 韓 峰,侯亞峰,張 浩等.兩類DSP芯片的引導(dǎo)過程分析.電子技術(shù)應(yīng)用,2002;17(10):65~67
3 杜志秀. TMS320C542系統(tǒng)的最小硬件設(shè)計.微計算機信息,1999;15(6):62~64
4 TMS320VC5410 Fixed-Point Digital Signal Processor Data Manual. Texas Instrument, December. 2000
5 TMS320VC5410 Bootloader Application Report. Texas Instrument, April 2000
6 Am29LV200B Data Sheet.AMD, April 2002

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲黄色av| 欧美综合77777色婷婷| 国产真实乱偷精品视频免| 国产精品国产三级国产专播品爱网| 欧美高清视频在线观看| 久久精品亚洲一区| 久久激情五月婷婷| 欧美在线一二三| 欧美一区二区黄| 欧美亚洲视频在线观看| 欧美影院在线| 久久精品国产99| 久久久久久亚洲精品中文字幕 | 国产日韩综合| 国产欧美欧洲在线观看| 国产精品永久入口久久久| 国产精品午夜av在线| 国产精品免费观看在线| 国产精品你懂的| 国产日韩欧美一区二区| 国产亚洲欧美日韩精品| 韩国三级在线一区| 亚洲国产精品一区二区第一页 | 欧美日韩国内| 欧美午夜精品一区| 国产精品一区一区| 国模精品一区二区三区色天香| 狠狠色2019综合网| 亚洲成色www8888| 亚洲精品日产精品乱码不卡| 日韩亚洲视频在线| 亚洲自啪免费| 久久精彩视频| 99综合精品| 午夜精品美女久久久久av福利| 久久成年人视频| 另类激情亚洲| 欧美日韩国产影院| 国产精品视频1区| 韩国精品主播一区二区在线观看| 韩日午夜在线资源一区二区| 亚洲黄网站在线观看| 一片黄亚洲嫩模| 欧美一区影院| 9i看片成人免费高清| 亚洲欧美日本精品| 久久亚洲精品一区二区| 欧美精品在线免费观看| 国产精品久久久久久久久婷婷| 国产一区二区三区黄| 亚洲人成7777| 午夜精品亚洲一区二区三区嫩草| 久久精品国产99| 亚洲天堂av在线免费观看| 欧美一区二区在线免费观看| 欧美不卡三区| 国产精品av免费在线观看| 国产一区二区三区久久久久久久久 | 国产午夜一区二区三区| 91久久久久久国产精品| 亚洲一区亚洲| 亚洲日本中文字幕区| 亚洲综合好骚| 蜜乳av另类精品一区二区| 国产精品www色诱视频| 国产主播在线一区| 99这里只有久久精品视频| 久久成人国产| 亚洲欧美日韩国产成人精品影院| 久久午夜精品一区二区| 欧美性猛片xxxx免费看久爱 | 亚洲日本理论电影| 久久av免费一区| 亚洲免费在线精品一区| 欧美成人按摩| 国产日韩欧美不卡在线| 99国产成+人+综合+亚洲欧美| 亚洲大片一区二区三区| 午夜精品国产精品大乳美女| 欧美经典一区二区| 极品少妇一区二区三区| 亚洲调教视频在线观看| 999亚洲国产精| 免费观看在线综合| 国产一区二区精品久久91| 中日韩男男gay无套| 亚洲精品免费在线| 久久蜜桃资源一区二区老牛| 欧美日韩在线播放一区二区| 亚洲福利电影| 久久高清一区| 欧美一区二区日韩| 欧美手机在线| 日韩视频免费观看| 亚洲人成人一区二区在线观看 | 久久免费高清| 国产日韩欧美一区| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲激情影院| 亚洲国产人成综合网站| 久久激情综合| 国产欧美日韩亚洲精品| 亚洲一区免费网站| 亚洲综合欧美日韩| 欧美午夜免费| 一区二区三区久久网| 99精品欧美一区二区三区| 欧美96在线丨欧| 一色屋精品亚洲香蕉网站| 欧美在线一级va免费观看| 欧美主播一区二区三区| 国产精品久久久久久久app| 日韩视频免费看| 在线一区二区三区四区五区| 欧美久久婷婷综合色| 亚洲日本va午夜在线影院| 亚洲美女精品一区| 欧美另类高清视频在线| 亚洲精品护士| 日韩午夜在线视频| 欧美精品一区在线播放| 亚洲精品女av网站| 一区二区三区色| 欧美三级日本三级少妇99| 一本色道久久88精品综合| 亚洲一二三区视频在线观看| 欧美三区在线视频| 在线中文字幕一区| 性娇小13――14欧美| 国产欧美亚洲一区| 欧美伊人精品成人久久综合97| 久久免费少妇高潮久久精品99| 韩日在线一区| 亚洲美女在线看| 欧美日韩综合| 亚洲自拍偷拍麻豆| 久久天天综合| 亚洲国产成人久久| 一区二区高清视频| 国产精品日韩| 久久成人精品视频| 欧美国产一区二区三区激情无套| 亚洲精品之草原avav久久| 亚洲欧美日韩中文视频| 国产亚洲视频在线| 亚洲欧洲视频在线| 欧美日韩免费在线| 亚洲欧美在线aaa| 蜜桃av噜噜一区| 亚洲另类在线视频| 欧美一区观看| 亚洲高清一区二| 亚洲一区二区高清| 国产日产欧产精品推荐色| 亚洲国产专区校园欧美| 欧美日韩一区自拍| 欧美一区二区三区四区在线观看地址 | 欧美午夜视频| 欧美一区二区黄| 欧美国产亚洲另类动漫| 亚洲午夜影视影院在线观看| 久久久久久久综合| 亚洲免费观看高清在线观看 | 欧美激情一区二区| 亚洲一区影音先锋| 欧美 日韩 国产一区二区在线视频| 亚洲精品久久在线| 欧美伊人影院| 最新日韩在线视频| 欧美中在线观看| 亚洲三级电影全部在线观看高清| 亚洲欧美大片| 亚洲国产成人av好男人在线观看| 亚洲一区二区在线视频| 狠狠色狠狠色综合| 亚洲影音一区| 亚洲国产第一| 香蕉成人啪国产精品视频综合网| 亚洲电影av在线| 香蕉久久久久久久av网站| 亚洲电影激情视频网站| 午夜视频在线观看一区二区三区| 在线精品视频在线观看高清| 亚洲欧美日韩国产综合在线 | 亚洲肉体裸体xxxx137| 久久国产一区二区| 亚洲伦伦在线| 久久综合九色九九| 亚洲一区二区三区777| 欧美成在线视频| 亚欧成人在线| 欧美午夜无遮挡| 亚洲精品在线视频| 国内精品久久久久久| 亚洲欧美日韩专区| 亚洲精品在线观看免费| 久久综合九色九九| 亚洲婷婷国产精品电影人久久| 欧美成人综合| 久久精品视频免费|