欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

實現(xiàn)微控制器可配置性的方法和可配置的微控制器的制作方法

文檔序號:6459088閱讀:568來源:國知局

專利名稱::實現(xiàn)微控制器可配置性的方法和可配置的微控制器的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及微控制器,特別涉及一種低成本實現(xiàn)微控制器電路功能可配置性的方法和一種可配置的纟效控制器。
背景技術(shù)
:與通用微處理器不同,微控制器是一種更為強調(diào)自足性(即盡量少用外接硬件)和性價比的微處理器,其通常將只讀存儲器(ROM)、隨機存儲器(RAM)、中央處理單元(CPU)、定時器和I/O端口等單元集成在一塊芯片內(nèi),以滿足不同場合下的應(yīng)用需求。有關(guān)微控制器的結(jié)構(gòu)和工作原理已有諸多描述,例如可參見《8051孩乏控制器教程》(第3版)(清華大學(xué)出版社2005年12月1日出版),該文獻(xiàn)在此以全文引用方式包含在本文中。為了進(jìn)一步減少凝:控制器所需的外接硬件,人們嘗試將一些數(shù)字電路單元和模擬電路單元也集成到微控制器芯片內(nèi)。圖1示出了一種典型的集成了數(shù)字電路和模擬電路的微控制器芯片的架構(gòu)圖。如圖l所示,該微控制器包括內(nèi)核、數(shù)字系統(tǒng)、模擬系統(tǒng)和系統(tǒng)資源,而可配置的全局總線資源可將所有的器件資源組合成為一個完整的定制系統(tǒng)。內(nèi)核作為處理引擎,包含用于存儲數(shù)據(jù)的靜態(tài)隨機存儲器(SRAM)、中斷控制、時鐘資源(包括內(nèi)部主晶體振蕩器(IMO)和內(nèi)部低速晶體振蕩器(ILO))和中央處理單元核。數(shù)字系統(tǒng)包含若干可配置的數(shù)字邏輯電路單元,它們可以獨立或以組合方式構(gòu)成各種外部設(shè)備,例如I2C接口、SPI接口、通用異步收發(fā)器(UART)和脈沖寬度調(diào)制(PWM)電路等。上述數(shù)字邏輯電路單元可以可編程方式經(jīng)由全局總線與通用10端口相連,由此實現(xiàn)任一信號在任一引腳上的輸入和輸出。模擬系統(tǒng)包括若干可配置的模擬電路單元,它們可以生成各種復(fù)雜的模擬信號流以實現(xiàn)各種模擬類外部設(shè)備的功能,例如模數(shù)轉(zhuǎn)換器和電壓比較器等。上述模擬電路單元同樣也可以由可編程方式經(jīng)由全局總線與通用IO端口相連,由此實現(xiàn)任一信號在任一引腳上的輸入和輸出。系統(tǒng)資源提供了諸多的附加功能,例如可提升數(shù)字系統(tǒng)靈活性的數(shù)字時鐘、可實現(xiàn)I2C主、從和多主通訊的12C功能、向微控制器內(nèi)的其它單元提供電壓基準(zhǔn)的內(nèi)部電壓基準(zhǔn)、可產(chǎn)生高于電池電壓的工作電壓的開關(guān)充電泵(switchmodepump)以及得到中央處理單元核支持的各種系統(tǒng)復(fù)位功能。有關(guān)圖1所示微控制器的詳細(xì)描述可參見位于美國加利福尼亞州的賽普雷斯半導(dǎo)體有限公司(CypressSemiconductorCorp.)提供的型號為CY8C21234的微控制器芯片的產(chǎn)品數(shù)據(jù)表(datasheet),該文件作為參考文獻(xiàn)在此以全文引用方式包含在本文中。然而,模擬電路和數(shù)字電路在一塊芯片上的混成以及集成度的提高將加大芯片的設(shè)計難度并且增加微控制器的制造成本,因此不利于微控制器性價比的提高。
發(fā)明內(nèi)容本發(fā)明的一個目的是提供一種低成本實現(xiàn)微控制器電路功能可配置性的方法。本發(fā)明的另外一個目的是提供一種可配置的微:控制器,其可低成本地實現(xiàn)電路功能的配置。按照本發(fā)明的一個方面,提出了一種實現(xiàn)微控制器可配置性的方法,所述微控制器包括中央處理單元、數(shù)據(jù)存儲器、程序存儲器、輸A/輸出端口和定時器,該方法包含下列步驟確定所需配置的石更件電路的功能;以及在所述程序存儲器內(nèi)存儲應(yīng)用程序和子程序,所述子程序用于實現(xiàn)所需配置的硬件電路的功能并且可被所述應(yīng)用程序調(diào)用。優(yōu)選地,在上述方法中,所述應(yīng)用程序用C語言編寫,所述子程序用匯編語言編寫,并且所述應(yīng)用程序以函數(shù)調(diào)用的方式調(diào)用所述子程序。優(yōu)選地,在上述方法中,所述應(yīng)用程序和子程序是可更新的。更好地,所述應(yīng)用程序和子程序通過系統(tǒng)可編程或應(yīng)用可編程方式更新。優(yōu)選地,在上述方法中,所述子程序以加密保護(hù)的形式存儲在5所述程序存儲器內(nèi)。按照本發(fā)明的另一個方面,提供了一種可配置的纟敖控制器,包括中央處理單元、數(shù)據(jù)存儲器、程序存儲器、輸入/輸出端口和定時器,其中,所述程序存儲器內(nèi)存儲多個子程序,所述子程序用于實現(xiàn)硬件電路的功能并且可被由所述中央處理單元執(zhí)行的應(yīng)用程序調(diào)用。優(yōu)選地,在上述微控制器中,所述硬件電路為輸入輸出設(shè)備接口。更好地,所述輸入輸出設(shè)備接口為液晶顯示器并行接口電路、發(fā)光二極管數(shù)碼管接口電路、電容式感應(yīng)鍵接口電路或鍵盤接口電路中的至少一種。優(yōu)選地,在上述微控制器中,所述硬件電路為通信接口。更好地,所述通信接口為通用異步收發(fā)器、12C接口電路、SPI接口電路和單總線接口電路中的至少一種。優(yōu)選地,在上述微控制器中,所述硬件電路為脈沖寬度調(diào)制電路、數(shù)模/模數(shù)轉(zhuǎn)換器、電壓比較電路、溫度測量電路中的至少一種。優(yōu)選地,在上述微控制器中,所述數(shù)據(jù)存儲器為隨機存取存儲器,所述程序存儲器為只讀存儲器或快閃存儲器。優(yōu)選地,在上述微控制器中,所述微控制器基于哈佛架構(gòu)。優(yōu)選地,在上述微控制器中,所述微控制器基于馮*諾依曼架構(gòu)。優(yōu)選地,在上述^f敬控制器中,所述程序存儲器包括多個快速存儲器,其中兩個分別用于存儲引導(dǎo)程序和所述子程序。更好地,所述引導(dǎo)程序支持系統(tǒng)可編程或應(yīng)用可編程功能。或者更好地,存儲所述子程序的快速存儲器是受加密保護(hù)的。優(yōu)選地,在上述微控制器中,所述程序存儲器包括一個劃分為多個區(qū)域的快閃存儲器,引導(dǎo)程序和所述子程序被存儲在不同的所述區(qū)域內(nèi)。按照本發(fā)明的實施例,將實現(xiàn)硬件電路功能的子程序來替代集成在微控制器內(nèi)的數(shù)字和模擬電路,因此降低了微控制器的設(shè)計難度和制造成本。此外,由于通過軟件升級即可擴展和改變微控制器的功能,因此與在《敖控制器內(nèi)集成硬件電路的方式相比,在可擴展性和開發(fā)的便利性方面具有明顯的優(yōu)勢。還有,隨著處理器性能的不斷提高,其計算能力變得越來越強大,本發(fā)明的實施例利用軟件程序來實現(xiàn)硬件電路的功能可以充分挖掘處理器的計算資源,從而6進(jìn)一步提高系統(tǒng)的性價比。附圖簡述本發(fā)明的上述和/或其它方面和優(yōu)點將通過以下結(jié)合附圖的各個方面的描述變得更加清晰和更容易理解,附圖包括圖1示出了一種典型的集成了數(shù)字電路和模擬電路的微控制器的架構(gòu)圖。圖2示出了按照本發(fā)明一個實施例的可配置的微控制器的功能框圖。圖3a和3b示出了圖2所示微控制器的存儲器的組織形式。圖4示出了在圖2所示微控制器內(nèi)運行的軟件的分層模型。圖5為虛擬硬件子程序的調(diào)用過程示意圖。圖6示出來利用虛擬硬件子程序來實現(xiàn)脈沖寬度調(diào)制電路功能的模型框圖。圖7a和7b示出來利用虛擬硬件子程序來實現(xiàn)I2C接口電路功能的模型框圖,其中,圖7a示出的是微控制器作為主設(shè)備的情形,圖7b示出的是微控制器作為從設(shè)備的情形。圖8為利用虛擬硬件子程序來實現(xiàn)通用異步收發(fā)器電路功能的才莫型框圖。圖9a和9b分別示出了利用虛擬硬件子程序?qū)崿F(xiàn)數(shù)模轉(zhuǎn)換功能和模數(shù)轉(zhuǎn)換功能的才莫型框圖。圖10示出了利用虛擬硬件子程序?qū)崿F(xiàn)溫度測量功能的模型框圖。圖11示出了利用虛擬硬件子程序?qū)崿F(xiàn)電容式感應(yīng)鍵捕獲功能的模型框圖。圖12a和12b示出了利用虛擬硬件子程序?qū)崿F(xiàn)鍵盤鍵值讀取功能的模型框圖。圖13示出了利用虛擬硬件子程序?qū)崿F(xiàn)液晶顯示器接口功能的模型框圖。具體實施例方式在以下的詳細(xì)討論中,借助文字描述和附圖來闡述本發(fā)明的各個不同方面,這些方面僅以示意性例子的方式給出,并且可以是本7發(fā)明一個或者多個示范性實施例。對于本領(lǐng)域中的技術(shù)人員來說,在不背離本發(fā)明的精神或范圍的前提下,可以以各種不同的方法來改動所述的各個方面。,在下面的描述中,除非特別說明,微控制器和微控制器芯片是可以互換4吏用的術(shù)語。此外,通用輸入/輸出端口(GPIO)指的是一種可進(jìn)行各種定制連接的并行接口,其一般包含多個端口引腳或端口線,例如8個端口引腳。按照本發(fā)明的一個方面,在微控制器的程序存儲器內(nèi)存儲了一類特殊的子程序供微控制器的中央處理單元調(diào)用執(zhí)行,這類特殊的子程序通過調(diào)用各種資源來實現(xiàn)硬件電路功能,從而替代設(shè)置于微控制器內(nèi)部的硬件電路或者外接于微控制器外部的硬件電路,以下又將這類子程序稱為虛擬硬件子程序。上面所述的硬件電路應(yīng)當(dāng)廣義理解為可實現(xiàn)一定電路功能的物理裝置或設(shè)備,例如通過光刻工藝在芯片上形成的圖案和焊接在印刷電路板上并通過布線相連的若干分立元件,包括但不限于諸如液晶顯示器并行接口電路、發(fā)光二極管數(shù)碼管接口電路、電容式感應(yīng)鍵接口電路或鍵盤接口電路之類的輸入輸出設(shè)備接口、諸如通用異步收發(fā)器、I2C接口電路和SPI接口電路之類的通信接口以及數(shù)字脈沖寬度調(diào)制電路、數(shù)模/模數(shù)轉(zhuǎn)換器、電壓比較電路、溫度測量電路等。值得指出的是,可供上述虛擬硬件子程序訪問或調(diào)用的資源包括但不限于在孩£控制器內(nèi)一般都配置的定時器/計數(shù)器、I/O端口、靜態(tài)隨機存儲器、中斷系統(tǒng)和看門狗定時器等。一般而言,為了能夠?qū)崿F(xiàn)硬件電路的功能,虛擬硬件子程序往往需要訪問或調(diào)用微控制器內(nèi)的多個資源;此外,微控制器內(nèi)的資源越豐富,則虛擬硬件子程序能夠仿真或模擬更多的硬件電路。圖2示出了按照本發(fā)明一個實施例的可配置的凝:控制器的功能框圖。如圖2所示,該微控制器200包括中央處理單元210、靜態(tài)隨才幾存儲器(RAM)211a和211b、中斷控制邏輯212、可編程定時器/計數(shù)器213a和213b、看門狗(WDT)定時器214、晶體振蕩器215、通用異步收發(fā)器216、快閃存儲器(FLASH)217a~217e、多個8位通用輸入/輸出端口218a~218d和安全加鎖單元(security1ock)219。在圖2所示的微控制器200中,中夾處理單元210、RAM211a和211b、中斷控制邏輯212、可編程定時器/計數(shù)器213a和213b、看門狗定時器214、晶體振蕩器215、通用異步收發(fā)器216、快閃存儲器217a-217e、通用輸入/輸出端口218a~218d和安全加鎖單元219通過總線互聯(lián),而中斷控制邏輯212和晶體振蕩器215與中央處理單元210直接相連。值得指出的是,圖2所示的微控制器基于馮"若伊曼結(jié)構(gòu),但是由下面的描述將可以理解,完全可以將本發(fā)明利用虛擬硬件子程序來實現(xiàn)硬件電路功能的概念應(yīng)用于基于哈佛結(jié)構(gòu)或其他架構(gòu)的微控制器。此外,從下面的描述還將看到,本發(fā)明對于釆用CISC指令集和RISC指令集的微控制器都是適合的。在圖2中,中央處理單元210基于典型處理器的架構(gòu),例如8051處理器核,其包括算術(shù)邏輯單元(ALU)、累加器(ACC)、指令寄存器、程序計數(shù)器以及時序和控制邏輯等,用于順序操作和控制與RAM211a和211b之間的數(shù)據(jù)傳輸,并且還可實現(xiàn)對通用輸^/輸出端口218a~218d的控制。有關(guān)中央處理單元210內(nèi)部結(jié)構(gòu)的詳細(xì)描述例如可參見《8051微控制器教程》(第3版)(清華大學(xué)出版社2005年12月1日出版),此處不再贅述。中斷控制邏輯212將各種中斷請求信號傳送給中央處理單元210以響應(yīng)特定事件的發(fā)生。可編程定時器/計數(shù)器213a和213b為16位寄存器,它們可內(nèi)部定時,也可外部計數(shù),可一次性工作,計滿后發(fā)中斷請求,也可以自動連續(xù)計數(shù)??撮T狗定時器214用于軟件死鎖時的安全失效保護(hù)和自動恢復(fù)。晶體振蕩器215用于向中央處理單元210提供時鐘基準(zhǔn)信號,在某些應(yīng)用下,可以為晶體振蕩器215配備除頻電路,或者,可以用一組晶體振蕩器替代單個晶體振蕩器212,從而提供多個時鐘基準(zhǔn)信號。通用異步收發(fā)器216是一個全雙工端口,其允許通過發(fā)送寄存器和接收寄存器同時進(jìn)行數(shù)據(jù)的發(fā)送和接收。發(fā)送寄存器和接收寄存器皆位于串行數(shù)據(jù)緩沖器(SBUF)特殊功能寄存器內(nèi)。對SBUF寄存器的寫操作將加載發(fā)送寄存器的數(shù)據(jù),而對SBUF的讀操作將獲取接收寄存器的內(nèi)容。此外,還可以利用通用異步收發(fā)器216來改寫快閃存儲器217a217d的內(nèi)容,從而實現(xiàn)系統(tǒng)可編程(ISP)或應(yīng)用可編程(IAP)功能。在圖2所示的微控制器200中快閃存儲器217a~217e用于存儲所執(zhí)行的程序,而RAM211a和211b被用于臨時存儲中央處理單元210執(zhí)行的指令和執(zhí)行過程中涉及的數(shù)據(jù),并且程序和數(shù)據(jù)存儲器被分配分立的地址空間。以下借助附圖對微控制器200的存儲器的組織形式(organization)作詳纟田4笛述。圖3a和3b示出了圖2所示微控制器的存儲器的組織形式,其中,圖3a為快閃存儲器217a~217e的組織形式示意圖,而圖3b為RAM211a和211b的組織形式示意圖。如圖3a所示,快閃存儲器217a分配的地址為43FFh~4000h,其容量為1K字節(jié),用于存儲引導(dǎo)的裝載程序和擦除/燒錄快閃存儲器217b~217d的子程序等,支持在系統(tǒng)中編程(ISP)和在應(yīng)用中編程(IAP)。當(dāng)微控制器200上電時,其首先執(zhí)行快閃存儲器217a中存儲的程序,如果引導(dǎo)程序判斷不滿足外部改寫程序的條件,則程序指針將指向其他快閃存儲器內(nèi)存儲的程序(例如快閃存儲器217e內(nèi)存儲的應(yīng)用程序),微控制器200開始執(zhí)行程序指針指向的程序;否則,則允許通過通用異步收發(fā)器216對快閃存儲器217b~217e施行寫入操作。如圖3a所示,快閃存儲器217b217e的存儲容量皆為4K字節(jié),它們被分配的地址空間依次為3FFFh~3000h、2FFFh~2000、lFFFh~1000h和0FFFh0000h。雖然分配給快閃存儲器217a~217e的地址空間是連續(xù)的,但是這并不意味著它們在物理上是一塊連續(xù)的存儲區(qū)。'在本實施例中,為了實現(xiàn)對部分程序的加密保護(hù),快閃存儲器217a~217e在微控制器200內(nèi)被設(shè)置為分立的存儲器或獨立進(jìn)行讀寫操作的存儲電路。顯然,當(dāng)無加密保護(hù)要求時,也可以考慮采用一個被劃分為多個存儲區(qū)域的快閃存儲器來代替上述多個快閃存儲器??扉W存儲器217b用于存儲實現(xiàn)硬件電路功能的虛擬硬件子程序;快閃存儲器217c被仿真為EEPROM使用,其中的IK字節(jié)作為保留區(qū)域?qū)iT供虛擬硬件子程序使用,另外的3K字節(jié)則供用戶程序使用;快閃存儲器217d和217e都向系統(tǒng)開發(fā)用戶開放,其中,快閃存儲器217d用于存儲下面將作進(jìn)一步描述的應(yīng)用功能庫,而快閃存儲器217e用于存儲其他程序,例如操作系統(tǒng)和用戶開發(fā)的10應(yīng)用程序等。為了防止非法拷貝,對存儲了虛擬硬件子程序和應(yīng)用功能庫的快閃存儲器217b和217d進(jìn)行加密保護(hù)。在圖2所示的微控制器中,對程序的加密保護(hù)是借助安全加鎖單元219來實現(xiàn)的,該單元通過阻止指令MOVC對加密存儲空間的4喿作來達(dá)到加密保護(hù)的目的。某些商用的微控制器芯片已經(jīng)提供了上述安全加鎖機制,例如位于美國加利福尼亞州的超捷(SiliconStorageTechnology)股份有限公司提供的型號為SST89E52RC芯片。虛擬硬件子程序在運行過程中可能需要執(zhí)行查表操作,但是由于受到加密保護(hù)的存儲器無法利用MOVC指令訪問,因此在圖2所示的微控制器200內(nèi),需要額外占用非加密的存儲器來存放查表類數(shù)據(jù)。為此,這里將快閃存儲器217c中容量為1K的保留區(qū)域作為查表類數(shù)據(jù)的存儲區(qū)域,以供虛擬硬件子程序通過EEPROM訪問命令來調(diào)用。參見圖3b,RAM211a為內(nèi)部RAM,分配的地址為00h~FFh,其可利用MOV指令訪問以供用戶程序使用;RAM211b為擴展RAM,分配的地址亦為00h~FFh,但其只能利用MOVX指令間接訪問并且由特定寄存器的標(biāo)志位控制其使能狀態(tài),在圖2所示的微控制器內(nèi),該存儲器僅供存儲在快閃存儲器217b內(nèi)的虛擬硬件子程序使用。應(yīng)當(dāng)理解的是,上述使用戶程序和虛擬硬件子程序運行在不同的靜態(tài)隨機存儲器內(nèi)的配置僅是特例而非必須如此,因為這兩類程序是否加載到不同的靜態(tài)隨機存儲器并不會對硬件電路功能的實現(xiàn)有實質(zhì)性的影響。通用輸^v/輸出端口218a218d為8位I/0端口(即,每個通用輸^/輸出端口包含8個端口引腳或端口線),可以位選輸入/輸出方式。通用輸入/輸出端口218a218d經(jīng)由總線與獨L控制器200內(nèi)的其他單元互聯(lián),其提供了凝:控制器200與外部設(shè)備之間的通用接口。在中央處理單元210的控制下,可以在一個端口的其中一個引腳上發(fā)送所需的輸出信號或者從一個端口的其中一個引腳接收來自外部設(shè)備的輸入信號。圖4示出了在圖2所示微控制器內(nèi)運行的軟件的分層模型。如圖4所示,所運行的軟件由下向上被劃分為三層,其中,最底層為引導(dǎo)程序、操作系統(tǒng)和實現(xiàn)硬件電路功能的虛擬硬件庫,它們可直接對硬件進(jìn)行操作;中間層為應(yīng)用功能庫;最上層為應(yīng)用程序。對于基于4位、8位和16位微控制器的控制領(lǐng)域(例如冰箱、洗衣機、微波爐等家電控制),一般可以不釆用操作系統(tǒng),此時最底層由引導(dǎo)程序和虛擬硬件庫組成。如上所述,引導(dǎo)程序存儲在快閃存儲器217a內(nèi),其主要任務(wù)是完成系統(tǒng)啟動之前必要的硬件初始化和操作系統(tǒng)的加載,并且管理ISP/IAP協(xié)議和控制對快閃存儲器217b217e的讀寫和加密操作。操作系統(tǒng)存儲在快閃存儲器217d或217e內(nèi),在本實施例中可以采用各種嵌入式操作系統(tǒng),例如VxWorks操作系統(tǒng)、基于Linux內(nèi)核的系統(tǒng)、WindowsCE操作系統(tǒng)和基于^C/OS—II內(nèi)核的系統(tǒng)。虛擬硬件庫包含多個可被中間層和最上層的軟件調(diào)用的子程序,這些子程序以加密形式被存儲在快閃存儲器217b內(nèi),其入口地址以向量列表方式存儲在特定的位置,例如前述快閃存儲器217c的1K字節(jié)的保留區(qū)域內(nèi)。每個虛擬硬件子程序用于完成一種硬件電路功能,其實際上是一段調(diào)用各種資源來實現(xiàn)特定的硬件電路功能的代碼。為了提高代碼效率和執(zhí)行速度,虛擬硬件子程序可采用匯編語言編寫。此外,為方^f更應(yīng)用系統(tǒng)的開發(fā),上層的應(yīng)用功能庫和應(yīng)用程序一般都采用高級語言(例如C51)開發(fā),由于這類語言都提供了對匯編語言編寫的子程序進(jìn)行調(diào)用的功能,因此實現(xiàn)了混合編程。在本發(fā)明中,可以根據(jù)應(yīng)用系統(tǒng)的需要,通過編寫不同的虛擬硬件子程序,對微控制器需要實現(xiàn)的硬件電路功能的種類和數(shù)量靈活地進(jìn)行定義。例如,作為一個完整的嵌入式系統(tǒng),一般都包含諸如小鍵盤和電容式感應(yīng)鍵之類的輸入設(shè)備和諸如液晶顯示器、發(fā)光二極管顯示屏之類的輸出設(shè)備,為此,可以編制用于實現(xiàn)液晶顯示器并行接口電路、發(fā)光二極管數(shù)碼管接口電路、電容式感應(yīng)鍵接口電路或鍵盤接口電路等硬件電路的虛擬硬件子程序并存儲在快閃存儲器217b以供調(diào)用。又如,應(yīng)用系統(tǒng)一般需要按照某些協(xié)議與外部設(shè)備進(jìn)行通信,因此在本實施例的微控制器.中,也可以提供用于實現(xiàn)常用通信接口(例如通用異步收發(fā)器、I2C接口電路、SPI接口和單總線(l-wire)接口)的功能的虛擬硬件子程序。此外,為了滿足測量應(yīng)用,還可在本實施例的微控制器中提供用于實現(xiàn)數(shù)模/模數(shù)轉(zhuǎn)換、脈沖寬度調(diào)制、電壓比較和溫度測量等功能的虛擬硬12件子程序。此外,在圖4所示的分層模型中,底層硬件的驅(qū)動功能全部被封裝在最底層,這使得系統(tǒng)開發(fā)人員無需關(guān)注底層硬件的具體驅(qū)動細(xì)節(jié),從而加快了應(yīng)用系統(tǒng)的開發(fā)速度,降低了開發(fā)工作量。另夕卜,由于在微控制器內(nèi)提供了ISP和IAP功能,因此隨時升級更新虛擬硬件庫。如圖4所示,中間層為應(yīng)用功能庫,其介于應(yīng)用程序與虛擬硬件庫和操作系統(tǒng)之間,通常包含一組針對某一類應(yīng)用(例如電飯煲、微波爐等小家電的控制系統(tǒng))并且可被最上層的應(yīng)用程序調(diào)用的程序模塊,這些程序模塊以加密形式被存儲在快閃存儲器217d內(nèi),其調(diào)用地址以向量列表方式存儲在特定的位置,例如快閃存儲器217c的其余3K字節(jié)的區(qū)域內(nèi)。應(yīng)用功能庫為上層的應(yīng)用軟件提供運行與開發(fā)的環(huán)境,可幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用程序;此外,由于其通常針對特定類型的應(yīng)用場合開發(fā),因此有助于提高軟件的復(fù)用性。圖4所示分層模型的最上層為應(yīng)用系統(tǒng)開發(fā)廠商編寫的應(yīng)用軟件,其被存儲在快閃存儲器217e內(nèi)并且可調(diào)用虛擬硬件庫和應(yīng)用功能庫的子程序。圖5為虛擬硬件子程序的調(diào)用過程示意圖。此處應(yīng)用程序采用C51語言編寫,而虛擬硬件子程序采用匯編語言編寫。如圖5所示,應(yīng)用程序作為主程序,與虛擬硬件庫開發(fā)商提供的頭文件同屬于用戶程序空間;虛擬^便件子程序的入口地址表和編譯后的子程序代碼則位于虛擬硬件子程序的存儲空間。頭文件中定義有虛擬硬件子程序的入口地址表的存儲位置,應(yīng)用程序中的調(diào)用函數(shù)VMLF1()從頭文件中獲取入口地址表的存儲地址,進(jìn)而根據(jù)入口地址表查找到被調(diào)用虛擬硬件子程序代碼的地址,并將程序指針跳轉(zhuǎn)到該地址。于是,被調(diào)用虛擬硬件子程序的代碼加載到RAM211b內(nèi)執(zhí)行,而執(zhí)行的結(jié)果則返回給應(yīng)用程序。以下給出一個調(diào)用虛擬硬件子程序的示意性實例,所調(diào)用的子程序用于將前述通用輸入/輸出端口上輸入的電信號轉(zhuǎn)換為溫度值,函數(shù)原型為unsignedcharTempl叩ut(void)。xy:"〃fm丄掙;tW興義斧,逸含7岸孩^聲坊13MW^gnec/c/a/"/e附;—va/we;//,效濕>^值寬#vfl/we=rew;/";wW,'〃源^溫《刺f子擺^,遽歐溫^值7圖6示出來利用虛擬硬件子程序來實現(xiàn)脈沖寬度調(diào)制電路功能的模型框圖。該模型提供兩個脈沖輸出子程序或函數(shù),它們分別可編程定時器213a和213b的資源,通過定時器中斷方式來控制端口引腳PWM和PWM2上的高電平和低電平持續(xù)時間,以輸出頻率和占空比可變的脈寬調(diào)制脈沖,這里的端口引腳PWM和PWM2選自通用輸入/輸出端口218a218d。上述子程序的函數(shù)原型為voidPWMOutput(unsignedintfrequency,unsignedcharduty)和voidPWM20utput(unsignedintfrequency,unsignedcharduty),函數(shù)參數(shù)中的fr叫為頻率,duty為高電平的占空比。相應(yīng)地,該模型還提供有停止在端口引腳PWM和PWM2上的脈沖輸出的兩個函數(shù),函數(shù)原型分別為voidPWMOff(void)和voidPWM20ff(void)。由上可見,圖2所示的微控制器200內(nèi)雖然并未內(nèi)置單獨的脈沖寬度調(diào)制電路,但是虛擬硬件子程序可以利用定時器和端口資源,輸出寬度受到調(diào)制的脈沖信號。圖7a和7b示出來利用虛擬硬件子程序來實現(xiàn)12C接口電路功能的模型框圖,其中,圖7a示出的是微控制器作為主設(shè)備的情形,圖7b示出的是微控制器作為從設(shè)備的情形。在圖7a所示的模型中,提供了數(shù)據(jù)發(fā)送和數(shù)據(jù)輸出兩個子程序或函數(shù),這些子程序在RAM211b內(nèi)創(chuàng)建發(fā)送數(shù)據(jù)或接收數(shù)據(jù)的緩沖區(qū),其中,發(fā)逸數(shù)據(jù)的子程序經(jīng)端口引腳SCL和SDA發(fā)送緩沖區(qū)的數(shù)據(jù),接收數(shù)據(jù)的子程序從端口引腳SCL和SDA上接收數(shù)據(jù)并存儲到緩沖區(qū)內(nèi),這里的端口引腳SCL和SDA選自通用輸入/輸出端口218a~218d。上述函數(shù)的原型分別為unsignedchar12CMasterDataTx(unsignedcharn,unsignedchar氺buffer)和unsignedchar12CMasterDataRx(unsignedcharn,unsignedcharslave—address,unsignedchar*buffer),函數(shù)參數(shù)中的n為需發(fā)送或接收的字節(jié)數(shù),buffer為數(shù)據(jù)緩沖區(qū)指針,函數(shù)的返回值為0或1以表示操作成功與否。在圖7b所示的模型中,提供了從機初始化、數(shù)據(jù)發(fā)送和數(shù)據(jù)輸出三個子程序或函數(shù)。用于從機初始化的函數(shù)的原型為void12CSlavelnit(unsignedcharslave—addr),函數(shù)參數(shù)slave—addr為從機地址。發(fā)送和接收數(shù)據(jù)的子程序在RAM211b內(nèi)申請j儲區(qū)域作為發(fā)送數(shù)據(jù)或接收數(shù)據(jù)的緩沖區(qū),其中,發(fā)送數(shù)據(jù)的子程序經(jīng)端口引腳SCL和SDA發(fā)送緩沖區(qū)的數(shù)據(jù),接收數(shù)據(jù)的子程序從端口引腳SCL和SDA上接收數(shù)據(jù)并存儲到緩沖區(qū)內(nèi),這里的端口引腳SCL和SDA選自通用輸入/輸出端口218a~218d。如圖7b所示,發(fā)送和接收數(shù)據(jù)的函凄t的原型分別為unsignedchar12CSlaveDataTx(unsignedcharn,unsignedchar*buffer)和unsignedchar12CSlaveDataRx(unsignedcharn,unsignedcharslave—address,unsignedchar*buffer),函數(shù)參數(shù)中的n為需發(fā)送或接收的字節(jié)數(shù),buffer為數(shù)據(jù)緩沖區(qū)指針,函數(shù)的返回值為0或1以表示操作成功與否。利用微控制器200內(nèi)的靜態(tài)隨機存儲器和端口的資源,SPI接口、PS2接口和單總線(1-wire)接口的功能也可以軟件方式來實現(xiàn),因此圖7a和7b所示的模型也適于這些接口的虛擬硬件子程序。對于通用異步收發(fā)器電路,除了靜態(tài)隨機存儲器和端口的資源以外,還需要利用定時器。圖8為利用虛擬硬件子程序來實現(xiàn)通用異步收發(fā)器電路功能的模型框圖。該模型提供多個子程序,用于初始參數(shù)的設(shè)置和數(shù)據(jù)的發(fā)送和接收。在圖8所示的模型中,設(shè)置初始參數(shù)的子程序的函數(shù)原型為voidUARTInit(unsignedcharmode,unsignedintbaud,unsignedcharparity),函數(shù)參數(shù)mode為工作方式,baud為波特率,parity為校驗碼;當(dāng)通用異步收發(fā)器作為從機使用時,設(shè)置初始參數(shù)的子程序的函數(shù)原型為voidUARTSlaveSet(unsignedcharsaddr,unsignedcharsaden),函數(shù)參數(shù)saddr和saden分別為從機地址和地址掩碼。在多機通訊時用于主機發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的子程序的函數(shù)原型分另'J為unsignedcharUARTMasterDataTx(unsignedcharsadid,unsignedcharn,unsignedchar傘buffer)和unsignedcharUARTDataRx15200810033(unsignedcharn,unsignedcharovertime,unsignedchar*buffer),其功能是將數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)在端口引腳TXD上發(fā)送或者將端口引腳RXD上接收的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū),函數(shù)參數(shù)sadid為從機識別地址,n為需發(fā)送的字節(jié)數(shù),buffer為需發(fā)送的數(shù)據(jù)緩沖區(qū)指針,overtime為超時時間,函數(shù)的返回值為0或1以表示纟喿作成功與否。在多機通訊時用于從機發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的子程序的函數(shù)原型分另'J為voidUARTDataTx(unsignedcharn,unsignedchar*buffer)和unsignedcharUARTSlaveDataRx(unsignedcharn,unsignedcharovertime,unsignedchar*buffer),其功能是將數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)在端口引腳TXD端口上發(fā)送或者將端口引腳RXD上接收的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū),函數(shù)參數(shù)n為需發(fā)送的字節(jié)數(shù),buffer為需發(fā)送的數(shù)據(jù)緩沖區(qū)指針,overtime為超時時間,函數(shù)的返回值為O或1以表示操作成功與否。用于中斷發(fā)送數(shù)據(jù)和中斷接收數(shù)據(jù)的子程序的函數(shù)原型分別為voidUARTIntTx(unsignedcharn,unsignedchar承buffer)和unsignedcharUARTIntRx(unsignedcharn,unsignedchar*buffer),函數(shù)參數(shù)n為需發(fā)送或接收的字節(jié)數(shù),buffer為需發(fā)送或接收的數(shù)據(jù)緩沖區(qū)指針。在圖8所示的模型中,數(shù)據(jù)緩沖區(qū)在RAM211b內(nèi)創(chuàng)建,端口引腳TXD和RXD選自通用輸入/輸出端口218a~218d??梢岳锰摂M硬件子程序在圖2所示微控制器200內(nèi)實現(xiàn)數(shù)模/模數(shù)轉(zhuǎn)換功能。圖9a和9b分別示出了實現(xiàn)數(shù)模轉(zhuǎn)換功能和模數(shù)轉(zhuǎn)換功能的模型框圖。如上所述,虛擬硬件子程序可利用可編程定時器213a或213b的資源,在端口上輸出頻率和占空比可變的脈寬調(diào)制脈沖。參見圖9a,微控制器200經(jīng)端口引腳D/A(選自通用輸入/輸出端口218a~218d)外接有低通濾波電路(例如RC低通濾波電路),因此虛擬硬件子程序DAOutput()產(chǎn)生輸入該低通濾波電路的脈寬調(diào)制脈沖,該脈沖信號經(jīng)過低通濾波后即獲得模擬輸出電壓,這里,虛擬硬件子程序DAOutput()可通過調(diào)節(jié)脈沖的頻率和占空比來控制模擬輸出電壓的大小。參見圖9b,微控制器200的端口引腳A/D(選自通用輸入/輸出端口218a218d)外接有充電電路(例如簡單的RC充電電路),16虛擬硬件子程序ADI叩ut()通過充電時間的長短來確定端口引腳上輸入的模擬電壓的值。以下進(jìn)一步描述模數(shù)轉(zhuǎn)換原理。首先,虛擬硬件子程序ADI叩ut()通過使電容C完全放電,將端口引腳A/D設(shè)置為低電平。接著,使該端口引腳轉(zhuǎn)為輸入狀態(tài)并利用可編程定時器213a或213b開始計時,與此同時模擬輸入電壓開始經(jīng)電阻R對電容C充電。虛擬硬件子程序ADI叩ut()周期性地;險測端口引腳A/D的電壓,并且在達(dá)到高電平門限電壓時停止計時。最后,虛擬硬件子程序ADInput()通過查表方式確定與充電時間相對應(yīng)的模擬輸入電壓值,從而實現(xiàn)A/D轉(zhuǎn)換過程。如上所述,充電時間與模擬輸入電壓值的對應(yīng)關(guān)系表可以存儲在靜態(tài)隨機存儲器217c供虛擬硬件子程序使用的保留區(qū)域內(nèi)。圖10示出了利用虛擬硬件子程序?qū)崿F(xiàn)溫度測量功能的模型框圖。孩i控制器200的端口引腳PRK、PRT和PR1(選自通用輸X/輸出端口218a218d)按照圖10所示方式外接有RC充電電路,虛擬硬件子程序Templnput()通過比較熱敏電阻Rt和標(biāo)準(zhǔn)電阻Rk充電時間的長短來確定阻值的變化量,再通過查表方式確定溫度值。以下進(jìn)一步描述溫度測量的原理。首先在虛擬硬件子程序Templ叩ut()的控制下,端口引腳PRK、PRT和PR1被設(shè)置為低電平輸出以使電容器C1完全放電。接著,虛擬硬件子程序Templnput()將端口引腳PR1置為輸入,端口引腳PRT置為低電平,端口引腳PRK置為高電平輸出,由此通過標(biāo)準(zhǔn)電阻Rk對電容器Cl充電并使可編程定時器213a或213b開始計時。當(dāng)虛擬硬件子程序Templnput()檢測到端口引腳PR1的狀態(tài)為高電平時,停止計時并記錄下第一充電時間timel。隨后,虛擬硬件子程序Templnput()再次將端口引腳PRK、PRT和PR1置低電平輸出,使電容器C1完全放電。接著,虛擬硬件子程序Templnput()將端口引腳PR1置為輸入,端口引腳PRK置為低電平,端口引腳PRT置為高電平輸出,由此通過熱敏電阻Rt對電容器Cl充電并使可編程定時器213a或213b開始計時。當(dāng)虛擬硬件子程序Templnput()檢測到端口引腳PR1狀態(tài)為高電平時,停止計時并記錄下第二充電時間time2。接著,虛擬硬件子程序Templnput()根據(jù)下式計算出熱敏電阻Rt的阻值這里,Rt和Rk分別為熱敏電阻Rt和標(biāo)準(zhǔn)電阻Rk的阻值。最后,虛擬硬件子程序Templnput()根據(jù)存儲在靜態(tài)隨M儲器217c保留區(qū)域內(nèi)的熱敏電阻特性曲線,通過查表方式確定溫度值。圖11示出了利用虛擬硬件子程序?qū)崿F(xiàn)電容式感應(yīng)鍵狀態(tài)判定功能的模型框圖。參見圖11,按照圖6所示的方式,虛擬硬件子程序CapkeyGetKey()在微控制器200的端口引腳PPn上輸出脈沖方波,該脈沖方波作為圖11右邊所示倍壓檢波電路的信號源;端口引腳CPn作為輸入檢測口,其與倍壓檢波電路的輸出端相連這樣。這里,端口引腳PPn和CPn選自通用輸入/輸出端口218a~218d。以下描述電容式感應(yīng)鍵狀態(tài)的檢測原理。在虛擬」便件子程序CapkeyGetKey()的控制下,端口引腳PPn輸出的脈沖方波通過電容C3向電容C1充電。感應(yīng)式電容開關(guān)基本上可以視為是兩個相鄰導(dǎo)體(電極)形成的電容器,當(dāng)手指按下電容式感應(yīng)鍵時,將如圖11所示產(chǎn)生一個電容Cx,該電容將使得端口引腳PPn輸出的脈沖信號無法向電容Cl充電,由此使得端口引腳CPn上的電平將由低變高。當(dāng)虛擬硬件子程序CapkeyGetKey()在端口引腳CPn上^r測到高電平時,即記錄充電時間并停止端口引腳PPn上的脈沖輸出。此時,電容C1開始經(jīng)R1放電,導(dǎo)致端口引腳CPn上的電壓下降。當(dāng)虛擬硬件子程序CapkeyGetKey()檢測到端口引腳CPn上為低電平時,記錄放電時間。最后,虛擬硬件子程序CapkeyGetKey()根據(jù)所記錄的充電時間和放電時間確定電容式感應(yīng)鍵是否被按下,并在端口引腳PPn上重新輸出脈沖方波。為了提高判定準(zhǔn)確度,可以多次重復(fù)上述檢測過程并對多個檢測結(jié)果取平均值。圖12a和12b示出了利用虛擬硬件子程序?qū)崿F(xiàn)鍵盤鍵值讀取功能的模型框圖。參見圖12a,矩陣式鍵盤的N列線和N行線與微控制器的2x18xN個端口引腳(選自通用輸入/輸出端口218a~218d)—一相連,虛擬硬件子程序KeyboardGetKey()首先將所有的行線(即連接行線的端口引腳)置低電平,然后檢測列線(即連接列線的端口引腳)的狀態(tài),若有列線為低電平,則虛擬硬件子程序KeyboardGetKey()判定與該列線對應(yīng)的鍵被按下。圖12b示出了利用4個端口引腳實現(xiàn)3x3矩陣式鍵盤的鍵值讀取的方式。在圖12b中,三根行線與端口引腳PL1PL3——相連,列線經(jīng)三極管放大電路與端口引腳KIN相連。這里,端口引腳PL1~PL3和KIN選自通用輸入/輸出端口218a~218d。以下詳細(xì)描述鍵值讀取的原理。首先,虛擬硬件子程序Keyboard2GetKey()將端口引腳PR1PR3設(shè)置為低電平輸出,KIN設(shè)置為輸入,初始狀態(tài)為高電平,三極管Ql導(dǎo)通。當(dāng)有鍵按下時,三極管Ql截止,端口引腳KIN上為低電平。然后將端口引腳PR1PR3設(shè)置為高電平輸出,三極管Q1導(dǎo)通,端口引腳KIN為高電平。分別依次將端口引腳PR1、PR2、PR3設(shè)為輸出低電平,其余為輸入,每次讀入PR1PR3以及KIN的端口值。如果其中出現(xiàn)三極管Ql截止,KIN為低電平,則將此次的端口值與下列編碼表比較,即可獲得鍵值。<table>tableseeoriginaldocumentpage19</column></row><table>圖13示出了利用虛擬硬件子程序?qū)崿F(xiàn)液晶顯示器接口功能的模型框圖。參見圖13,端口引腳D0D7與1602字符型液晶模塊的數(shù)據(jù)線引腳相連,端口引腳RS、RW和E分別與1602字符型液晶模塊的寄存器選擇引腳、讀寫型號引腳和使能端相連。虛擬硬件子程序LCDDisplay()借助端口引腳RS、RW和E上的控制信號,將端口引腳D0~D7上的數(shù)據(jù)寫入1602字符型液晶模塊,從而在液晶顯示模塊上顯示所需的字符。上述虛擬硬件子程序的函數(shù)原型為voidLCDDisplay(unsignedcharrow,unsignedcharcol,unsignedcharn,unsignedchar*buffer),函數(shù)參數(shù)row表示字符顯示的起始行,col表示字符顯示的起始列,n為需顯示的字節(jié)數(shù),buffer為需顯示的數(shù)據(jù)緩沖區(qū)指針。雖然已經(jīng)展現(xiàn)和討論了本發(fā)明的一些方面,但是本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)該意識到可以在不背離本發(fā)明原理和精神的條件下對上述方面進(jìn)行改變,因此本發(fā)明的范圍將由權(quán)利要求以及等同的內(nèi)容所限定。權(quán)利要求1、一種實現(xiàn)微控制器可配置性的方法,所述微控制器包括中央處理單元、數(shù)據(jù)存儲器、程序存儲器、輸入/輸出端口和定時器,其特征在于,包含下列步驟確定所需配置的硬件電路的功能;以及在所述程序存儲器內(nèi)存儲應(yīng)用程序和子程序,所述子程序用于實現(xiàn)所需配置的硬件電路的功能并且可被所述應(yīng)用程序調(diào)用。2、如權(quán)利要求1所述的方法,其中,所述應(yīng)用程序用C語言編寫,所述子程序用匯編語言編寫,并且所述應(yīng)用程序以函數(shù)調(diào)用的方式調(diào)用所述子程序。3、如權(quán)利要求1所述的方法,所述應(yīng)用程序和子程序是可更新的。4、如權(quán)利要求3所述的方法,所述應(yīng)用程序和子程序通過系統(tǒng)可編^E或應(yīng)用可編^i方式更新。5、如權(quán)利要求1所述的方法,所述子程序以加密保護(hù)的形式存儲在所述程序存儲器內(nèi)。6、一種可配置的微:控制器,包括中央處理單元、數(shù)據(jù)存儲器、程序存儲器、輸7v/輸出端口和定時器,其特征在于,所述程序存儲器內(nèi)存儲多個子程序,所述子程序用于實現(xiàn)硬件電路的功能并且可被由所述中央處理單元執(zhí)行的應(yīng)用程序調(diào)用。7、如權(quán)利要求6所述的^:控制器,其中,所述硬件電路為輸入輸出設(shè)備接口。8、如權(quán)利要求7所述的微控制器,其中,所述輸入輸出設(shè)備接口為液晶顯示器并行接口電路、發(fā)光二極管數(shù)碼管接口電路、電容式感應(yīng)鍵接口電路或鍵盤接口電路中的至少一種。9、如權(quán)利要求6所述的微控制器,其中,所述硬件電路為通信接口。10、如權(quán)利要求9所述的微控制器,其中,所述通信接口為通用異步收發(fā)器、I2C接口電路、SPI接口電路和單總線接口電路中的至少一種。11、如權(quán)利要求6所述的微控制器,其中,所述硬件電路為脈沖寬度調(diào)制電路、數(shù)模/模數(shù)轉(zhuǎn)換器、電壓比較電路、溫度測量電路中的至少一種。12、如權(quán)利要求6所述的微控制器,其中,所述數(shù)據(jù)存儲器為隨機存取存儲器,所述程序存儲器為只讀存儲器或快閃存儲器。13、如權(quán)利要求6所述的微控制器,其中,所述微控制器基于哈佛架構(gòu)。14、如權(quán)利要求6所述的微控制器,其中,所述微控制器基于馮-諾依曼架構(gòu)。15、如權(quán)利要求6所述的微控制器,其中,所述程序存儲器包括多個快速存儲器,其中兩個分別用于存儲引導(dǎo)程序和所述子程序。16、如權(quán)利要求15所述的微控制器,所述引導(dǎo)程序支持系統(tǒng)可編程或應(yīng)用可編程功能。17、如權(quán)利要求15所述的微控制器,存儲所述子程序的快速存儲器是受加密保護(hù)的。18、如權(quán)利要求6所述的微控制器,其中,所述程序存儲器包括一個劃分為多個區(qū)域的快閃存儲器,引導(dǎo)程序和所述子程序被存儲在不同的所述區(qū)域內(nèi)。全文摘要一種可低成本地實現(xiàn)微控制器的電路功能可配置的方法,微控制器包括中央處理單元、數(shù)據(jù)存儲器、程序存儲器、輸入/輸出端口和定時器,包含下列步驟確定所需配置的硬件電路的功能;以及在程序存儲器內(nèi)存儲應(yīng)用程序和子程序,子程序用于實現(xiàn)所需配置的硬件電路的功能并且可被應(yīng)用程序調(diào)用。按照本發(fā)明,以實現(xiàn)硬件電路功能的子程序來替代集成在微控制器內(nèi)的硬件電路,降低了微控制器的設(shè)計難度和制造成本。此外,由于通過軟件升級即可擴展和改變微控制器的功能,因此與在微控制器內(nèi)集成硬件電路的方式相比,在可擴展性和開發(fā)的便利性方面具有明顯的優(yōu)勢。還有,本發(fā)明利用子程序來實現(xiàn)硬件電路的功能可以充分挖掘處理器的計算資源,從而進(jìn)一步提高系統(tǒng)的性價比。文檔編號G06F15/78GK101499053SQ20081003336公開日2009年8月5日申請日期2008年1月31日優(yōu)先權(quán)日2008年1月31日發(fā)明者趙依軍申請人:上海普芯達(dá)電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宝丰县| 宣化县| 兴化市| 桦南县| 克东县| 涿鹿县| 周宁县| 瓦房店市| 天津市| 和林格尔县| 伊吾县| 海安县| 金华市| 新疆| 南部县| 田林县| 岑溪市| 宝应县| 宁陕县| 古田县| 休宁县| 扶余县| 洛浦县| 台湾省| 贵溪市| 蒙城县| 方正县| 宿迁市| 余姚市| 漳平市| 怀来县| 金阳县| 神农架林区| 治多县| 清远市| 芦溪县| 新巴尔虎左旗| 孝感市| 巴楚县| 临夏县| 凤庆县|