《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 基于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。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品久久777777毛茸茸| 亚洲午夜91| 亚洲看片免费| 夜夜嗨一区二区三区| 欧美黄色免费网站| 欧美日本精品一区二区三区| 欧美激情女人20p| 久久黄色影院| 性欧美xxxx视频在线观看| 欧美日韩成人一区二区三区| 欧美黑人在线观看| 国产欧美日韩视频一区二区| 国产精品永久| 国产麻豆日韩欧美久久| …久久精品99久久香蕉国产| 亚洲视频在线观看网站| 夜夜嗨一区二区三区| 一区二区电影免费观看| 狠狠入ady亚洲精品经典电影| 亚洲欧美久久| 久久精品成人一区二区三区蜜臀| 中文国产成人精品| 欧美成人影音| 亚洲一区在线视频| 久久夜色精品国产亚洲aⅴ| 欧美性事免费在线观看| 欧美精品一区二区久久婷婷| 国产精品电影在线观看| 激情文学综合丁香| 欧美精品www| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲欧洲日产国产综合网| 中文国产成人精品| 欧美在线观看视频一区二区三区| 国产欧美婷婷中文| 欧美天堂亚洲电影院在线观看| 免费观看在线综合| 欧美成年人视频网站欧美| 久久久久久**毛片大全| 妖精成人www高清在线观看| 在线成人国产| 欧美日韩国产一中文字不卡| 欧美一区观看| 欧美激情第4页| 久久久噜噜噜久久| 在线观看免费视频综合| 嫩草伊人久久精品少妇av杨幂| 在线看国产一区| 在线观看日韩精品| 午夜亚洲性色福利视频| 一本久道久久综合中文字幕| 国产精品入口夜色视频大尺度| 国产视频精品va久久久久久| 极品尤物av久久免费看| 亚洲精品三级| 亚洲国产欧美国产综合一区| 欧美日韩在线另类| 亚洲欧美国内爽妇网| 麻豆成人91精品二区三区| 午夜精品短视频| 国产精品久久久久久超碰| 红桃视频国产精品| 久久se精品一区精品二区| 欧美一级精品大片| 国产日韩欧美三级| 国产精品国产三级国产a| 亚洲免费综合| 欧美午夜精品久久久久久人妖| 久久成人18免费网站| 欧美调教视频| 好看的日韩av电影| 国产精品免费观看视频| 亚洲国产婷婷香蕉久久久久久| 欧美国产日韩精品免费观看| 久久精品国产亚洲一区二区三区| 好吊妞这里只有精品| 久久久www成人免费毛片麻豆| 亚洲精品欧洲| 欧美男人的天堂| 一区在线观看| 国产精品一区二区女厕厕| 欧美日本亚洲| 亚洲视频第一页| 欧美资源在线观看| 激情亚洲一区二区三区四区| 久久人人超碰| 国产精品一区二区三区四区五区| 久久精品国产清自在天天线| 欧美人体xx| 亚洲国产婷婷综合在线精品| 亚洲国产毛片完整版| 欧美另类在线观看| 欧美女同在线视频| 99re8这里有精品热视频免费| 亚洲一区二区三区在线观看视频| 亚洲理伦电影| 国产精品porn| 巨胸喷奶水www久久久免费动漫| 久久久亚洲精品一区二区三区| 亚洲欧洲日产国产综合网| 欧美日韩亚洲视频一区| 亚洲国产精品综合| 国产精品福利网| 久久久精品日韩| 亚洲国产成人av| 久久夜色精品国产欧美乱| 亚洲第一区在线观看| 欧美日韩国产大片| 国内精品美女在线观看| 极品尤物久久久av免费看| 免费观看亚洲视频大全| 久久久久欧美精品| 亚洲靠逼com| 在线看成人片| 在线观看中文字幕亚洲| 亚洲高清三级视频| 亚洲人成在线影院| 亚洲精品影院在线观看| 欧美日韩精品伦理作品在线免费观看| 欧美11—12娇小xxxx| 欧美国产成人精品| 亚洲嫩草精品久久| 国内一区二区三区在线视频| 中文精品一区二区三区| 西西人体一区二区| 亚洲天堂av高清| 亚洲福利电影| 亚洲视频播放| 久久一区亚洲| 欧美人与性动交α欧美精品济南到| 在线电影院国产精品| 激情av一区| 欧美日韩一区二区欧美激情| 日韩一级黄色片| 尤物精品国产第一福利三区| 欧美aⅴ一区二区三区视频| 亚洲人成毛片在线播放女女| 欧美激情一区二区三区高清视频| 国产精品激情av在线播放| 欧美日韩国产综合在线| 精品福利免费观看| 欧美一级专区免费大片| 欧美亚洲色图校园春色| 中文精品视频一区二区在线观看| 欧美激情精品| 国产精品vip| 亚洲激情社区| 樱桃国产成人精品视频| 久久综合色综合88| 久久阴道视频| 最新日韩中文字幕| 香蕉久久精品日日躁夜夜躁| 国产精品99久久久久久宅男| 免费不卡中文字幕视频| 欧美 日韩 国产在线| 欧美激情综合五月色丁香| 欧美成人精品在线播放| 国产日韩欧美一区二区三区四区| 欧美精品国产精品日韩精品| 久久久久久尹人网香蕉| 欧美视频一区在线观看| 国产日产精品一区二区三区四区的观看方式| 国产综合久久久久影院| 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美一区二区精品久久久| 欧美视频在线免费| 免费在线视频一区| 欧美日韩一区在线播放| 亚洲一区二区3| 一本色道久久99精品综合| 另类激情亚洲| 亚洲伦理在线| 国产视频一区三区| 一本久久精品一区二区| 在线欧美日韩精品| 国产欧美一区二区三区另类精品| 欧美伊人久久久久久久久影院| 99亚洲伊人久久精品影院红桃| 久久av在线看| 欧美成人午夜激情在线| 亚洲成色777777女色窝| 亚洲国产美女久久久久| 国产婷婷色一区二区三区| 免费观看一级特黄欧美大片| 久久大逼视频| 精品成人久久| 一本久道久久综合婷婷鲸鱼| 久久gogo国模啪啪人体图| 国产精品久99| 伊人色综合久久天天五月婷| 免费成人黄色av| 久热成人在线视频| 韩国精品一区二区三区| 久久国产精品72免费观看| 亚洲一区二区3| 欧美大色视频| 欧美午夜a级限制福利片| 欧美成人一二三| 亚洲一区美女视频在线观看免费| 久久久久久久91| 欧美日韩不卡视频| 亚洲成人在线视频播放| 欧美日韩一区综合| 亚洲一区二区在线免费观看| 久久久精品日韩| 国产精品国产自产拍高清av王其| 久久成人国产| 欧美日韩1区2区3区| 亚洲一区二区免费| 久久成人精品一区二区三区| 老司机aⅴ在线精品导航| 欧美xart系列高清| 1769国内精品视频在线播放| 日韩亚洲一区二区| 亚洲男人第一网站| 国产九九视频一区二区三区| 国产精品国产一区二区| 伊人久久大香线蕉综合热线| 国产精品乱码一区二三区小蝌蚪| 国产午夜精品视频免费不卡69堂| 欧美a级片网站| 亚洲开发第一视频在线播放| 国产欧美日韩91| 亚洲免费在线精品一区| 99国产精品久久久久久久成人热| 亚洲丝袜av一区| 国产日韩精品电影| 欧美一区二区三区四区视频| 欧美视频中文在线看| 欧美一级日韩一级| 欧美三级黄美女| 久久久久久久高潮| 国产日韩一区二区三区| 国产精品区一区二区三| 久久久久久午夜| 久久亚洲精品一区二区| 亚洲欧洲精品一区二区| 一区二区三区在线观看国产| 欧美成人xxx| 亚洲美女黄色| 亚洲高清123| 欧美尤物一区| 亚洲中字在线| 欧美精品日韩精品| 久久精品国产77777蜜臀| 欧美视频在线观看一区二区| 在线观看日韩欧美| 国产精品欧美激情| 久久久久一区二区| 欧美凹凸一区二区三区视频| 欧美亚男人的天堂| 久久久久国色av免费观看性色| 国产精品免费aⅴ片在线观看| 国产精品婷婷午夜在线观看| 久久午夜电影| 狠狠狠色丁香婷婷综合久久五月| 久久免费视频在线| 在线观看视频一区二区| 久久久久久久久久久一区| 亚洲一区二区综合| 激情五月***国产精品| 欧美大片免费久久精品三p| 欧美区视频在线观看| 欧美va亚洲va香蕉在线| 亚洲精一区二区三区| 亚洲日本中文| 99精品视频免费观看视频| 欧美日本精品| 久久精品视频播放| 亚洲国产高清高潮精品美女| 麻豆av福利av久久av| 欧美一区二区三区在线观看| 欧美一区二区三区男人的天堂| 欧美高清视频一区二区| 老司机午夜免费精品视频| 国产精品一区二区在线| 一区二区三区三区在线| 久久国产手机看片| 久久久久久久波多野高潮日日| 亚洲一区二区三区欧美| 欧美另类高清视频在线| 亚洲精品一区二区三区99| 国产精品久久久久久久久久ktv| 韩国av一区二区三区在线观看| 亚洲欧美国产一区二区三区| 久久av一区二区三区亚洲| 亚洲精选视频免费看| 亚洲国产91精品在线观看| 欧美一二区视频| 亚洲无毛电影| 在线视频欧美一区| 亚洲免费成人av电影| 国产精品地址| 亚洲国产黄色片| 欧美国产日韩视频| 欧美中文字幕视频| 午夜亚洲激情| 香蕉免费一区二区三区在线观看| 亚洲精品在线免费观看视频| 亚洲一区二区三区在线播放| 中文在线资源观看网站视频免费不卡| 黄色成人在线免费| 久久av二区| 久久精品亚洲一区| 国产精品国产亚洲精品看不卡15| 午夜精品福利电影| 国产精品日韩在线观看| 欧美成人中文| 欧美精品午夜视频| 在线观看日韩av先锋影音电影院| 久久www成人_看片免费不卡| 亚洲视频在线一区观看| 亚洲欧美自拍偷拍| 国产精品户外野外| 久久午夜精品一区二区| 亚洲激情视频在线播放| 久久福利影视| 久久免费精品视频| 免费久久99精品国产自| 国产精品超碰97尤物18| 亚洲欧洲精品一区二区三区不卡| 久久福利视频导航| 欧美国产1区2区| 欧美激情1区2区3区| 欧美日韩国产欧美日美国产精品| 欧美不卡一卡二卡免费版| 好吊日精品视频| 黄色精品免费|