MA差模電感器XQ8913及其它MAXQ®微控制器采用的Harvard存儲(chǔ)器映射架構(gòu)為用戶(hù)提供了極大的靈活性,可根據(jù)需要將不同的物理內(nèi)存(例如數(shù)據(jù)SRAM)映射為程序或數(shù)據(jù)內(nèi)存空間。在特定環(huán)境下,從數(shù)據(jù)SRAM執(zhí)行一個(gè)程序的部分代碼能夠提升性能并降低功耗。這些優(yōu)勢(shì)都是以應(yīng)用程序的更加復(fù)雜為代價(jià)。
概述
MAXQ8913和其它許多MAXQ微控制器一樣,也包含了一個(gè)基于SRAM的內(nèi)置數(shù)據(jù)存儲(chǔ)區(qū)域,該存儲(chǔ)區(qū)域可被映射為數(shù)據(jù)內(nèi)存空間,或者選擇映射為程序內(nèi)存空間。內(nèi)置SRAM通常用作數(shù)據(jù)存儲(chǔ)器,而在程序閃存或掩膜ROM中執(zhí)行大部分程序代碼。然而,在特定環(huán)境下,從內(nèi)部SRAM執(zhí)行有限的部分代碼非常有用。
本應(yīng)用筆記介紹如何配置、裝載匯編程序,以便從內(nèi)部SRAM正確運(yùn)行,本文還討論了這種方法的優(yōu)勢(shì)和缺點(diǎn)。本應(yīng)用筆記給出的例程針對(duì)MAXQ8913編寫(xiě),使用基于匯編的MAX-IDE環(huán)境。用戶(hù)可下載本文所涉及的應(yīng)用程序代碼和項(xiàng)目文件。
本文討論的代碼都特別針對(duì)MAXQ8913微控制器編寫(xiě),所介紹的原理和方法也同樣適合其它含有可映射為程序空間的內(nèi)部SRAM的MAXQ微控制器。能夠以這種方式執(zhí)行代碼的其它MAXQ微控制器包括:MAXQ2000、MAXQ2010和MAXQ3210/MAXQ3212。
該代碼能很好地運(yùn)行在任何基于MAXQ8913片式電感器并為MAXQ8913的串口0提供一路串行接口(RS-232或USB至串口轉(zhuǎn)換)的硬件。將一個(gè)終端模擬器連接到該串口,并設(shè)置為9600波特率、8個(gè)數(shù)據(jù)位、1個(gè)停止位、無(wú)奇偶校驗(yàn),即可查看例程的代碼輸出。
用戶(hù)可免費(fèi)下載MAX-IDE環(huán)境的最新安裝程序包和文檔資料。
MAX-IDE安裝程序
MAXQ核編譯指南
開(kāi)發(fā)工具指南
在RAM中執(zhí)行代碼的優(yōu)勢(shì)
通常情況下,MAXQ微控制器的絕大多數(shù)應(yīng)用代碼都被設(shè)計(jì)為在主程序空間執(zhí)行,主程序空間通常是利用一片大的內(nèi)部閃存或(對(duì)于掩膜ROM器件)用戶(hù)指定的應(yīng)用ROM來(lái)實(shí)現(xiàn)。主程序空間為非易失存儲(chǔ)器,所以大多數(shù)情況下可用來(lái)保存應(yīng)用程序代碼。內(nèi)部SRAM被用來(lái)存儲(chǔ)變量、軟件棧,以及器件被關(guān)閉時(shí)不需要保存的類(lèi)似數(shù)據(jù)。
然而,對(duì)于特定應(yīng)用,在數(shù)據(jù)SRAM中執(zhí)行某些代碼具有一定優(yōu)勢(shì)。
降低功耗
在大多數(shù)MAXQ微控制器中,當(dāng)在內(nèi)部SRAM (或固定用途ROM)中執(zhí)行代碼時(shí),相對(duì)于程序閃存而言,電源電流會(huì)減小。因?yàn)殚W存在不被存取時(shí)可被動(dòng)態(tài)斷電,所以這種情況下就能節(jié)省功率。如果某個(gè)應(yīng)用程序通常在大部分活動(dòng)時(shí)間內(nèi)執(zhí)行非常小的代碼量,在SRAM中執(zhí)行就能大大降低總體功耗。
直接訪問(wèn)主程序空間存儲(chǔ)器
通常,從主程序閃存執(zhí)行的代碼不能直接讀取保存在主程序閃存中的數(shù)據(jù)。這種類(lèi)型的數(shù)據(jù)可以包括隨應(yīng)用程序數(shù)據(jù)一起的常量字符串和數(shù)據(jù)表。若要讀取該數(shù)據(jù),應(yīng)用程序必須調(diào)用固定用途ROM中的專(zhuān)用數(shù)據(jù)傳遞函數(shù)。在RAM中執(zhí)行代碼則避開(kāi)了這一限制,允許利用標(biāo)準(zhǔn)的數(shù)據(jù)指針直接讀取閃存中包含的數(shù)據(jù)。這就加快了存取操作。若一個(gè)小的算法花費(fèi)大量的時(shí)間遍歷閃存中存儲(chǔ)的查找表或其它常量數(shù)據(jù),那么在RAM中執(zhí)行該算法則能夠在非常短的時(shí)間內(nèi)完成運(yùn)算。
可重寫(xiě)整個(gè)閃存
和大多數(shù)基于閃存的MAXQ微控制器一樣,MAXQ8913中的固定用途ROM含有在應(yīng)用程序控制下擦除和重寫(xiě)程序閃存的標(biāo)準(zhǔn)函數(shù)。該過(guò)程能夠使用戶(hù)裝載器通過(guò)用戶(hù)指定接口(例如串口、SPI或I²C)重新裝載部分或全部應(yīng)用程序。大電流電感然而,若用戶(hù)裝載程序位于閃存內(nèi),則不能擦除或重寫(xiě)自身所占用的閃存。在RAM中執(zhí)行用戶(hù)裝載器,可以擦除整個(gè)閃存程序空間并重新寫(xiě)入新的代碼,包括用戶(hù)裝載器本身。
在RAM中執(zhí)行代碼的缺點(diǎn)
在RAM中執(zhí)行應(yīng)用程序代碼也存在缺點(diǎn)和限制。有些缺點(diǎn)與具體工作相關(guān),而有些缺點(diǎn)則是MAXQ架構(gòu)所固有的。
有限繞行電感器的代碼空間
RAM一般比程序閃存小得多,這意味著在任何給定時(shí)間只能執(zhí)行少量代碼。但有可能在RAM中運(yùn)行一個(gè)例程,然后將其擦除并裝載第二個(gè)例程,隨后再運(yùn)行第二個(gè)例程,依此類(lèi)推。
代碼映射
在RAM中執(zhí)行代碼之前,必須將其復(fù)制到RAM。這一過(guò)程需要時(shí)間和代碼空間。此外,代碼必須從某個(gè)位置復(fù)制,所以代碼實(shí)際上被存儲(chǔ)兩次:一次在閃存或程序ROM,一次在RAM。即使該代碼不是為了在閃存中執(zhí)行,也必須被存儲(chǔ)于其中,從而消耗了額外的空間。
不可直接存取RAM
當(dāng)在RAM中執(zhí)行代碼時(shí),RAM就不再是可見(jiàn)的數(shù)據(jù)存儲(chǔ)空間。這意味著不能利用數(shù)據(jù)指針直接從RAM存儲(chǔ)單元讀取或?qū)懭霐?shù)據(jù)。按照在閃存中運(yùn)行應(yīng)用代碼相同的方式,有可能避開(kāi)這種限制。利用固定用途ROM數(shù)據(jù)傳遞函數(shù)(UROM_moveDP0和類(lèi)似的函數(shù))可對(duì)RAM進(jìn)行讀取,以及通過(guò)在閃存中寫(xiě)入類(lèi)似的函數(shù),可直接對(duì) 大功率電感廠家 |大電流電感工廠