《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 基于ARM9的嵌入式系統設計及EPA設備實現的研究

基于ARM9的嵌入式系統設計及EPA設備實現的研究

2009-05-21
作者:鄧俊華, 杜玉曉, 董 建

??? 摘 要:針對EPA設備需要滿足工業上實時性要求及與其他設備協調地工作等問題,研究了ARM微處理器和Linux操作系統的關鍵技術,設計以ARM微處理器為核心、Linux操作系統為軟件平臺的嵌入式系統。以ARM微處理器為核心的嵌入式系統應用于EPA設備能夠滿足工業實時性要求,并提供豐富的外圍接口,為EPA設備的進一步開發奠定了基礎。
??? 關鍵詞:EPA;嵌入式系統;Linux;文件系統;設備驅動

?

??? 嵌入式系統與Intenret技術的結合己經成為未來嵌入式系統的發展趨勢,而基于ARM的嵌入式系統由于其低功耗、低成本、高性能等優勢己經廣泛地應用于工業控制領域。而與此同時,Linux由于性能優越、支持硬件平臺廣泛、源代碼公開、具有極強的網絡功能等優點成為設計嵌入式系統一種很好的選擇。
??? 本文從嵌入式系統的硬件電路和軟件開發兩個方面進行設計。在硬件設計上采用Atmel公司生產的AT91RM 9200微處理器為CPU,選用8 MB的Flash和32 MB的SDRAM作為系統存儲器,擴展了以太網接口、串行接口等外圍通信設備以及輸入輸出接口,根據處理器和其他接口芯片的要求設計了電源電路、晶振電路、Flash及SDRAM存儲器接口電路、以太網接口電路、串行接口電路和擴展I/O接口電路。使用4層貼片工藝設計了系統PCB印刷電路板,焊接和安裝了貼片元件,并進行了電路調試等過程。在軟件設計上基于Linux操作系統,分析了Linux操作系統的引導程序(Bootloader)的結構、工作流程及內核的啟動過程; Bootloader移植和內核裁剪技術,移植了嵌入式Linux的引導過程;Linux文件系統的結構、根文件系統的層次和文件的管理方法;Linux設備管理方法和設備驅動程序的中斷實現方法;Linux字符設備各驅動程序設計技術;編寫了A/D轉換的驅動程序和外擴I/O接口的驅動程序。
1 嵌入式EPA設備硬件設計
1.1 EPA設備結構框架

??? EPA(Ethenret for plant Au tomation)設備是基于工業以太網技術的分布式控制系統的底層設備,該設備具有模擬量輸入輸出、開關量輸入輸出和1個l0Mb/s的以太網接口、1個RS485的通信接口。通過以太網及RS485通信方式,EPA設備在現場中既可作為主設備也可作為從設備,可方便地與其他設備進行通信。EPA設備的硬件結構圖如圖1所示。

?


??? 原有的EPA設備以Z-World公司的RCM2210處理器為核心,完成電流、電壓、溫度傳感器信號的輸入,標準電流信號的輸出和開關量電流輸出的功能。由于RCM2210是以8位微處理器為基礎并且可以使用的V0口資源有限,因此,對模塊的速度以及功能擴展有很大的限制。
??? 本文的主要目的就是設計以32位微處理器AT91RM 9200為CPU外擴Flash、SDRAM存儲器和以太網接口的嵌入式系統來代替RCM22100處理器。AT91RM 9200的主頻達到180MHz時,其性能可以高達200MIP,這樣的處理速度可以更好地滿足工業上對實時性的要求。同時AT91RM9200有豐富的外圍接口,為模塊的功能擴展提供了更大的空間。
1.2 基于ARM的嵌入式系統硬件結構
??? 嵌入式系統的硬件結構如圖2所示,主要由以下各部分組成:

?


??? (1) 電源電路:輸入5V,經過DC-DC變換轉換為1.8V和3.3V,給系統內各器件提供工作電壓。
??? (2) 晶振電路:18.432 MHz有源晶振經過倍頻分別為ARM940T核/系統提供180 MHz的時鐘頻率。
??? (3) 微處理器: AT91RM9200是系統的工作和控制中心。
??? (4) Flash:可存放引導程序、嵌入式操作系統、用戶應用程序或其他在系統掉電后需要保存的數據。
??? (5) SDRAM: 是系統代碼的運行場所。
??? (6) 網絡端口: 10/100(Mb/s)速率的RJ45接口,為系統提供以太網接入的物理通道。
??? (7) 串行接口:用于AT91RM9200系統短距離雙向串行通信。
1.3 以太網接口電路
??? 作為一款優秀的網絡控制器,基于AT91RM9200的系統若沒有以太網接口,就會大大降低其應用價值,因此就整個系統而言,以太網接口電路應是必不可少的,但同時相對較復雜。從硬件的角度看,以太網接口電路主要由MAC控制器和物理層接口兩大部分構成。
??? AT91RM9200微處理器內嵌一個以太網控制器,支持媒體獨立接口MII(Media Independent Interface),可在半雙工或全雙工模式下提供l0/100(Mb/s)的以太網接入。在本設計中,使用DAVICOM公司的DM9161作為以太網的物理層接口;DM9161是一款低功耗、高性能的CMOS芯片,支持10M 和100M的以太網傳輸,它起編碼、譯碼輸入和輸出數據的作用[1]。提供了IEEE802.3標準定義的MII,它包括接收數據總線和發送數據總線,來控制物理層和MAC的數據傳輸;使用一個簡單的兩線制串行接口來通過MII控制物理層并接收來自物理層的信息,其串行控制接口包括數據時鐘(MDC)和數據輸入輸出(MDIO);Mil串行管理包括1個數據接口、基本寄存器設置和1個針對寄存器設置的串行接口。通過這個接口可以控制和配置很多物理層設備,得到狀態和錯誤信息,并且確定PHY設備的工作方式和功能。
2 基于嵌入式Linux的EPA設備軟件設計
??? 由于Linuxr遵循GPL,所以任何對Linux定制于嵌入式設備感興趣的人都可以從Internet免費下載其內核和應用程序,并開始移植或開發,按照實際需要增減系統內核。
??? 一個小型的嵌入式Linux系統需要下面3個基本元素:引導實用程序;Linux微內核(由內存管理、進程管理和定時服務構成);初始化過程。要實現最低限度的工作能力,還需添加:硬件驅動程序、1個或多個應用進程,以提供所需功能。隨著要求的增加,可能還需要:1個文件系統(可以是在ROM或者是RAM里);1個圖形用戶接口(GUI);TCP/IP網絡棧。由此可以歸納構建嵌入式Linux的步驟為[2]:
??? (1) 編寫Bootloader用于加載嵌入式Linux內核到內存中。
??? (2) 重新編譯Linux內核,去掉內核中不需要的模塊。
??? (3) 構建文件系統。
??? (4) 運行應用程序。
??? 可從以上4方面構建符合自已要求的嵌入式Linux的方法。嵌入式執行流程如圖3所示。

?

?

2.1 引導加載程序
??? 嵌入式Linux系統的引導過程如下:
??? (1) 處理器重新啟動后,首先執行啟動代碼以初始化內存控制器以及片上設備,然后配置存儲映射。
??? (2) 引導加載程序(Bootloader)把內核從Flash等固態存儲設備加載到RAM,然后跳轉到內核的第一條指令處執行。
??? (3) 內核首先配置微處理器的寄存器,然后調用start-kernel(它是與微處理器體系結構無關的開始點)。
??? (4) 內核初始化高速緩存和各種硬件設備。
??? (5) 內核掛裝根文件系統。
??? (6) 內核執行init進程。
??? (7) init進程加載運行時共享庫,讀取其配置文件。
??? (8) init最后進入用戶會話階段。
??? 在此過程中引導加載程序的作用是非常重要的。
2.2 嵌入式Linux內核配置
??? 內核是一個操作系統的核心,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。Linux的核心是vmlinuz文件,該文件控制著整套系統,通常在根目錄下。
??? 為了正確合理地設置內核編譯配置選項,使制定編譯的內核運行更快并且系統能夠擁有更多的內存,因此需對內核進行剪裁,只編譯系統需要的功能代碼。配置完成后保存配置退出,執行內核編譯:
??? make dep
??? make zImage
其中,make dep命令用作建立內核源碼的依存關系,make zImage用于建立內存內核映像。編譯成功后會在linux/arch/arm/boot/下獲得編譯好的Linux內核映像zImage。
??? 在編譯內核文件之前首先要修改根目錄下的Makefile文件,在該文件中制定系統構架和交叉編譯器:ARCH=arm、CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-(交叉編譯器所在路徑)[3-4]。Linux內核提供多種配置工具,其中,make menuconfig是以curses為基礎的、終端式的配置菜單。在該配置菜單中可以選擇目標系統的類型等,內核配置結束后會生成.config文件,它保存了配置信息。
2.3 嵌入式Linux文件系統
??? Linux文件系統的層次結構如圖4所示[5]。其中,虛擬文件系統VFS(Virtual Filesystem Switch)為用戶程序提供一個統一的、抽象的、虛擬的文件系統界面,使用戶程序可以通過同一個文件系統操作界面及對各種不同的文件系統進行操作,這樣Linux可支持多種不同的文件系統。不同的文件系統通過不同的程序來實現其各種功能,但是與VFS之間的界面則是有明確定義的。這個界面就是file_operation數據結構。每種文件系統都有自已的file_operation[6-7]

?


??? 本文件系統使用的根文件系統是Ext2。Ext2是Linux中使用最多的文件系統,因為它是專門為Linux設計的,擁有最快的速度和最小的CPU占有率。
2.4 系統運行
2.4.1 minicom的建立

??? 本系統的PC機通過Linux下的minicom與嵌入式系統通信,它為兩者間通信提供操作的界面。minicom相當于Windows下的超級終端,可通過串口與目標板通信。minicom的設置為:波特率為115 200 b/s,數據位為8位,無奇偶校驗,停止位為1,無數據流控制。
2.4.2 啟動U-Boot
??? U-Boot燒寫進Flash后,當系統啟動時,系統會自動從Flash啟動,運行U-Boot。
2.4.3 下載Linux操作系統
??? 在下載操作系統之前,首先用網線(交叉)直接把目標板和PC機相連,設置PC機的IP地址為192.168.0.2,并調試好tftp功能。然后在U-Boot的命令行鍵入如下命令[8]:
??? Uboot>protect off all ????????????????????? ;把Flash寫保護去掉
??? Uboot>setenv ethaddr 12:34:56:78:9a:bc?????????????? ;設置目標板的MAC地址
??? Uboot>saveenv???????????????????????????????????????????????? ;保存參數
??? 環境變量設置好后就可以使用tftp下載內核和文件系統:
??? Uboot>tftp 0x20008000 zImage??????????????? ;下載Linux內核
??? Uboot>tftp 0x21000000 ramdisk.gz??????????????????? ;下載Linux文件系統
??? Uboot2.4.4 運行應用程序
??? (1) 當應用程序在調試階段時可以通過tfp方式來運行程序。目標板上的Linux操作系統正常啟動后首先要設置好目標板的IP地址為192.168.0.2,其命令如下:
??? $ ifconfig eth 192.168.0.2
然后在minicom的命令行下鍵入如下命令登錄tfp服務器(設tfp服務器的IP地址為192.168.0.1):
??? $ ftp 192.168.0.1
鍵入該命令后輸入Linux服務器的用戶名,并在Password后面輸入密碼后回車,這時可以使用ls、cd等命令顯示服務器上的文件并進入相應的目錄。最后使用get命令就可以把所需要的程序下載到目標板上。
??? (2) 如果應用程序調試完畢,就要把編輯好的程序放到目標板的文件系統中。重新創建文件系統的方法如下:
??? $ gunzip ramdisk.gz???????????? ;解壓縮原有的文件系統
??? $ mount –o loop ramdisk /mnt/newramdisk?????? ;解壓后的文件系統映像掛在到指定的目錄上
??? $ cd/mnt/newramdisk???????????????????????? ;進入/newramdisk目錄進行操作,隨意增減文件
??? 添加好自已的應用程序后修改etcrc.d下的rc文件,它是系統啟動后自動調用的應用程序。
??? 以上步驟完成后卸載文件系統映像,并重新壓縮:
??? $ umount /mnt/newramdisk
??? $ gzip –c –v9 ramdisk>./newramdisk
3 嵌入式Linux驅動程序設計
??? 本文主要完成了EPA設備驅動程序的模擬量輸入及開關量輸入輸出的驅動程序。
3.1 模擬量輸入驅動程序設計
??? EPA設備具有多路模擬量輸入測量通道,輸入信號經過適當的處理,進入到24位A/D轉換器CS5522,轉換后的數據會通過SPI接口輸出給處理器。該功能的驅動程序的主要任務是合理地配置AT91RM 9200的SPI接口,使其能夠正確地與A/D轉換器CS5522進行數據通信。
??? AT91RM 9200提供了很多寄存器用于控制SPI的操作,因此,在編寫驅動程序之前要先定義與SPI操作有關的變量。定義指向SPI寄存器的結構體的代碼如下:
??? AT91PS_SPI controller=(AT91PS_SPI)AT91C_VA-BASE_SPI
其中,AT91PS_SPI在linuxincludeasm-armarch-at91rm9200A T91RM9200_SPI.h中定義,用于指向SPI操作的所有寄存器,如配置寄存器、模式寄存器等:
??? Typedef struct_AT91S_SPI{
??? AT91_REG SPI_CR;? // SPI控制寄存器
??? AT91_REG SPI_MR;? // SPI模式寄存器
??? AT91_REG SPI_RDR;? //SPI接收數據寄存器
??? AT91_REG SPI_TDR;? //SPI發送數據寄存器
??? AT91_REG SPI_SR;? // SPI狀態寄存器
??? AT91_REG SPI_IER;? // SPI中斷使能寄存器
??? AT91_REG SPI_IDR;? //SPI中斷禁用寄存器
??? AT91_REG SPI_IMR;? //SPI屏蔽寄存器
??? AT91_REG Reserved0[9];
??? AT91_REG S PI_CSR0;? //SPI片選寄存器0
??? AT91_REG SPI_CSR1;? //SPI片選寄存器1
??? AT91_ REG SPI_CSR2;? //SP I片選寄存器2
??? AT91_ REG SP_CSR3;? //SPI片選寄存器3
??? AT91_REG Reservedl[10];
??? }AT91S_SP I,*AT91PS_SPI
??? AT91C_VA_BASE_SPI是在linuxincludeasm-armarch-at91rm9200hardware.h中定義的SPI寄存器的地址:
??? #define AT91C_VA_BASE_SPI AT91_IO_P2V(AT91C_BASE_SPI)
??? 本驅動程序需要SPI接口的操作是打開/關閉SPI設備,接收/發送數據,因此定義file operations結構體如下:
??? int spi_open(struct inode* inode,struct file*filp);
??? int spi_release(struct inode*inode,struct file*filp);
??? ssize_t spi_read(struct file*filp,ch ar*buf,size_t count,lofft *1);
??? ssize_t spi_write(struct file*filp,const char* buf,size_t count,loff_t * 1) ;
??? struct file_operations spi_fops={
??? open : spi_open,
??? release: spi_release,
??? read: spi_read,
??? write: spi_write,
??? };
??? spi_open用于打開SPI設備,這個函數主要完成了SPI設備的初始化。AT91RM9200的每條I/O線都可以復用2個外設功能,可用于SPI接口的口線是PAO~PA3,因此要把這3個口線設置為SPI控制,實現的函數是AT91_Cf9PIO_SPI( ),該函數定義在linux/include/asm-ann/arch-at91rm 920io.h,其原形如下:
??? staitc inline void AT91_CfgPIO_SPI(void){
??? AT91_SYS->PIOA_PDR=AT91C_PAO_MISO| AT91C_PAl_MOSI | AT91C_P A2_SPCK;
??? }
??? SPI口線設置好后就要設置SPI的工作方式,主要設置控制寄存器(SPI_CR)、模式寄存器(SPI_MR)和片選寄存器(SPI_CSR0):
??? controller->SPI_CR=AT91C_SPI_SWRST; // 軟件復位SPI
??? controller->SPI_MR=AT91C_SPI_MSTR| AT91C_SPI_ MODFDIS | AT91C_SPI_PCS;//設置SPI模式寄存器為主機模式,固定片選
??? controller->SPI_CSR0=(AT91C_SPI_NCPHA | (AT91C_SPI_DLYBS&0x100000) | (SPI_CLOCK <<8) | CSR0_BITS_AD);//設置SPI片選寄存器包括時鐘極性、相位、時鐘波特率、傳輸數據位數
??? Controller->SPI_CR= AT91C_SPI_SPIEN;//設置SPI控制寄存器,使能SPI/發送與接收數據
??? 當用戶程序想用SPI接收或發送數據時,系統會調用spi_write和spi_read函數完成讀寫操作。AT91RM 9200提供了接收數據寄存器(SPI_RDR)、發送數據寄存器(SPI_TDR)和狀態寄存器(SPI_SR)。其中,SPI_RDR和SPI_TDR分別存放接收到的數據和發送數據。SPI_SR用于表示SPI當前操作的狀態,其中RDRF標識接收數據寄存器滿。當RDRF=0時,表示上次讀SPI_RDR后未收到數據;RDRF=1時,表示上次讀SPI_RDR后已收到數據并由串行器發送到SPI_RDR:TDRE標識發送數據寄存器空。當TDRE=0時,表示數據已寫入SPI_TDR但仍未傳輸到串行器;當TDRE=1時,表示最后寫入發送數據寄存器的數據已傳輸到串行器。驅動程序通過檢測RDRF和TDRE的值來完成接收和發送數據的操作。讀寫操作主要的實現代碼如下:
??? while( !(controller->SPI_SR&AT91C_SPI_RDRF));
??? ret_ad = ( controller -> SPI_RDR); //存儲接收到的數據
??? adp =( char *)& ret_ad;
??? copy_ to_user( buf,adp, count);????????????? //把接收到的數據傳給用戶程序
??? copy _from_user(bf,buf,count);????????????? //接收用戶需要發送的數據
??? while(!(controller->SPI_SR&AT91C_SPI_TDRE));
??? contro ller -> SPI_TDR = (ad_cmd&0xFFFF); //向SPI設備發送數據
3.2 開關量輸出驅動程序設計
??? EPA 設備具有8路開關量輸出,使用的8個引腳為PA24、P A26、P A27、PB0、PB1、 PB2、 PB3、 PC15。在本驅動程序中用到的輸入輸出(PIO)控制器的用戶接口有:PIO使能寄存器(PIO_PER)、輸出使能寄存器(PIO_OER)、 PIO置位輸出數據寄存器(PIO_SODR)、 清零輸出數據寄存器(PIO_CODR)。以下為控制PA24引腳的輸出的部分代碼:
??? AT9I_ SYS->PIOA_PER=(unsignedint)(1<<24); //使能PTO來控制PA24
??? AT91_ SYS->PIOA_OER=(unsignedin t)(1<<24); //定義PA24為輸出引腳
??? if(ad_cmd&0x80)
??? AT91_ SYS-> PI OA _SODR=(unsignedin t)(1<<24); //使PA24輸出為高電平
??? else
??? AT 91_ SY S->PIOA CODR=(unsignedin t)(1<<24); //使PA24輸出為低電平
3.3 開關量輸入驅動程序設計
??? EPA 設備具有8路數字量輸入,其中有2路輸入要求可以產生中斷,外設通過這2路向CPU提出數據輸入請求。本系統所使用作為輸入的引腳有PA23、 PA25、 PC0、PC10、 PC11、 PA19、 PA20、 PA22,其中PA23、PA25作為外部中斷輸入。當引腳被設為輸入時,每個I/O線的電平都可以通過外設數據狀態寄存器PIO_PDSR讀出,而此時必須將PIO控制器的時鐘使能。AT91RM9200的電源控制器(PMC)獨立提供和控制多達30個外設時鐘,其用戶接口為外設時鐘使能寄存器PMC_PCER。AT91RM9200的每個外設都有自己的外設標識,PMC_CER就是通過外設標識來使能其時鐘的。在includeasm-armarch-at91rm9200AT91RM9200.h文件中定義了各個外設的標識,部分定義如下:
??? #define AT91C_ID_PIOA???? (2) //Parallel IO Controller A
??? #define AT91C_ID_P IOB???? (3) // P arallelIO C ontroller B
??? #define AT91C_ID_PIOC????? (4 ) // P arallelIO C ontroller C
??? #define AT91C_ID_IRQ0????? (25) // A dvanced Interrupt Controller(IRQ0)
??? #define AT91C_ID_IRQ1????? (26) // A dvanced Interrupt Controller(IRQ1)
??? #define AT91C_ID_IRQ2????? (27) // A dvanced Interrupt Controller(IRQ2)
??? #define AT91C_ID_IRQ3????? (28) // A dvanced Interrupt Controller(IRQ3)
??? 以下為P A19作為輸入引腳的主要代碼:
????AT91_SYS->PIOA _PER=(unsignedin t)(1<<19); //使能PIO控制PA19
??? AT91_SYS->PMC_PCER=((unsignedin t)1<??? adcmd =(AT91_SYS->PIOA_PDSR);//通過引腳數據狀態寄存器來讀引腳的輸出狀態
??? PA 23 、PA25除了作為輸入引腳外還要產生中斷,AT91RM9200使用高級中斷控制器(AIC)來對中斷進行管理。本驅動程序用到的AIC寄存器有:AIC源模式寄存器(AIC SMR0-AIC_SMR31),用來設置各個中斷源的優先級和中斷源類型;中斷使能命令寄存器(AIC_IECR),根據每個設備的標識號控制其使能。
??? AT91_ SYS->AIC_SMR[27]=(unsigned int)(1<<5); //設置IRQ2為邊沿觸發
??? AT91_ SYS->AIC_IECR=((unsigned int)1<??? result= request_irq(EXTERNAL_IRQ2,&testirq_interrupt2,NULL,'testiol',NULL);
??? //注冊中斷并激活中斷處理程序,返回值為0時表示注冊成功
??? if( result==-1)
??? {
??? printk ('Can 't get assigned irq %dn',EXTERNAL_IRQl);
??? return result ;
??? }
??? void test irq_interruptl(void)? //中斷處理程序
??? {
??? printk ('INTERRUPT1 n');
??? AT91_SYS ->A IC_IECR=((unsignedin t)1 <???   }
??? 以上研究了Linux操作系統設備管理方法和Linux設備中斷機制,通過分析Linux設備驅動程序中斷機制實現的方法及字符設備驅動程序的開發過程,編寫了EPA設備的驅動程序。
??? 本文基于ARM嵌入式開發技術研制了EPA設備的核心控制部分,完成了從硬件平臺的設計、調試到Linux操作系統的BootLoader與內核的移植,文件系統和設備驅動程序分析以及針對EPA設備驅動程序的編寫。
參考文獻
[1] 馬學文,朱名日,程小輝.基于mclinux和53C4510B的網絡通信設計.單片機與嵌入式系統應用,2004,4(6):30.
[2]?王亞軍,劉金剛.Linux運用于嵌入式系統的技術分析.計算機應用研究,2005,20(5):102-105.
[3]?SCHACH S R ,JIN B ,WRIGHT D R. Maintainability of the Linux kernel.Software Engineering,2002,149(1):18-23.
[4]?魏平,夏良正,王巖.Linux體系結構及嵌入式Linux的移植方法.東南大學學報,2004,34(1):126-131.
[5]?毛德操,胡希明.Linux內核源代碼情景分析.杭州:浙江大學出版社,2003.
[6]?胡寧,張德運,王福豹.基于Linux的流媒體文件系統.計算機工程,2005,31(14):196-198.
[7]?史芳麗,周亞莉.Li nux系統中虛擬文件系統內核機制研究.陜西師范大學學報(自然科學版),2005,33(1):29.
[8]?劉斐,王文君,楊建民.U-Boot在ARM系統中的啟動及應用.陜西師范大學學報(自然科學版),2005,33(6):213-215.
[9]?蘭曉紅. 嵌入式Linux中斷設備驅動程序設計.計算機應用研究,2003,23(5):96-98.
[10]?ALESSANDRO R,JONATHAN C.Linux device driver(2nd edition).USA: O'Reilly, 2001.

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
娇妻被交换粗又大又硬视频欧美| 宅男噜噜噜66一区二区 | 久久精品欧美日韩| 亚洲欧美国产日韩中文字幕| 一本色道久久综合亚洲二区三区| 亚洲激情中文1区| 亚洲福利视频在线| 亚洲国产精品高清久久久| 亚洲第一精品夜夜躁人人爽| 欧美中文字幕不卡| 欧美一区视频| 亚洲二区免费| 亚洲国产日韩一级| 亚洲人精品午夜| 亚洲精品乱码久久久久久蜜桃麻豆| 最新成人av网站| 日韩视频免费观看高清完整版| 日韩一区二区精品视频| 一本色道久久综合亚洲91| 一区二区三区四区精品| 亚洲私人影院在线观看| 亚洲先锋成人| 欧美影院在线播放| 久久久国产精品一区二区中文| 久久久久久有精品国产| 免费日韩av电影| 欧美精品www| 欧美视频一区二区在线观看| 国产精品vvv| 国产精品一区二区视频| 国产一区二区主播在线| 亚洲丶国产丶欧美一区二区三区 | 亚洲自拍三区| 久久av一区二区三区漫画| 久久久噜噜噜久久人人看| 久久亚洲欧美| 欧美久久影院| 国产精品自拍在线| 在线观看91精品国产入口| 亚洲黄一区二区| 亚洲手机视频| 久久aⅴ国产紧身牛仔裤| 亚洲欧洲一区二区在线观看 | 亚洲自拍偷拍一区| 久久久不卡网国产精品一区| 老司机久久99久久精品播放免费 | 99在线精品视频| 午夜精品区一区二区三| 亚洲欧洲在线看| 亚洲欧美在线x视频| 久久久不卡网国产精品一区| 欧美激情视频网站| 国产精品自拍网站| 亚洲国产美女精品久久久久∴| 99在线视频精品| 久久精品国产精品亚洲| 中文久久乱码一区二区| 久久成人免费日本黄色| 欧美高清一区| 国产欧美一区二区白浆黑人| 亚洲第一中文字幕| 亚洲综合色视频| 亚洲人午夜精品免费| 亚洲欧美日韩精品久久| 美女精品视频一区| 国产精品久久久久久亚洲调教| 一区二区视频免费完整版观看| 日韩视频在线免费| 亚洲第一页自拍| 亚洲一区二区三区免费视频| 麻豆freexxxx性91精品| 欧美午夜无遮挡| 亚洲高清av| 亚洲欧美激情视频在线观看一区二区三区| 亚洲激情欧美| 久久国产精品久久久久久久久久 | 国产精品xvideos88| 在线观看日韩| 午夜国产精品视频免费体验区| 99热精品在线| 久热精品视频在线观看一区| 国产精品久久久久久久浪潮网站| 亚洲国产高清aⅴ视频| 欧美一区二区三区免费在线看| 亚洲一级在线观看| 欧美国产日韩二区| 红桃av永久久久| 亚洲欧美日韩综合一区| 亚洲午夜视频在线观看| 欧美激情国产高清| 国内揄拍国内精品少妇国语| 亚洲欧美日韩国产综合精品二区 | 欧美成人亚洲成人| 韩日成人在线| 午夜精品久久久久久久99水蜜桃 | 国产精品美女久久久久av超清 | 免费看av成人| 国产一区二区电影在线观看 | 午夜亚洲激情| 欧美性猛片xxxx免费看久爱| 亚洲高清资源综合久久精品| 久久精品女人的天堂av| 久久精品国产2020观看福利| 国产精品一区二区a| 99在线观看免费视频精品观看| 亚洲乱码国产乱码精品精| 免费成人黄色av| 国产在线视频欧美| 欧美一区二区三区在线观看| 先锋影音网一区二区| 国产精品久久久久久久久免费桃花| 日韩视频亚洲视频| 夜夜精品视频一区二区| 欧美人与性动交cc0o| 亚洲人成精品久久久久| 亚洲精品看片| 欧美高清在线视频观看不卡| 亚洲国产成人tv| 亚洲欧洲中文日韩久久av乱码| 另类专区欧美制服同性| 黄色另类av| 亚洲品质自拍| 欧美精品福利视频| 亚洲狼人综合| 中文有码久久| 国产精品成人av性教育| 亚洲一区二区伦理| 校园激情久久| 国产午夜精品麻豆| 欧美一区二区三区四区在线观看地址 | 一区二区三区蜜桃网| 亚洲一二三区视频在线观看| 欧美视频第二页| 亚洲一区二区视频| 久久精品色图| 在线播放豆国产99亚洲| 亚洲精品少妇30p| 欧美日韩国产色综合一二三四 | 欧美精品精品一区| 一区二区三区www| 亚洲一二三区精品| 国产精品入口夜色视频大尺度| 亚洲欧美电影院| 久久久天天操| 亚洲国产精品一区二区第一页| 一区二区冒白浆视频| 国产精品日韩在线观看| 欧美亚洲一区在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久久久国产精品麻豆ai换脸| 精品福利av| 一本一本a久久| 国产精品视频网址| 亚洲第一免费播放区| 欧美激情在线观看| 亚洲午夜精品网| 玖玖视频精品| 日韩一级不卡| 久久精品欧美| 亚洲日本免费| 欧美一区二区三区男人的天堂 | 亚洲精品影院| 新片速递亚洲合集欧美合集 | 亚洲国产精品黑人久久久 | 欧美激情精品久久久久久免费印度| 99riav久久精品riav| 久久精品视频播放| 亚洲肉体裸体xxxx137| 欧美一区二区三区在线观看视频| 激情一区二区| 亚洲色图自拍| 一区二区在线看| 亚洲专区一区| 国产精品网站一区| 久久aⅴ国产欧美74aaa| 欧美成人黄色小视频| 一区二区三区四区国产精品| 久久久久国产一区二区三区| 最新69国产成人精品视频免费| 亚洲男女毛片无遮挡| 亚洲大片一区二区三区| 午夜在线观看欧美| 亚洲国产另类久久精品| 欧美亚洲一区| 亚洲激情网站| 久久久久久综合| 一本色道久久综合一区| 免费观看30秒视频久久| 亚洲与欧洲av电影| 欧美精品三级日韩久久| 欧美在线国产| 国产精品美女久久久久久2018| 亚洲精品免费在线| 国产视频一区二区三区在线观看| 99精品免费网| 亚洲国产成人精品久久| 久久不见久久见免费视频1| 日韩午夜免费视频| 欧美大学生性色视频| 欧美一区日本一区韩国一区|