《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 詳解LPC2104的Boot與Remap
詳解LPC2104的Boot與Remap
摘要: 為了解決上述處理器和非易失性存儲器之間速度不匹配的矛盾,工程師們在嵌入式系統領域內引用了Boot技術和Remap技術。而要正確理解Boot技術和Remap技術,必須先建立MemoryMap(存儲器映射)的概念。
關鍵詞: 接口IC LPC2104 Boot Remap ARM
Abstract:
Key words :

  引言

  隨著半導體工藝技術與處理器設計技術的不斷提高,嵌入式處理器的速度愈來愈快;而非易失性存儲器的讀取速度卻遠遠跟不上CPU的發展。傳統的單片機運行模式——機器代碼存儲在非易失性存儲器(如ROM,FLASH),在運行時由CPU直接從其中取出指令執行——逐漸顯得力不從心。如果繼續沿用傳統的程序運行模式,那么在絕大多數時間內高速CPU將處于空閑等待狀態,這既浪費了CPU的計算能力,也無法實現高密度數據流的實時處理與傳輸。而在短期之內,半導體工業界尚無法實現低成本的非易失性高速存儲器技術。為了解決上述處理器和非易失性存儲器之間速度不匹配的矛盾,工程師們在嵌入式系統領域內引用了Boot技術和Remap技術。而要正確理解Boot技術和Remap技術,必須先建立Memory Map(存儲器映射)的概念。

  技術概念描述

  Memory Map

  計算機最重要的功能單元之一是Memory。Memory是眾多存儲單元的集合,為了使CPU準確地找到存儲有某個信息的存儲單元,必須為這些單元分配一個相互區別的“身份證號”,這個“身份證號”就是地址編碼。在嵌入式處理器內,集成了多種類型的Memory,通常,我們稱同一類型的Memory為一個Memory Block。一般情況下,處理器設計者會為每一個Memory Block分配一個數值連續、數目與其存儲單元數相等、以16進制表示的自然數集合作為該Memory Block的地址編碼。這種自然數集合與Memory Block的對應關系,就是Memory Map(存儲器映射),有時也叫Address Map(地址映射)。實際上,Address Map在字面意義上更加貼切。

  需要強調的是,Memory Map是一個邏輯概念,是計算機系統在(上電)復位后才建立起來的。Memory Map相當于這樣一個數學函數:函數的輸入量是地址編碼,輸出量被尋址單元中的數據。當計算機系統掉電后或復位時,這個數學函數不復存在,只剩下計算機系統中實現這個數學函數的物理基礎——電路連接。也可以這樣認為:Memory Map是計算機系統(上電)復位時的預備動作,是一個將CPU所擁有的地址編碼資源向系統內各個物理存儲器塊分配的自動過程。

  Boot/Bootload

  Boot在計算機專業英文中的意思是“引導”,它是計算機系統(上電)復位后CPU的第一個機器動作。那么,Boot引導的是什么呢?簡要地說,Boot就是引導CPU如何裝入機器指令。最簡單的Boot動作就是8位單片機系統復位后從復位向量中取出跳轉指令,轉移到用戶程序代碼段執行的這個過程。

  通常,在計算機系統中,(上電)復位后除了執行Boot動作,還跟隨著一個Load過程。一般情況下,該Load從低速非易失性存儲器中“搬運”一些數據到高速易失性存儲器中。Boot和Load連續執行,一氣呵成,我們稱之為Bootload。最典型的例子之一就是DSP實時信號處理系統,系統上電后,將存儲在EEPROM中的實時信號處理程序復制到系統的RAM中,然后CPU直接從RAM中讀取機器指令運行。

  Remap

  Remap與計算機的異常處理機制是緊密相關的。

  完整的計算機系統必須具備異常處理能力。當異常產生時,CPU在硬件驅動機制下跳轉到預先設定的存儲器單元中,取出相應的異常處理程序的入口地址, 并根據該入口地址進入異常處理程序。這個保存有異常處理程序入口地址的存儲器單元就是通常所說的“異常入口”,單片機系統中也叫“中斷入口”。實際的計算機系統有多種類型的異常,CPU設計人員為了簡化芯片設計,一般將所有的異常入口集中起來置于非易失性存儲器中,并在系統上電時映射到一個固定的連續地址空間上。位于這個地址空間上的異常入口集合就是“異常向量表”。

  系統上電后的異常向量表是從低速非易失性存儲器映射得到的。隨著處理器速度的不斷提高,很自然地,人們希望計算機系統在異常處理時也充分發揮出CPU的處理能力,而非易失性存儲器的讀取速度使得CPU只能以多個空閑等待同期來獲取異常向量,這樣就限制了CPU計算能力的充分發揮。尤其是非易失性存儲器位寬小于CPU位寬時,這種負面的影響更加明顯。于是,Remap技術被引入,以提高系統對異常的實時響應能力。

  從Remap這個英文單詞的構成不難看出,它是對此前已確立的存儲器映射的再次修改。從本質上講,Map和Remap是一樣的,都是將地址編碼資源分配給存儲器塊,只不過二者產生的時間不同:前者在系統上電的時刻發生,是任何計算機系統都必需的;而后者在系統上電后穩定運行的時刻發生,對計算機系統設計人員來說是可選的。典型的8位單片機系統中,就沒有使用Remap技術。

  完整的Remap過程實際上通常始于系統的Bootload過程。具體執行動作為:Bootload將非易失性存儲器中的異常向量復制到高速易失性存儲器塊的一端,然后執行Remap命令,將位于高速易失性存儲器中的異常向量塊映射到異常向量表地址空間上。此后,系統若產生異常,CPU將從已映射到異常微量表地址空間的高速非易失性存儲器中讀取異常向量。具體到典型的ARM7嵌入式系統中,就是由Bootload程序將片內或片外的Flash/ROM中的異常向量復制到片內的SRAM中指定的存在器單元中,然后再執行Remap命令。由于片內的SRAM數據位寬通常與CPU數據位寬相等,因而CPU可以無等待地全速跳入異常處理程序,獲得最佳的實時異常響應。

  LPC2000的Boot和Remap解析

  從上面的技術描述中可知,典型的Boot、Memory Map和Remap的時間順序應該是:Memory Map-〉Boot-〉Remap。但是,LPC2000處理器中這三個動作的順序卻有一點不同,依次為Memory Map-〉Remap-〉Boot-〉Remap,最后一個Remap過程是用戶可選的,可執行也可不執行。每當系統復位以后,LPC2000處理器就順次執行上述四個過程,下面分析這幾個階段。為簡化起見,以總線不開放的LPC2104處理器為例。

  LPC2106的片上存儲器分類

  LPC2104片內的存儲器類型只有兩種:Flash塊和SRAM塊。其中,部分Flash存儲器塊在芯片出廠前由Philips寫入了Bootload程序和64字節的異常向量表。為方便討論,我們稱這部分Flash塊為Bootload子塊,其大小為8KB。如前所述,在處理器未上電之前或復位時,Flash塊和SRAM塊僅僅是兩個沒有地址編碼的物理存儲器,與地址編碼尚未建立起實際的映射關系。

  Memory Map

  LPC2104處理器(上電)復位以后,Flash塊和SRAM塊的地址映射結果為:SRAM占據0x40000000—0x40003FFF范圍的地址編碼空間;Flash占據0x00000000—0x0001FFFF范圍的地址編碼空間。該映射結果是個中間態,只存在極短的時間,應用系統開發人員無法看到這個中間態。處理器內核外圍模塊的地址映射結果為0xE0000000—0xFFFFFFFF。

  

  Remap

  Memory Map完成以后,緊接著LPC2104會作一次Remap,這次Remap操作的對象是Bootload子塊,由處理的內部硬件邏輯執行完成,不受開發人員的控制。經過Remap后,Bootload子塊被整體Remap到了0x7FFFE000—0x7FFFFFFF的片內高地址內存空間;同時,原Memory Map后占用0x00000000—0x0000003F地址空間的那部分64 字節大小的Flash子塊被暫時注銷映射關系,由Bootload子塊中的異常向量部分取而代之。

  至此,Flash塊對內存地址空間的占用情況如下:

  1、除去因Remap被暫時注銷了映射關系的那小部分64字節的Flash子塊外,Flash塊作為一個整體占用的地址編碼空間為0x00000040—0x0001FFFF;

  2、同時,Bootload子塊又占用了0x7FFFE000—0x7FFFFFF的地址編碼空間,Bootload子塊中的異常向量表部分占用了0x00000000—0x0000003F。

  因此,Bootload子塊中的異常向量表部分實際上是占用了重復占用了三段地址編碼空間:0x00000000—0x0000003F、0x0001E000—0x0001E03F以及0x7FFFE000—0x7FFFE03F。

  圖2中,存儲器的映射順序為:Memory Map-〉Reset Remap-〉Bootload Remap。

  SRAM塊和內核外圍模塊的映射關系在Remap之后保持不變,可參見圖1。

  * - 本貼最后修改時間:2005-3-10 17:31:19 修改者:andrewpei

  * - 修改原因:Append

  

  引言

  隨著半導體工藝技術與處理器設計技術的不斷提高,嵌入式處理器的速度愈來愈快;而非易失性存儲器的讀取速度卻遠遠跟不上CPU的發展。傳統的單片機運行模式——機器代碼存儲在非易失性存儲器(如ROM,FLASH),在運行時由CPU直接從其中取出指令執行——逐漸顯得力不從心。如果繼續沿用傳統的程序運行模式,那么在絕大多數時間內高速CPU將處于空閑等待狀態,這既浪費了CPU的計算能力,也無法實現高密度數據流的實時處理與傳輸。而在短期之內,半導體工業界尚無法實現低成本的非易失性高速存儲器技術。為了解決上述處理器和非易失性存儲器之間速度不匹配的矛盾,工程師們在嵌入式系統領域內引用了Boot技術和Remap技術。而要正確理解Boot技術和Remap技術,必須先建立Memory Map(存儲器映射)的概念。

  技術概念描述

  Memory Map

  計算機最重要的功能單元之一是Memory。Memory是眾多存儲單元的集合,為了使CPU準確地找到存儲有某個信息的存儲單元,必須為這些單元分配一個相互區別的“身份證號”,這個“身份證號”就是地址編碼。在嵌入式處理器內,集成了多種類型的Memory,通常,我們稱同一類型的Memory為一個Memory Block。一般情況下,處理器設計者會為每一個Memory Block分配一個數值連續、數目與其存儲單元數相等、以16進制表示的自然數集合作為該Memory Block的地址編碼。這種自然數集合與Memory Block的對應關系,就是Memory Map(存儲器映射),有時也叫Address Map(地址映射)。實際上,Address Map在字面意義上更加貼切。

  需要強調的是,Memory Map是一個邏輯概念,是計算機系統在(上電)復位后才建立起來的。Memory Map相當于這樣一個數學函數:函數的輸入量是地址編碼,輸出量被尋址單元中的數據。當計算機系統掉電后或復位時,這個數學函數不復存在,只剩下計算機系統中實現這個數學函數的物理基礎——電路連接。也可以這樣認為:Memory Map是計算機系統(上電)復位時的預備動作,是一個將CPU所擁有的地址編碼資源向系統內各個物理存儲器塊分配的自動過程。

  Boot/Bootload

  Boot在計算機專業英文中的意思是“引導”,它是計算機系統(上電)復位后CPU的第一個機器動作。那么,Boot引導的是什么呢?簡要地說,Boot就是引導CPU如何裝入機器指令。最簡單的Boot動作就是8位單片機系統復位后從復位向量中取出跳轉指令,轉移到用戶程序代碼段執行的這個過程。

  通常,在計算機系統中,(上電)復位后除了執行Boot動作,還跟隨著一個Load過程。一般情況下,該Load從低速非易失性存儲器中“搬運”一些數據到高速易失性存儲器中。Boot和Load連續執行,一氣呵成,我們稱之為Bootload。最典型的例子之一就是DSP實時信號處理系統,系統上電后,將存儲在EEPROM中的實時信號處理程序復制到系統的RAM中,然后CPU直接從RAM中讀取機器指令運行。

  Remap

  Remap與計算機的異常處理機制是緊密相關的。

  完整的計算機系統必須具備異常處理能力。當異常產生時,CPU在硬件驅動機制下跳轉到預先設定的存儲器單元中,取出相應的異常處理程序的入口地址, 并根據該入口地址進入異常處理程序。這個保存有異常處理程序入口地址的存儲器單元就是通常所說的“異常入口”,單片機系統中也叫“中斷入口”。實際的計算機系統有多種類型的異常,CPU設計人員為了簡化芯片設計,一般將所有的異常入口集中起來置于非易失性存儲器中,并在系統上電時映射到一個固定的連續地址空間上。位于這個地址空間上的異常入口集合就是“異常向量表”。

  系統上電后的異常向量表是從低速非易失性存儲器映射得到的。隨著處理器速度的不斷提高,很自然地,人們希望計算機系統在異常處理時也充分發揮出CPU的處理能力,而非易失性存儲器的讀取速度使得CPU只能以多個空閑等待同期來獲取異常向量,這樣就限制了CPU計算能力的充分發揮。尤其是非易失性存儲器位寬小于CPU位寬時,這種負面的影響更加明顯。于是,Remap技術被引入,以提高系統對異常的實時響應能力。

  從Remap這個英文單詞的構成不難看出,它是對此前已確立的存儲器映射的再次修改。從本質上講,Map和Remap是一樣的,都是將地址編碼資源分配給存儲器塊,只不過二者產生的時間不同:前者在系統上電的時刻發生,是任何計算機系統都必需的;而后者在系統上電后穩定運行的時刻發生,對計算機系統設計人員來說是可選的。典型的8位單片機系統中,就沒有使用Remap技術。

  完整的Remap過程實際上通常始于系統的Bootload過程。具體執行動作為:Bootload將非易失性存儲器中的異常向量復制到高速易失性存儲器塊的一端,然后執行Remap命令,將位于高速易失性存儲器中的異常向量塊映射到異常向量表地址空間上。此后,系統若產生異常,CPU將從已映射到異常微量表地址空間的高速非易失性存儲器中讀取異常向量。具體到典型的ARM7嵌入式系統中,就是由Bootload程序將片內或片外的Flash/ROM中的異常向量復制到片內的SRAM中指定的存在器單元中,然后再執行Remap命令。由于片內的SRAM數據位寬通常與CPU數據位寬相等,因而CPU可以無等待地全速跳入異常處理程序,獲得最佳的實時異常響應。

  LPC2000的Boot和Remap解析

  從上面的技術描述中可知,典型的Boot、Memory Map和Remap的時間順序應該是:Memory Map-〉Boot-〉Remap。但是,LPC2000處理器中這三個動作的順序卻有一點不同,依次為Memory Map-〉Remap-〉Boot-〉Remap,最后一個Remap過程是用戶可選的,可執行也可不執行。每當系統復位以后,LPC2000處理器就順次執行上述四個過程,下面分析這幾個階段。為簡化起見,以總線不開放的LPC2104處理器為例。

  LPC2106的片上存儲器分類

  LPC2104片內的存儲器類型只有兩種:Flash塊和SRAM塊。其中,部分Flash存儲器塊在芯片出廠前由Philips寫入了Bootload程序和64字節的異常向量表。為方便討論,我們稱這部分Flash塊為Bootload子塊,其大小為8KB。如前所述,在處理器未上電之前或復位時,Flash塊和SRAM塊僅僅是兩個沒有地址編碼的物理存儲器,與地址編碼尚未建立起實際的映射關系。

  Memory Map

  LPC2104處理器(上電)復位以后,Flash塊和SRAM塊的地址映射結果為:SRAM占據0x40000000—0x40003FFF范圍的地址編碼空間;Flash占據0x00000000—0x0001FFFF范圍的地址編碼空間。該映射結果是個中間態,只存在極短的時間,應用系統開發人員無法看到這個中間態。處理器內核外圍模塊的地址映射結果為0xE0000000—0xFFFFFFFF。

  

  Remap

  Memory Map完成以后,緊接著LPC2104會作一次Remap,這次Remap操作的對象是Bootload子塊,由處理的內部硬件邏輯執行完成,不受開發人員的控制。經過Remap后,Bootload子塊被整體Remap到了0x7FFFE000—0x7FFFFFFF的片內高地址內存空間;同時,原Memory Map后占用0x00000000—0x0000003F地址空間的那部分64 字節大小的Flash子塊被暫時注銷映射關系,由Bootload子塊中的異常向量部分取而代之。

  至此,Flash塊對內存地址空間的占用情況如下:

  1、除去因Remap被暫時注銷了映射關系的那小部分64字節的Flash子塊外,Flash塊作為一個整體占用的地址編碼空間為0x00000040—0x0001FFFF;

  2、同時,Bootload子塊又占用了0x7FFFE000—0x7FFFFFF的地址編碼空間,Bootload子塊中的異常向量表部分占用了0x00000000—0x0000003F。

  因此,Bootload子塊中的異常向量表部分實際上是占用了重復占用了三段地址編碼空間:0x00000000—0x0000003F、0x0001E000—0x0001E03F以及0x7FFFE000—0x7FFFE03F。

  圖2中,存儲器的映射順序為:Memory Map-〉Reset Remap-〉Bootload Remap。

  SRAM塊和內核外圍模塊的映射關系在Remap之后保持不變,可參見圖1。

  * - 本貼最后修改時間:2005-3-10 17:31:19 修改者:andrewpei

  * - 修改原因:Append

  

  Boot

  LPC2104有效的異常向量表地址編碼空間是0x00000000—0x0000003F(嚴格來說應該是0x00000000—0x0000001F)。處理器復位后的Boot動作就是從0x00000000處起始字中取出跳轉指令,開始程序的執行。由于處理器復位后,映射到0x00000000—0x0000003F地址空間的異常向量表源于Bootload子塊,因此CPU實際上開始執行的是Philips在芯片出廠前寫入的Bootload程序。

  進入Bootload后,程序首先檢查看門狗溢出標志是否置位。

  若看門狗溢出標志置位,則表明當前的系統復位是內部軟復位,CPU下一步將對Flash塊中的異常向量表進行加和校驗。如果加和檢驗結果為零,Bootload程序將撤銷Bootload子塊中異常向量表部分在0x00000000—0x00000003F地址空間上的映射,恢復Flash塊的異常向量表在這64字節地址空間上的映射關系(如圖3),然后跳轉到異常向量表地址0x00000000處轉入用戶程序的執行。如果加和校驗結果不為零,Bootload程序將進行UART0接口的波特率自動偵測,隨時響應ISP宿主機的編程請求,執行處理器芯片的ISP編程工作。

  

  若Bootload沒有發現看門狗溢出標志置位,則表明當前的系統復位是外部硬復位,CPU將采樣P0.14引腳的外部邏輯電平輸入。如果為0,Bootload執行UART0的自動波特率偵測,隨時響應ISP宿主機的編程請求;如果為1,Bootload的后續動作將與前面檢測到看門狗溢出標志置位的程序執行完全相同。

  

  Remap(可選)

  最后這一步可選的Remap動作完全處于用戶的控制之下,Remap的對象是片內SRAM存儲器塊的異常向量部分,共計64字節大小。用戶可以編程決定何時Remap、Remap之后是否再修改異常向量表以及如何修改異常向量表等等。需要強調的是,引發Remap動作的指令與建立SRAM塊中異常向量的所有功能代碼全部駐留在Flash塊的用戶編程區中,是用戶應用軟件的一部分。

  曾經有網友對Philips在LPC2000系列處理器中引入這個可選的Remap功能提出質疑:LPC2000系列處理器片內的Flash塊被分割成了兩組,每組都配備了相互獨立的128位寬度的讀取緩沖,在絕大多數情況下,CPU從Flash塊的訪問是全速進行的,不存在有等待的狀況;另一方面,一般應用LPC2000的嵌入式系統并不需要動態地改變異常向量表。因此,對片內SRAM進行Remap后,并不能提高處理器對異常的響應能力,實際意義不大。

  事實上,LPC2000系列處理器引入SRAM的Remap功能對于IAP操作具有重要的意義。相對于其它基于ARM7DMI內核的處理器而言,LPC2000系列處理器有一個獨具特色的功能—IAP。在IAP擦除/寫入操作時,片上Flash塊,包括該塊上的異常向量部分,是無法被訪問讀取的,為了在IAP擦除/寫入操作時有效地響應異常,必須在調用IAP擦除/寫入操作之前,將SRAM中的異常向量部分提前映射到系統的異常向量表地址空間上。(待續)

  

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲婷婷在线| 久久视频在线看| 久久精品欧美日韩| 欧美亚洲综合另类| 亚洲一区二区三区午夜| 亚洲精品四区| 日韩一区二区免费看| 日韩网站在线| 亚洲精选成人| 99在线观看免费视频精品观看| 亚洲精品1234| 亚洲毛片一区| 一本综合精品| 亚洲综合电影| 先锋影音网一区二区| 亚洲欧美日韩区| 先锋影音久久久| 久久国产精品一区二区三区四区| 欧美在线播放高清精品| 亚洲第一黄色| 最新日韩中文字幕| 日韩亚洲一区二区| 中日韩在线视频| 亚洲欧美制服另类日韩| 午夜一区二区三区不卡视频| 香蕉免费一区二区三区在线观看 | 狼人天天伊人久久| 欧美国产精品人人做人人爱| 欧美日本三区| 国产精品www网站| 国产精品视频xxxx| 国内综合精品午夜久久资源| 亚洲国产精品欧美一二99| 亚洲精品一二| 亚洲男女自偷自拍图片另类| 欧美在线在线| 99在线精品视频| 性刺激综合网| 久热精品视频在线观看| 欧美日韩国产精品成人| 国产精品国产三级国产aⅴ无密码| 国产精品久久一区二区三区| 国产亚洲激情视频在线| 亚洲福利一区| 亚洲五月婷婷| 亚洲大片免费看| 亚洲网站视频| 久久久久久亚洲精品杨幂换脸| 免费中文日韩| 国产精品久久福利| 国产自产女人91一区在线观看| 91久久国产综合久久91精品网站| 中文在线资源观看网站视频免费不卡 | 午夜精品久久久久久久男人的天堂| 久久久久久电影| 欧美国产日韩一区二区| 国产精品美女999| 亚洲高清不卡一区| 亚洲综合电影一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4 | 国产在线不卡视频| 亚洲精品视频在线观看免费| 午夜精品福利电影| 亚洲六月丁香色婷婷综合久久| 午夜精品99久久免费| 欧美99久久| 国产伦精品一区二区三| 最新国产乱人伦偷精品免费网站| 亚洲一区二区三区在线观看视频 | 亚洲性图久久| 美女尤物久久精品| 国产精品香蕉在线观看| 亚洲国产精品一区二区尤物区| 亚洲欧美激情一区二区| 日韩性生活视频| 久久麻豆一区二区| 国产精品美女久久久浪潮软件| 亚洲激情在线观看视频免费| 欧美在线免费看| 亚洲宅男天堂在线观看无病毒| 欧美gay视频激情| 国产午夜精品理论片a级大结局| 亚洲精品欧美日韩| 亚洲电影在线免费观看| 亚洲欧美成人| 欧美日韩网址| 亚洲日本va午夜在线影院| 久久成人精品电影| 欧美一级午夜免费电影| 欧美日韩中文字幕在线| 亚洲国产成人tv| 亚洲高清av| 久久久久久久综合狠狠综合| 国产精品亚洲综合一区在线观看| 一本综合久久| 亚洲色图自拍| 欧美乱大交xxxxx| 亚洲国产高潮在线观看| 亚洲电影成人| 久久久久久夜| 国产日韩精品在线| 亚洲一级二级| 亚洲综合电影一区二区三区| 欧美精品在线免费观看| 亚洲国产另类久久精品| 亚洲国产精品精华液2区45| 久久欧美肥婆一二区| 国产午夜精品一区二区三区视频 | 欧美成年网站| 亚洲福利视频免费观看| 亚洲黄色在线看| 另类亚洲自拍| 在线看日韩欧美| 亚洲国产婷婷| 免费永久网站黄欧美| 亚洲第一在线综合网站| 亚洲人成7777| 欧美精品v日韩精品v韩国精品v| 91久久精品国产91久久| 亚洲精品少妇| 欧美久久久久久久久| 亚洲精品一二三区| 亚洲午夜精品一区二区三区他趣 | 亚洲黄色成人网| 亚洲精品一区二区在线观看| 欧美夫妇交换俱乐部在线观看| 伊人久久大香线| 久久精品一二三区| 久热国产精品| 亚洲欧洲一区二区在线播放| 日韩视频在线一区| 欧美午夜精品一区二区三区| 亚洲尤物在线| 久久精品观看| 在线观看91精品国产麻豆| 亚洲精品国产精品国自产在线| 欧美精品久久久久久久久久| 日韩一级精品| 香港久久久电影| 国产一区二区精品丝袜| 亚洲高清网站| 欧美日本中文字幕| 国产精品99久久久久久白浆小说| 欧美一区二区视频网站| 激情欧美日韩| 日韩亚洲精品视频| 国产精品美女久久久浪潮软件| 欧美一级久久久| 欧美高清自拍一区| 宅男在线国产精品| 久久福利一区| 影音先锋另类| 亚洲午夜精品一区二区三区他趣| 国产欧美日韩在线视频| 亚洲成色www久久网站| 欧美日韩精品免费| 亚洲女性裸体视频| 欧美1区3d| 亚洲性图久久| 美女视频黄 久久| 亚洲视频专区在线| 久久偷窥视频| 99av国产精品欲麻豆| 久久精品日产第一区二区三区| 亚洲激情视频在线播放| 性色av一区二区三区| 一区二区在线视频| 亚洲影院免费观看| 精品不卡视频| 久久午夜精品| 日韩一级精品| 国产精品乱码人人做人人爱| 欧美中文在线免费| 欧美色另类天堂2015| 久久精品亚洲一区二区三区浴池| 欧美日韩福利视频| 欧美夜福利tv在线| 欧美日韩午夜精品| 久久精品亚洲精品| 欧美性色aⅴ视频一区日韩精品| 亚洲二区在线| 欧美日韩在线视频一区二区| 久久国产精品免费一区| 国产精品s色| 亚洲日本视频| 国产美女一区二区| 一区二区三区久久| 精品成人乱色一区二区| 午夜在线a亚洲v天堂网2018| 亚洲激情另类| 久久一区视频| 亚洲欧美日韩中文播放| 欧美另类亚洲| 亚洲国产欧美另类丝袜| 国产精品久久久久久影视| 亚洲最新视频在线| 在线欧美小视频| 久久久国产亚洲精品| 亚洲永久精品大片| 欧美日韩另类视频|