創(chuàng)建出色的32位微控制器應(yīng)用的四步驟
為應(yīng)用選擇合適的基于ARM內(nèi)核的微控制器(MCU)有可能是一個(gè)復(fù)雜的令人望而卻步的任務(wù)。目前基于ARM內(nèi)核的可用微控制器數(shù)量超過(guò)125款,尋找一款符合相應(yīng)外圍設(shè)備組合和性能標(biāo)準(zhǔn)的微控制器需要投入大量研究。本白皮書(shū)描述如何使用DeviceDatabase中的參數(shù)搜索引擎,為應(yīng)用快速選擇正確的MCU。
此外,使用DeviceDatabase可以在RVMDK中為選定的MCU部件配置相應(yīng)的工具。
概述
在嵌入式開(kāi)發(fā)領(lǐng)域中,對(duì)領(lǐng)先競(jìng)爭(zhēng)對(duì)手的需求,結(jié)合32位微控制器的出現(xiàn),推動(dòng)了這些部件在新產(chǎn)品中的廣泛應(yīng)用,取代過(guò)去的8位和16位微控制器。開(kāi)發(fā)人員在選擇微控制器時(shí),遵循四項(xiàng)主要標(biāo)準(zhǔn):功能、可用性、成本和熟悉程度。本文中,討論使用聯(lián)機(jī)DeviceDatabase幫助開(kāi)發(fā)人員為其應(yīng)用作出選擇。我們演示DeviceDatabase如何與RealViewMicrocontrollerDevelopmentKit微控制器開(kāi)發(fā)套件集成,使開(kāi)發(fā)人員能自動(dòng)配置他們的工具鏈,使用選定的MCU進(jìn)行開(kāi)發(fā)。
選擇問(wèn)題
今天,在選擇具備所需外圍設(shè)備組合和性能并且價(jià)格適當(dāng)?shù)腗CU時(shí),開(kāi)發(fā)人員可選的余地很大。生產(chǎn)基于ARM內(nèi)核的MCU的半導(dǎo)體公司數(shù)量超過(guò)16家,其中包括一些全球最大的MCU提供商。每家半導(dǎo)體供應(yīng)商提供的MCU不只一款,且是針對(duì)特定市場(chǎng)領(lǐng)域的一系列MCU。在編寫(xiě)本文時(shí),共有超過(guò)125款基于ARM內(nèi)核的MCU,而且該數(shù)字每周仍在不斷增長(zhǎng)。部分供應(yīng)商提供一些在線搜索工具,使開(kāi)人員能對(duì)其產(chǎn)品組合中的MCU作出比較和對(duì)比。但是如果要比較不同供應(yīng)商的MCU,它就毫無(wú)價(jià)值了。我們真正需要的是一個(gè)工具,它使開(kāi)發(fā)人員能對(duì)相同產(chǎn)品系列、不同產(chǎn)品系列和不同供應(yīng)商的MCU作出比較和對(duì)比。這正是DeviceDatabase的切入點(diǎn)。
DeviceDatabaseDevice
Database是一個(gè)可搜索數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)包含KeilTM(ARM公司)軟件開(kāi)發(fā)工具支持的各種MCU的相關(guān)信息,其中包括RealViewMicrocontrollerDevelopmentKit微控制器開(kāi)發(fā)套件支持的那些基于ARM內(nèi)核的MCU。DeviceDatabase有兩個(gè)版本,一個(gè)是/dd上的在線版本,另一個(gè)則內(nèi)建在RVMDK中。只有基于Web的版本提供參數(shù)搜索功能。
該數(shù)據(jù)庫(kù)支持以下MCU信息:
除此以外,該數(shù)據(jù)庫(kù)還包含指向FindChips.com網(wǎng)站的鏈接,其中列出了不同MCU的經(jīng)銷商。
數(shù)據(jù)庫(kù)搜索
可按下列方式在DeviceDatabase中搜索MCU:
架構(gòu)——顯示支持特定處理器架構(gòu)的所有MCU。例如,按ARM架構(gòu)搜索將列出MCU內(nèi)核中支持ARM架構(gòu)的所有供應(yīng)商。
供應(yīng)商——顯示特定半導(dǎo)體供應(yīng)商生產(chǎn)的所有MCU。例如,將飛利浦作為供應(yīng)商進(jìn)行搜索將列出飛利浦生產(chǎn)的所有MCU系列的MCU。
參數(shù)——允許開(kāi)發(fā)人員輸入他們要查找的MCU的要求。
使用參數(shù)搜索強(qiáng)大功能
開(kāi)發(fā)人員最感興趣的可能是DeviceDatabase的參數(shù)搜索功能,它使開(kāi)發(fā)人員能搜索整個(gè)MCU范圍內(nèi)的特定外圍設(shè)備組合和性能標(biāo)準(zhǔn),而不會(huì)受到任何一家處理器供應(yīng)商的搜索功能限制。使用這種搜索,開(kāi)發(fā)人員可以迅速確定一個(gè)MCU部件或MCU系列,它們可提供最合適的性能、外圍設(shè)備組合以及未來(lái)可擴(kuò)展性。
參數(shù)搜索示例
為了展示DeviceDatabase參數(shù)搜索的一些高級(jí)功能,我們將使用以下示例。示例:遠(yuǎn)程溫度記錄設(shè)備我們要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程溫度傳感設(shè)備,它能持續(xù)記錄來(lái)自的信息并將它們存儲(chǔ)在本地?,F(xiàn)場(chǎng)使用時(shí)設(shè)備應(yīng)由供電,如果崩潰則應(yīng)有故障重新啟動(dòng)功能。通過(guò)USB連接設(shè)備時(shí),它應(yīng)該能通過(guò)USB轉(zhuǎn)儲(chǔ)其日志,并同步時(shí)鐘以便進(jìn)一步收集數(shù)據(jù)?;谶@些條件,我們可以將MCU要求精簡(jiǎn)如下:
如果我們將這些參數(shù)作為參數(shù)搜索輸入DeviceDatabase,我們發(fā)現(xiàn)目前有兩個(gè)來(lái)自不同MCU供應(yīng)商、基于ARM內(nèi)核的MCU系列,每個(gè)系列都有四個(gè)MCU部件符合上述要求。在不同MCU供應(yīng)商范圍內(nèi)使用這種搜索將超過(guò)125種MCU的選擇工作縮減到8種。此時(shí),我們可以檢查DeviceDatabase中各個(gè)部件項(xiàng),并根據(jù)更多客觀條件(如過(guò)去的經(jīng)驗(yàn)、文檔清晰性、應(yīng)用程序庫(kù)和示例代碼的相關(guān)性,當(dāng)然還有價(jià)格/批量)作出最終決策。RealViewMicrocontrollerDevelopmentKit微控制器開(kāi)發(fā)套件配置在上述示例中,我們已說(shuō)明如何在Web上將DeviceDatabase用作獨(dú)立工具,根據(jù)特殊應(yīng)用的MCU選擇作出明智的決策。但DeviceDatabase的用途遠(yuǎn)不止此,因?yàn)樵谔厥鈶?yīng)用項(xiàng)目的設(shè)置階段中也可以使用它。RVMDK包含一個(gè)DeviceDatabase版本,在開(kāi)發(fā)人員著手新項(xiàng)目時(shí)調(diào)用它。當(dāng)開(kāi)發(fā)人員在RVMDK的μVisionIDE中指定DeviceDatabase選擇的MCU時(shí),將使用該MCU的數(shù)據(jù)庫(kù)知識(shí)自動(dòng)配置和定制專門(mén)針對(duì)該MCU的開(kāi)發(fā)工具這樣可大幅縮短工具設(shè)置時(shí)間。
自動(dòng)化工具配置包括下列步驟:
仿真器設(shè)置本步驟配置μVision仿真器為相應(yīng)的MCU建模,包括默認(rèn)時(shí)鐘頻率、指令集、寄存器集、內(nèi)置ROM和RAM空間以及外圍設(shè)備組合。接程序設(shè)置本步驟構(gòu)建一個(gè)鏈接程序可讀內(nèi)存映射或分散文件,它定義鏈接程序應(yīng)將代碼放到正確地址,告訴MCU仿真器內(nèi)存映射的布局(仿真器可寫(xiě)入非內(nèi)存或只讀內(nèi)存)。編譯器和匯編器設(shè)置本步驟設(shè)置編譯器和匯編器,包括包含該MCU的正確頭文件的路徑。將啟動(dòng)代碼安裝到項(xiàng)目中本步驟預(yù)先將相關(guān)示例MCU啟動(dòng)代碼的源代碼安裝到項(xiàng)目開(kāi)始處,確保在重置后、執(zhí)行應(yīng)用程序之前將MCU置于明確定義的已知狀態(tài)。除此以外,自動(dòng)配置可以幫助用戶在第一次使用工具時(shí)設(shè)置幾個(gè)實(shí)用默認(rèn)值,其中包括調(diào)試編譯、map文件的生成以及調(diào)用圖等。μVisionIDE中“目標(biāo)GUI”的“選項(xiàng)”中可以顯示所有這些相關(guān)選項(xiàng),包括作為GUI生成的每個(gè)工具的GUI可更改選項(xiàng)以及命令行參數(shù)Web上將DeviceDatabase用作獨(dú)立工具,根據(jù)特殊應(yīng)用的MCU選擇作出明智的決策。但DeviceDatabase的用途遠(yuǎn)不止此,因?yàn)樵谔厥鈶?yīng)用項(xiàng)目的設(shè)置階段中也可以使用它。RVMDK包含一個(gè)DeviceDatabase版本,在開(kāi)發(fā)人員著手新項(xiàng)目時(shí)調(diào)用它。
當(dāng)開(kāi)發(fā)人員在RVMDK的μVisionIDE中指定DeviceDatabase選擇的MCU時(shí),將使用該MCU的數(shù)據(jù)庫(kù)知識(shí)自動(dòng)配置和定制專門(mén)針對(duì)該MCU的開(kāi)發(fā)工具。這樣可大幅縮短工具設(shè)置時(shí)間。自動(dòng)化工具配置包括下列步驟:仿真器設(shè)置本步驟配置μVision仿真器為相應(yīng)的MCU建模,包括默認(rèn)時(shí)鐘頻率、指令集、寄存器集、內(nèi)置ROM和RAM空間以及外圍設(shè)備組合。鏈接程序設(shè)置本步驟構(gòu)建一個(gè)鏈接程序可讀內(nèi)存映射或分散文件,它定義鏈接程序應(yīng)將代碼放到正確地址,并告訴MCU仿真器內(nèi)存映射的布局(仿真器可寫(xiě)入非內(nèi)存或只讀內(nèi)存)。編譯器和匯編器設(shè)置本步驟設(shè)置編譯器和匯編器,包括包含該MCU的正確頭文件的路徑。將啟動(dòng)代碼安裝到項(xiàng)目中本步驟預(yù)先將相關(guān)示例MCU啟動(dòng)代碼的源代碼安裝到項(xiàng)目開(kāi)始處,確保在重置后、執(zhí)行應(yīng)用程序之前將MCU置于明確定義的已知狀態(tài)。除此以外,自動(dòng)配置可以幫助用戶在第一次使用工具時(shí)設(shè)置幾個(gè)實(shí)用默認(rèn)值,其中包括調(diào)試編譯、map文件的生成以及調(diào)用圖等。μVisionIDE中“目標(biāo)GUI”的“選項(xiàng)”中可以顯示所有這些相關(guān)選項(xiàng),包括作為GUI生成的每個(gè)工具的GUI可更改選項(xiàng)以及命令行參數(shù)統(tǒng)、文件系統(tǒng)和聯(lián)發(fā)過(guò)程演變?yōu)閷⒏鞣N組件整合在一起,只需較少的組件內(nèi)部知識(shí)或相應(yīng)外圍設(shè)備的知識(shí)即可快速構(gòu)建嵌入式應(yīng)用程序。ARMRVMDK和RV-RTL提供一套軟件組件,可滿足嵌入式應(yīng)用程序的諸多常見(jiàn)要求。此外,DeviceDatabase包含許多使用這些軟件組件的示例程序,提供可改編為最終應(yīng)用的高級(jí)模板應(yīng)用程序。
目標(biāo)配置
為嵌入式應(yīng)用程序正確設(shè)置目標(biāo)環(huán)境需要投入相當(dāng)多的時(shí)間。如指南1所述,RVMDK可在項(xiàng)目開(kāi)始階段為選定微控制器添加特定啟動(dòng)代碼,使開(kāi)發(fā)人員的應(yīng)用程序能在MCU處于明確定義的已知狀態(tài)時(shí)開(kāi)始執(zhí)行。但是,特定MCU上運(yùn)行的各個(gè)應(yīng)用程序的內(nèi)存要求和外圍設(shè)備行要求相差懸殊,提供的啟動(dòng)代碼不可能符合開(kāi)發(fā)人員需要的每種可行設(shè)置。一種方法是開(kāi)發(fā)人員使用一套標(biāo)準(zhǔn)的啟動(dòng)代碼,逐步修改它直至達(dá)到MCU及其資源(如堆棧)需要的狀態(tài)。雖然此方法肯定可以成功,但要耗費(fèi)大量時(shí)間。RVMDK提供另一種方法,即使用配置向?qū)止ば薷氖纠龁?dòng)代碼,該向?qū)峁┯成涞絾?dòng)代碼的MCU資源的高級(jí)視圖。圖1顯示AtmelAT91M55800A微控制器外部總線接口上兩個(gè)芯片選擇寄存器的部分配置。開(kāi)發(fā)人員可通過(guò)修改每項(xiàng)的值輕松啟用和配置特定芯片選擇寄存器。此方法大大簡(jiǎn)化了啟動(dòng)代碼的創(chuàng)建,因?yàn)橥瓿膳渲孟驅(qū)r(shí)會(huì)自動(dòng)生成啟動(dòng)代碼。例如,完成芯片選擇0(CSR0)項(xiàng)時(shí)會(huì)自動(dòng)修改下表ARM匯編器常量聲明相關(guān)的數(shù)值:
EBI_CSR0_ValEQU0x010024A9
EBI_CSR0_ValEQU0x010024A9
該常量之后用于在啟動(dòng)代碼中初始化外部總線接口。
配置向?qū)У膬?nèi)幕
配置向?qū)褂煤?jiǎn)單標(biāo)記語(yǔ)言來(lái)定義用戶在對(duì)話框中看到的內(nèi)容以及用戶的選擇如何生成數(shù)字和文本項(xiàng)。為此,標(biāo)記語(yǔ)言可以嵌入C、C++、匯編器源代碼或任何文本文件中。這樣可將配置向?qū)в糜谑褂脭?shù)字字符串定義的任意配置。圖2顯示將配置向?qū)в糜谂渲媚繕?biāo)系統(tǒng)堆棧大小的示例。圖3顯示該示例的底層標(biāo)記語(yǔ)言。標(biāo)記和定義堆棧項(xiàng)及其相關(guān)標(biāo)簽的起點(diǎn)和終點(diǎn)。標(biāo)記定義數(shù)字范圍內(nèi)的用戶可編輯項(xiàng)。此示例中要編輯的實(shí)際項(xiàng)不明顯,即標(biāo)記(0x00000000)后的第一個(gè)數(shù)字字段。用戶可通過(guò)在0后指定一個(gè)數(shù)字來(lái)定義字段偏移量。
軟件應(yīng)用程序庫(kù)
基于ARM內(nèi)核的MCU提供的高性能使它們能用于計(jì)算更密集的市場(chǎng)領(lǐng)域(相對(duì)于8位和16位MCU針對(duì)的市場(chǎng))。成功填補(bǔ)這些市場(chǎng)空缺需要更復(fù)雜的軟件。典型的8位應(yīng)用程序可能包含一個(gè)實(shí)時(shí)操作系統(tǒng)()和一些控制代碼,而的32位MCU應(yīng)用程序通常包含完整的通信棧,其復(fù)雜程度比低級(jí)高出一個(gè)數(shù)量級(jí)。RV-RTL提供一套經(jīng)常需要的軟件組件,可以將它們輕松部署到基于ARM內(nèi)核的MCU中去。該庫(kù)包含一些為其支持的MCU的特殊外圍設(shè)備專門(mén)優(yōu)化的項(xiàng),如TCP/IP網(wǎng)絡(luò)棧、文件系統(tǒng)、USB設(shè)備啟動(dòng)程序以及CAN設(shè)備驅(qū)動(dòng)程序。開(kāi)發(fā)人員可使用RVMDK中的配置向?qū)Э焖倥渲媒M件。圖4顯將配置向?qū)в糜谂渲脳5氖纠VMDK中的可配置對(duì)象包括RTX實(shí)時(shí)內(nèi)核,RV-RTL中以源代碼形式提供該內(nèi)核。這是一款全功能實(shí)時(shí)內(nèi)核,提供許多現(xiàn)代中最常見(jiàn)的資源抽象,包括線程、計(jì)時(shí)器、隊(duì)列、郵箱、信號(hào)量、互斥體、塊池和事件標(biāo)記。開(kāi)發(fā)人員可使用內(nèi)核來(lái)組合實(shí)時(shí)庫(kù)中的組件,以便在目標(biāo)系統(tǒng)上作為單獨(dú)的通信任務(wù)來(lái)執(zhí)行。
代碼模板和應(yīng)用程序示例
RVMDK包含幾個(gè)針對(duì)各個(gè)受支持MCU的示例應(yīng)用程序。開(kāi)發(fā)人員可將這些示例用作他們的應(yīng)用程序模板,無(wú)需深入了解其選定MCU即可著手開(kāi)發(fā)。示例涵蓋常見(jiàn)的初始開(kāi)發(fā)要求,如設(shè)置中斷、閃爍或?qū)⑽谋緦?xiě)入輸出設(shè)備以及完成模擬數(shù)據(jù)采集和實(shí)時(shí)OS示例。RV-RTL還隨附幾個(gè)示例應(yīng)用程序,它們?cè)诂F(xiàn)實(shí)世界典型情況下使用RV-RTL中的組件。它們可以用作整個(gè)嵌入式應(yīng)用程序的基礎(chǔ)。示例包括:
包含CGI腳本的嵌入式Web服務(wù)器
電子郵件通知
USB內(nèi)存設(shè)備
USB人機(jī)接口設(shè)備
USB音頻設(shè)備
結(jié)論
通過(guò)使用基于32位ARM內(nèi)核的MCU開(kāi)發(fā)微控制器應(yīng)用程序,開(kāi)發(fā)人員能使用之前8位和16位MCU無(wú)法實(shí)現(xiàn)的方式利用各種現(xiàn)成軟件組件。基于ARM內(nèi)核的MCU的強(qiáng)大實(shí)力和內(nèi)存尋址功能無(wú)需手工編碼匯編器或?qū)S密浖?kù)。RVMDK和RV-RTL為開(kāi)發(fā)人員提供了常見(jiàn)軟件組件和示例庫(kù),可用作其應(yīng)用程序的基礎(chǔ)構(gòu)建模塊。使用內(nèi)建的配置向?qū)?,可以在RVMDK的μVisionIDE中為所需的應(yīng)用程序輕松配置目標(biāo)系統(tǒng)和軟件組件。通過(guò)使用這些可配置組件并與實(shí)時(shí)內(nèi)核相結(jié)合,開(kāi)發(fā)人員可以更自信地將其應(yīng)用程序迅速推向市場(chǎng)。