官术网_书友最值得收藏!

第2章 半導(dǎo)體存儲器及I/O接口基礎(chǔ)

微型計(jì)算機(jī)是由CPU、存儲器、輸入/輸出(I/O)接口電路組成的,計(jì)算機(jī)的工作依賴于存儲器中的程序和數(shù)據(jù);各種外設(shè)通過I/O接口(Interface)與系統(tǒng)相連,各種方式下的數(shù)據(jù)傳送都是在接口的支持下實(shí)現(xiàn)的。存儲器和I/O接口電路是微型計(jì)算機(jī)的重要組成部分。

本章主要讓學(xué)生了解半導(dǎo)體存儲器的工作原理、分類、主要性能指標(biāo)及各類存儲器的特點(diǎn);了解I/O接口電路的基本概念、基本功能、數(shù)據(jù)傳輸方式、串行通信的基本概念、中斷的基本概念、定時器/計(jì)數(shù)器的基本概念。本章是微型計(jì)算機(jī)存儲器及I/O接口的基礎(chǔ)部分。

2.1 存儲器概述

存儲器(Memory)是計(jì)算機(jī)的重要組成部分,是用來存儲程序和數(shù)據(jù)的部件。正是因?yàn)橛辛舜鎯ζ鳎?jì)算機(jī)才有信息記憶功能,并把計(jì)算機(jī)要執(zhí)行的程序、所要處理的數(shù)據(jù)以及處理的結(jié)果存儲在計(jì)算機(jī)中,使計(jì)算機(jī)能自動工作。存儲器系統(tǒng)是微機(jī)系統(tǒng)中重要的子系統(tǒng)。隨著CPU速度的不斷提高和軟件規(guī)模的不斷擴(kuò)大,人們當(dāng)然希望存儲器能同時滿足速度快、容量大、價(jià)格低的要求。實(shí)際上這一點(diǎn)很難辦到,解決這一問題的較好辦法是:設(shè)計(jì)一個快慢搭配、具有層次結(jié)構(gòu)的存儲系統(tǒng)。圖2-1顯示了新型計(jì)算機(jī)系統(tǒng)中的存儲器組織,它呈金字塔形結(jié)構(gòu)。越往上,存儲器的速度越快,CPU的訪問頻率越高,每位的造價(jià)越高,系統(tǒng)的容量越小;越往下,容量越大,每位的造價(jià)越低,速度也較低。

圖2-1 存儲器系統(tǒng)的多層次結(jié)構(gòu)

從圖2-1中可以看出,CPU中的寄存器位于頂端,它的存取速度最快,但數(shù)量有限。向下依次為CPU內(nèi)部的Cache(高速緩沖存儲器)、主板上的Cache(也稱外部Cache,由高速SRAM組成)、主存儲器(由半導(dǎo)體存儲器組成)、輔助存儲器(半導(dǎo)體盤、軟盤、硬盤)和大容量輔助存儲器(光盤、磁帶)。

本章主要介紹構(gòu)成微型機(jī)主存的半導(dǎo)體存儲器的有關(guān)問題。

2.1.1 存儲器的基本組成與操作

1.存儲器的基本組成

存儲器由一些能夠表示二進(jìn)制數(shù)0和1狀態(tài)的物理器件組成,這些器件本身具有記憶的功能,如電容、雙穩(wěn)態(tài)電路等。這些具有記憶功能的物理器件或者電路就構(gòu)成了一個基本存儲單元。每個基本存儲單元可以保存1位二進(jìn)制信息,若干基本存儲器單元構(gòu)成一個存儲單元,通常一個存儲單元由8個基本存儲單元構(gòu)成,即一個存儲單元可以存儲8位二進(jìn)制信息,許多存儲單元組織在一起便構(gòu)成了存儲器。形象地說,如果把學(xué)校的一棟宿舍樓比做存儲器的話,那么宿舍樓中的各個宿舍就是存儲單元,各個宿舍中的每張床就是基本存儲單元。存儲器組成之間的關(guān)系如圖2-2所示。

圖2-2 存儲器組成關(guān)系圖

2.存儲器的基本操作

存儲器的操作有兩種:讀操作和寫操作。

讀操作是指從存儲器中讀出信息,不破壞原有存儲器單元中的信息,屬于非破壞性操作。寫操作是把信息寫入(存入)存儲器,寫入的信息將會覆蓋存儲單元中的原有信息,屬于破壞性操作。CPU實(shí)現(xiàn)對存儲器的讀/寫,其步驟是首先通過地址選中存儲器單元,然后再對選中的存儲單元進(jìn)行讀/寫操作。

2.1.2 存儲器的分類及主要指標(biāo)

1.存儲器的分類

存儲器可以按不同的方法進(jìn)行分類。

(1)按用途分

按存儲器用途分,可以分成內(nèi)部存儲器和外部存儲器。

① 內(nèi)部存儲器:內(nèi)部存儲器也稱為內(nèi)存,是主存儲器,位于計(jì)算機(jī)主機(jī)的內(nèi)部。它用來存放當(dāng)前正在使用的或經(jīng)常使用的程序和數(shù)據(jù),它由半導(dǎo)體集成電路芯片組成。內(nèi)存工作速度快,可以直接與CPU交換數(shù)據(jù)、參與運(yùn)算。但內(nèi)存的容量有限,通常為幾十到幾百KB(1K=1024)。

② 外部存儲器:外部存儲器也稱為外存,是輔助存儲器。外存的特點(diǎn)是大容量,所存儲的信息既可以修改,也可以保存,存取速度較慢,要由專用的設(shè)備來管理。如磁帶、磁盤、光盤等,一盤磁帶可存儲150KB的信息,一片硬磁盤可存儲數(shù)十兆字節(jié)的信息。磁帶、磁盤的數(shù)量可隨意增加。從這個意義上說,外存儲器的容量無限,但外存的工作速度低,它們不能直接參與計(jì)算機(jī)的運(yùn)算,一般情況下外存只與內(nèi)存成批交換信息。也就是說,外存儲器僅起到擴(kuò)大計(jì)算機(jī)存儲容量的作用。在計(jì)算機(jī)中,外存儲器是外設(shè)的組成部分。

本書涉及的存儲器系統(tǒng)設(shè)計(jì)主要是內(nèi)存儲器系統(tǒng)設(shè)計(jì)。

(2)按存儲器性質(zhì)分

內(nèi)部存儲器按存儲器性質(zhì)分類通常分為隨機(jī)存取存儲器(RAM,Random Access Memory)和只讀存儲器(ROM,Read Only Memory)兩類。

① RAM:RAM又稱讀寫存儲器,它的數(shù)據(jù)讀取、存入時間都很短,因此計(jì)算機(jī)運(yùn)行時,既可以從RAM中讀數(shù)據(jù),又可以將數(shù)據(jù)寫入RAM。但掉電后RAM中存放的信息將丟失。RAM適宜存放輸入數(shù)據(jù)、中間結(jié)果及最后的運(yùn)算結(jié)果,因此又被稱為數(shù)據(jù)存儲器。

隨機(jī)存儲器有靜態(tài)RAM和動態(tài)RAM兩種。靜態(tài)RAM用觸發(fā)器存儲信息,只要不斷電,信息就不會丟失。動態(tài)RAM依靠電容存儲信息,充電后為“1”,放電后為“0”。由于集成電路中電容的容量很小,且存在泄漏電流的放電作用,高電平的保持時間只有幾毫秒。為了保存信息,每隔1~2ms必須對高電平的電容重新充電,這稱為動態(tài)RAM的定時刷新。動態(tài)RAM的集成度高;靜態(tài)RAM的集成度低、功耗大,優(yōu)點(diǎn)是省去了刷新電路。在設(shè)計(jì)專用的微型計(jì)算機(jī)系統(tǒng)時,一般只用靜態(tài)RAM就可以滿足要求。

② ROM:ROM讀出一個數(shù)據(jù)的時間為數(shù)百納秒,有時也可改寫,但寫入一個數(shù)據(jù)的時間長達(dá)數(shù)十毫秒。因此在計(jì)算機(jī)運(yùn)行時只能執(zhí)行讀操作。掉電后ROM中存放的數(shù)據(jù)不會丟失。ROM適宜存放程序、常數(shù)、表格等,因此又稱為程序存儲器。只讀存儲器有以下五類:

掩模ROM:在半導(dǎo)體工廠生產(chǎn)時,已經(jīng)用掩模技術(shù)將程序做入芯片,用戶只能讀出內(nèi)容而不能改寫。掩模ROM只能應(yīng)用于有固定程序且批量很大的產(chǎn)品中。

一次可編程只讀存儲器(PROM,Programmable ROM):用戶可將程序?qū)懭隤ROM,但程序一經(jīng)寫入就不能改寫。

紫外線擦除可編程只讀存儲器(EPROM,Erasable PROM):用戶可將程序?qū)懭隕PROM芯片。如果要改寫程序,先用EPROM擦除器,擦去原先的程序,然后寫入新程序。與PROM芯片一樣,寫入的速度很慢,且要用到高壓,所以必須用特定的EPROM編程器寫入信息。在計(jì)算機(jī)運(yùn)行時只能執(zhí)行讀操作。

電擦除可編程只讀存儲器(EEPROM,Electrically Erasable PROM):由于采用電擦除方式,而且擦除、寫入、讀出的電源都用+5V,故能在應(yīng)用系統(tǒng)中在線改寫。但目前寫入時間較長,約需10ms,讀出時間約為幾百納秒。

閃爍存儲器(Flash Memory):快速擦寫存儲器(Flash Memory,簡稱Flash)是20世紀(jì)80年代中期推出的新型器件。它可以在聯(lián)機(jī)條件下,在計(jì)算機(jī)內(nèi)進(jìn)行擦除、改寫,因而稱為快擦寫型存儲器或閃爍存儲器。它具有芯片整體或分區(qū)電擦除和可再編程功能,從而使它成為性價(jià)比和可靠性最高的可讀寫、非易失性存儲器。主要性能特點(diǎn)如下:

● 高速芯片整體電擦除:芯片整體擦除時間約1s,而一般的EPROM需要15min以上。

● 高速編程:采用快速脈沖編程方法,編程時間短。

● 最少1萬次擦除/編程周期,通常可達(dá)到10萬次擦除/編程周期。

● 早期的Flash采用12V編程電壓,改進(jìn)后在Flash內(nèi)部集成了1個DC/DC變換器,可以采用單一的5V電壓供電。

● 高速度的存儲器訪問:最大讀出時間不超過200μs。高速Flash的讀出時間達(dá)到60μs。

● 低功耗:最大工作電流為30mA,備用狀態(tài)下的最大電流為100μA。

● 密度大,價(jià)格低,性價(jià)比高。

由于Flash的突出性能,因而其發(fā)展迅速。Intel公司已決定由Flash來替代EEPROM,不再生產(chǎn)EEPROM。由于它的非易失性和可以長期地反復(fù)使用,目前已經(jīng)廣泛應(yīng)用于IC卡、單片機(jī)系統(tǒng)和其他電子設(shè)備中。大容量的Flash也可以“固態(tài)盤”的形式代替軟盤或硬盤作為海量存儲器使用。

圖2-3歸納了存儲器的分類情況。

圖2-3 存儲器分類圖

2.存儲器的主要性能指標(biāo)

衡量半導(dǎo)體存儲器性能的主要指標(biāo)有存儲容量、存取速度、存儲器周期、功耗、可靠性、價(jià)格、電源種類等,其中主要的技術(shù)指標(biāo)是存儲容量和存取速度。

(1)存儲容量

存儲容量是存儲器的一個重要指標(biāo)。存儲器芯片的存儲容量用“存儲單元個數(shù)×每個單元的存儲位數(shù)”來表示。如存儲器有256個單元,每個單元存放8位二進(jìn)制數(shù),那么該存儲器的容量為256×8位。存儲器容量1K=1024=210。對于以字節(jié)編址的微型計(jì)算機(jī),可以以字節(jié)表示容量,如某微型計(jì)算機(jī)的容量為64KB。

在表示存儲器的容量時,一般是以某一空間范圍來表示的,而空間范圍是由地址線來決定的,即存儲器的容量和存儲器的地址線的寬度(數(shù)量)有關(guān)。地址的二進(jìn)制位數(shù)N與容量的關(guān)系是Q=2N

如某存儲器芯片有13 條地址線A12~A0,則存儲器容量為8KB,空間表示范圍為0000H~1FFFH。

(2)存取速度

該項(xiàng)指標(biāo)一般用以下兩個參數(shù)中的一個來描述。

① 存取時間(Access Time,TA):是指從CPU給出有效的存儲地址啟動一次存儲器讀/寫操作,到操作完成所經(jīng)歷的時間。

具體地說,對一次讀操作的存取時間就是讀出時間,即從地址有效到數(shù)據(jù)輸出有效之間的時間;對于一次寫操作,存取時間就是寫入時間。

② 存取周期(Access Cycle,TAC):是指連續(xù)兩次存儲器讀/寫操作之間所需要的最小時間間隔。對于讀操作,就是讀周期時間;對于寫操作,就是寫周期時間。因?yàn)樵谝淮螖?shù)據(jù)訪問后,芯片不可能無間歇地進(jìn)入下一次訪問,所以存取周期TAC要略大于存取時間TA。表示上,該參數(shù)常表示為讀周期TRC或?qū)懼芷赥WC,存取時間TAC是其統(tǒng)稱。

(3)功耗

功耗反映了存儲器耗電的多少,同時也相應(yīng)地反映了它的發(fā)熱程度(溫度會限制集成度的提高)。通常要求是功耗小,這對存儲器件的工作穩(wěn)定性有利。雙極型半導(dǎo)體存儲器功耗高于MOS型存儲器,相應(yīng)的MOS型存儲器芯片的集成度高于雙極型的。

(4)可靠性

可靠性通常以平均無故障時間(MTBF)來衡量。平均無故障時間可以理解為兩次故障之間的平均時間間隔,即平均無故障時間越長,則可靠性越高。集成存儲芯片一般在出廠時需經(jīng)過測試,以保證它有很高的可靠性。

(5)性價(jià)比

性價(jià)比用于衡量存儲器的經(jīng)濟(jì)性能,它是存儲容量、存取速度、可靠性、價(jià)格等的一個綜合指標(biāo),其中的價(jià)格還應(yīng)包括系統(tǒng)中使用存儲器時而附加的線路的價(jià)格。用戶選用存儲器時,應(yīng)針對具體的用途,側(cè)重考慮要滿足某種性能,以利于降低整個系統(tǒng)的價(jià)格。例如選用外存儲器要求它有大的存儲容量,但對于存取是否高速則不做要求;Cache要求高的存取速度,但對于其存儲容量則不做過高要求。

2.1.3 存儲器芯片的一般結(jié)構(gòu)及地址結(jié)構(gòu)形式

1.存儲器芯片的一般結(jié)構(gòu)

常用的存儲器由存儲體、地址譯碼器、控制邏輯電路、數(shù)據(jù)緩沖器4部分組成,如圖2-4所示。

圖2-4 存儲器芯片組成示意圖

(1)存儲體

存儲體是存儲芯片的主體,它由若干存儲單元組成,每個存儲單元又由若干基本存儲電路組成,每個存儲電路可存放一位二進(jìn)制信息。通常,一個存儲單元是一個字節(jié),存放8位二進(jìn)制信息,即以字節(jié)來組織。為了區(qū)分不同的存儲單元以便于讀/寫操作,每個存儲單元都有一個地址(稱為存儲單元地址),CPU訪問時按地址訪問。為了減少存儲器芯片的封裝引腳和簡化譯碼器的結(jié)構(gòu),存儲體總是按照二維矩陣的形式來排列存儲單元電路。存儲體內(nèi)基本存儲單元的排列結(jié)構(gòu)通常有兩種形式:一種是位結(jié)構(gòu),即每個存儲單元可存放一位二進(jìn)制信息,其容量表示成N×1位,如1K×1位、4K×1位。另一種排列是字排列,即每個存儲單元可存放多位二進(jìn)制信息,其容量表示成N×4位或N×8位,如靜態(tài)存儲器6116為2×8位,6264為8K×8位。

(2)地址譯碼器

地址譯碼器接收來自CPU的N位地址,經(jīng)譯碼后產(chǎn)生2N個地址選擇信號,實(shí)現(xiàn)對片內(nèi)存儲單元的選址,即地址譯碼器完成存儲單元的選擇。

(3)控制邏輯電路

控制邏輯電路接收片選信號CS和來自CPU的讀/寫控制信號,形成芯片內(nèi)部的控制信號,控制數(shù)據(jù)的讀出和寫入。

(4)數(shù)據(jù)緩沖器

數(shù)據(jù)緩沖器用于暫時存放來自CPU的寫入數(shù)據(jù)或從存儲體內(nèi)讀出的數(shù)據(jù)。暫存的目的是為了協(xié)調(diào)CPU和存儲器之間在速度上的差異。

2.存儲器地址空間的結(jié)構(gòu)形式

存儲器用于存放程序與數(shù)據(jù)。半導(dǎo)體存儲器由一個個單元組成,每個單元有一個編號(稱為地址),一個單元存放一個8位二進(jìn)制數(shù)(1個字節(jié))。

計(jì)算機(jī)的存儲器地址空間有兩種結(jié)構(gòu)形式:普林斯頓結(jié)構(gòu)和哈佛結(jié)構(gòu)。圖2-5所示為具有64KB地址的兩種結(jié)構(gòu)圖。

圖2-5 計(jì)算機(jī)存儲器地址的兩種結(jié)構(gòu)形式

普林斯頓結(jié)構(gòu)的特點(diǎn)是計(jì)算機(jī)只有一個地址空間,ROM和RAM被安排在這一地址空間的不同區(qū)域,一個地址對應(yīng)唯一的一個存儲器單元,CPU訪問ROM和訪問RAM使用的是相同的指令。8086、奔騰等計(jì)算機(jī)采用的是普林斯頓結(jié)構(gòu)。

哈佛結(jié)構(gòu)的特點(diǎn)是計(jì)算機(jī)的ROM和RAM被安排在兩個不同的地址空間,ROM和RAM可以有相同的地址,CPU訪問ROM和訪問RAM使用的是不同的訪問指令。MCS-51系列單片機(jī)采用的是哈佛結(jié)構(gòu)。

2.1.4 堆棧的概念

眾所周知,堆棧是堆放貨物的倉庫。從地面起自下而上堆放的貨物總是“先進(jìn)后出”的。微型計(jì)算機(jī)中的堆棧是在隨機(jī)存儲器(RAM)中建立的一個特殊區(qū)域,是一組按照“先進(jìn)后出”的方式工作的、用于暫存信息的存儲單元。也就是說,所謂堆棧,是指在存儲器中開辟的一個區(qū)域,用來存放需要暫時保存的數(shù)據(jù)。

1.堆棧的作用

實(shí)用程序中,常有主程序與子程序兩大部分。如果在一個程序中需要多次使用某段程序,就把這段程序獨(dú)立出來編成子程序,其他部分稱為主程序。在主程序執(zhí)行過程中需要使用該子程序時,可用調(diào)用子程序指令來調(diào)用它,待子程序執(zhí)行完后再返回繼續(xù)執(zhí)行主程序。過程如圖2-6所示。顯然,這樣做可以減少編制程序時的重復(fù)工作量,也縮短了程序的長度。

圖2-6 子程序執(zhí)行過程圖

在調(diào)用子程序的過程中,要保留斷點(diǎn)地址,有時還要保護(hù)現(xiàn)場。所謂斷點(diǎn)地址,就是調(diào)用子程序指令的按順序排列的下一條指令的地址,也就是執(zhí)行調(diào)用子程序指令時的程序計(jì)數(shù)器(PC)的內(nèi)容。只有保留了斷點(diǎn)地址,才能在子程序執(zhí)行后保證返回到主程序的斷點(diǎn)處,繼續(xù)執(zhí)行主程序。所謂現(xiàn)場,就是調(diào)用子程序前保存在累加器A、工作寄存器及標(biāo)志寄存器中的信息,這些信息是主程序執(zhí)行的中間結(jié)果。如果在執(zhí)行子程序的過程中要使用這些寄存器,將會破壞原來的內(nèi)容。為此,進(jìn)入子程序后,首先要轉(zhuǎn)存這些寄存器的內(nèi)容,這就是保護(hù)現(xiàn)場。斷點(diǎn)地址與現(xiàn)場信息是送入堆棧保存的。

在返回主程序前,要把保存在堆棧中的現(xiàn)場信息送回對應(yīng)的寄存器,這稱為恢復(fù)現(xiàn)場。

有時在執(zhí)行一段子程序的過程中還要調(diào)用其他子程序,如圖2-7所示,這稱為子程序嵌套。這種情況下,堆棧不僅需要存放多個斷點(diǎn)地址和多批現(xiàn)場信息,而且為了保證逐次正確返回,要求先存入堆棧中的斷點(diǎn)地址、現(xiàn)場信息后取出來,所以堆棧按照“先進(jìn)后出”的方式工作。

圖2-7 子程序嵌套圖

2.堆棧操作

堆棧有兩種操作方式。將數(shù)據(jù)送入堆棧稱為推入操作,又稱為壓入操作,如壓入指令

            PUSH    A

執(zhí)行把累加器A的內(nèi)容壓入堆棧的操作。把堆棧中內(nèi)容取出來的操作稱為彈出操作,如彈出指令

            POP     A

執(zhí)行把棧頂內(nèi)容送回A的操作。

保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場是由壓入指令和彈出指令實(shí)現(xiàn)的。斷點(diǎn)地址壓入堆棧是執(zhí)行調(diào)用子程序指令時由硬件自動實(shí)現(xiàn)的,斷點(diǎn)地址自堆棧中彈出是執(zhí)行返回主程序指令RET時由硬件自動實(shí)現(xiàn)的。

3.堆棧指針

堆棧是由堆棧指針來管理的。堆棧指針(SP,Stack Pointer)是一個專用的地址指針寄存器,它指明棧頂?shù)奈恢茫鹬芾矶褩9ぷ鞯淖饔谩?/p>

下面以MCS-51單片機(jī)為例,說明堆棧工作過程和SP的作用。

MCS-51單片機(jī)的堆棧是建立在片內(nèi)RAM中。MCS-51片內(nèi)RAM的容量為128B,其地址為8位二進(jìn)制數(shù),所以SP是一個8位地址寄存器。在使用堆棧前,首先要確定堆棧在RAM中的位置,這稱為建立堆棧。建立堆棧可用一條傳送指令來實(shí)現(xiàn)。例如,執(zhí)行指令:“MOV SP,#60H”后,(SP)=60H,在圖2-8(a)中,用SP指在60H單元來表示。

圖2-8 堆棧操作示意圖

由于機(jī)器規(guī)定SP指在堆棧的頂部,也就是指在最后壓入堆棧的信息的所在單元,所以剛建立堆棧時,盡管60H單元中實(shí)際上沒有信息,但認(rèn)為該單元已有信息存放,堆棧將從60H單元開始向上增長(地址依次增大)。此后,如果執(zhí)行指令PUSH A,A的內(nèi)容將存放在61H單元中,同時SP的內(nèi)容自動加1,即(SP)=61H,如圖2-8(b)所示。繼續(xù)執(zhí)行指令PUSH B后,堆棧的情況如圖2-8(c)所示。彈出指令POP則把堆棧頂?shù)膬?nèi)容送回寄存器或累加器,而且每彈出一個數(shù)據(jù),SP的內(nèi)容自動減1,故SP始終指在堆棧的頂部。

4.注意

堆棧可用于中斷及子程序調(diào)用,也可用于數(shù)據(jù)的暫時保存。在進(jìn)入中斷服務(wù)子程序和子程序調(diào)用前,原來CPU中的現(xiàn)行信息(指令指針I(yè)P及寄存器中的有關(guān)內(nèi)容)都必須保存,在中斷服務(wù)子程序和子程序調(diào)用結(jié)束返回主程序時,又必須恢復(fù)原來保存的信息,這些均由堆棧操作來完成,其中指令指針的入棧和出棧由CPU自動管理,而一些寄存器中內(nèi)容的保存及返回,需要用戶自己利用指令PUSH、POP來完成。由于堆棧操作的“先進(jìn)后出”的特點(diǎn),一定要注意兩點(diǎn):

① 先進(jìn)入的內(nèi)容要后彈出,保證返回寄存器的內(nèi)容不發(fā)生錯誤。如:

            PUSH    A
            PUSH    B
            POP     A
            POP     B

可引起寄存器A、B內(nèi)容的改變,即A和B的內(nèi)容發(fā)生了交換。

② PUSH和POP的指令要成對,若不匹配的話,會造成返回主程序的地址出錯。如:

            PUSH    A
            PUSH    B
            …
            POP     B
            RET

由于少彈出一組數(shù)據(jù),會使CPU返回主程序時,返回地址取出的是原來A中的內(nèi)容,使整個程序執(zhí)行出錯。

主站蜘蛛池模板: 镇宁| 兰考县| 城固县| 呈贡县| 通辽市| 开阳县| 交城县| 郸城县| 宁蒗| 永济市| 龙海市| 五寨县| 磐石市| 松溪县| 远安县| 嘉鱼县| 剑河县| 潼南县| 通道| 旺苍县| 湖北省| 平谷区| 金昌市| 井冈山市| 黄骅市| 山东| 腾冲县| 河津市| 灌阳县| 牡丹江市| 左云县| 娄底市| 肇州县| 个旧市| 手游| 团风县| 永昌县| 禹州市| 太仆寺旗| 临猗县| 罗山县|