本發(fā)明屬于通信領(lǐng)域,尤其涉及一種擴大MCU程序地址空間的方法及裝置。
背景技術(shù):通常MCU(MicroControlUnit,微控制單元)本身并沒CACHE功能。芯片內(nèi)部的程序存儲器容量較小,通常由4Kbytes的PROM與4Kbytes的PRAM組成,共8Kbytes。在絕大多數(shù)應用中,8Kbytes的程序地址空間可以滿足使用需求,但是在少數(shù)情況下,仍會出現(xiàn)無法滿足實際需求的情況,而為了少數(shù)應用增大PRAM的大小,從芯片面積和成本考慮并不經(jīng)濟。
技術(shù)實現(xiàn)要素:本發(fā)明實施例的目的在于提供一種擴大MCU程序地址空間的方法及裝置,旨在解決現(xiàn)有的MCU程序地址空間較小無法滿足需求的問題。本發(fā)明實施例是這樣實現(xiàn)的,一種擴大MCU程序地址空間的裝置,所述裝置包括一緩存控制器以及分別與所述緩存控制器連接的 MCU、PRAM和EEPROM;所述EEPROM的空間分為Cacheable的空間和NonCacheable的空間;其中,所述緩存控制器,用于程序執(zhí)行過程中,當所述MCU需要訪問的程序地址不在所述PRAM中,且所述程序地址為Cacheable時,根據(jù)預設的所述EEPROM地址與所述PRAM地址的映射關(guān)系將所述MCU需要的程序地址從所述EEPROM搬至所述PRAM中,以便所述MCU從所述PRAM中讀取需要訪問的程序地址。進一步地,所述緩存控制器包括TAG存儲器、命中仲裁器、DMA請求觸發(fā)器、TAG更新模塊,所述TAG存儲器、命中仲裁器、DMA請求觸發(fā)器依次連接,所述TAG更新模塊分別連接所述TAG存儲器和DMA請求觸發(fā)器;其中,所述TAG存儲器,用于存儲所述EEPROM地址與所述PRAM地址的映射關(guān)系;所述命中仲裁器,用于判斷所述MCU需要訪問的程序地址是否在所述PRAM中;以及當所述MCU需要訪問的程序地址不在所述PRAM中,且該程序地址為Cacheable時,根據(jù)所述EEPROM地址與所述PRAM地址的映射關(guān)系計算第一DMA請求信息,并發(fā)送至所述DMA請求觸發(fā)器;所述DMA請求觸發(fā)器,用于根據(jù)所述第一DMA請求信息從所述EEPROM中將所述MCU需要訪問的程序地址搬運至所述PRAM;所述TAG更新模塊,用于在DMA請求觸發(fā)器結(jié)束搬運后更新所述TAG存儲器中所述EEPROM地址與所述PRAM地址的映射關(guān) 系,并返回所述命中仲裁器繼續(xù)判斷所述MCU下一次需要訪問的程序地址是否在所述PRAM中直到程序執(zhí)行完畢。進一步地,所述緩存控制器還包括一內(nèi)部寄存器,所述命中仲裁器還用于當所述MCU需要訪問的程序地址不在所述PRAM和內(nèi)部寄存器中,且該程序地址為NonCacheable時,計算第二DMA請求信息,并發(fā)送至所述DMA請求觸發(fā)器;所述DMA請求觸發(fā)器還用于根據(jù)所述第二DMA請求信息從所述EEPROM中將所述MCU需要訪問的程序地址搬運至所述內(nèi)部寄存器,以便所述MCU從所述內(nèi)部寄存器中讀取需要訪問的程序地址。進一步地,所述緩存控制器通過I2C接口與所述EEPROM通信。本發(fā)明還提出一種擴大MCU程序地址空間的方法,用于上述擴大MCU程序地址空間的裝置;所述方法包括步驟:程序執(zhí)行過程中,當所述MCU需要訪問的程序地址不在所述PRAM中,且所述程序地址為Cacheable時,所述緩存控制器根據(jù)預設的所述EEPROM地址與所述PRAM地址的映射關(guān)系,將所述MCU需要的程序地址從所述EEPROM搬至所述PRAM中,以便所述MCU從所述PRAM中讀取需要訪問的程序地址。進一步地,所述緩存控制器根據(jù)EEPROM地址與PRAM地址的映射關(guān)系,將MCU需要的程序地址從EEPROM搬至PRAM中包括:A1、所述緩存控制器根據(jù)所述EEPROM地址與所述PRAM地址的映射關(guān)系計算第一DMA請求信息;B1、根據(jù)所述第一DMA請求信息從所述EEPROM中將所述 MCU需要訪問的程序地址搬運至所述PRAM;C1、更新所述EEPROM地址與所述PRAM地址的映射關(guān)系,并返回步驟A1直到程序執(zhí)行完畢。進一步地,所述方法還包括:當所述MCU需要訪問的程序地址在所述PRAM中,直接從所述PRAM中讀取所述MCU需要訪問的程序地址,并反饋至所述MCU。進一步地,所述方法還包括:當所述MCU需要訪問的程序地址不在所述PRAM中,且所述MCU需要訪問的程序地址為NonCacheable時,所述緩存控制器從所述EEPROM中將所述MCU需要訪問的程序地址搬運至一預設的內(nèi)部寄存器,以便所述MCU從所述內(nèi)部寄存器中讀取需要訪問的程序地址。進一步地,所述緩存控制器從EEPROM中將MCU需要訪問的程序地址搬運至一預設的內(nèi)部寄存器包括:A2、判斷所述MCU需要的程序地址是否在所述內(nèi)部寄存器中;B2、當所述MCU需要訪問的程序地址不在所述內(nèi)部寄存器中,計算第二DMA請求信息;C2、根據(jù)所述第二DMA請求信息從所述EEPROM中將所述MCU需要訪問的程序地址搬運至所述內(nèi)部寄存器。進一步地,所述緩存控制器從EEPROM中將MCU需要訪問的程序地址搬運至一預設的內(nèi)部寄存器還包括:D2、當所述MCU需要訪問的程序地址在所述內(nèi)部寄存器中,直 接從所述內(nèi)部寄存器中讀取所述MCU需要訪問的程序地址,并反饋至所述MCU。在本發(fā)明實施例中,通過PRAM與外部EEPROM的地址映射關(guān)系,使PRAM成為CACHE,EEPROM擴展成為程序地址空間。另外一方面,當EEPROM中的某段程序被執(zhí)行的幾率很低時,可將該段程序所在的地址空間設置為NonCacheable,當要執(zhí)行該部分程序時,將這部分程序從外部EEPROM直接返回給MCU,如此可以使映射到PRAM中對應地址空間的程序不被替換,從而提高效率。本發(fā)明實施例的CACHE功能滿足了對更大程序空間的需求。附圖說明圖1是本發(fā)明實施例一提供的擴大MCU程序地址空間的裝置的結(jié)構(gòu)圖;圖2是本發(fā)明實施例一提供的擴大MCU程序地址空間的裝置中緩存控制器的結(jié)構(gòu)圖;圖3是本發(fā)明實施例一提供的擴大MCU程序地址空間的裝置中EEPROM和PRAM之間的地址映射關(guān)系示意圖;圖4是本發(fā)明實施例二提供的擴大MCU程序地址空間的方法的流程圖;圖5是本發(fā)明實施例二提供的擴大MCU程序地址空間的方法中步驟S4的流程圖;圖6是本發(fā)明實施例二提供的擴大MCU程序地址空間的方法中 步驟S5的流程圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。實施例一本發(fā)明實施例一提出一種擴大MCU程序地址空間的裝置。如圖1所示,該裝置包括緩存控制器10以及分別與緩存控制器10連接的MCU30、PRAM20和EEPROM40,上述緩存控制器10可通過I2C接口或FPI接口與EEPROM40通信。如圖2所示,緩存控制器10包括依次連接的TAG存儲器13、命中仲裁器11、DMA請求觸發(fā)器12、TAG更新模塊14,TAG更新模塊14和TAG存儲器13連接。緩存控制器還包括一與命中仲裁器11連接的內(nèi)部寄存器15。本發(fā)明實施例一中,預先配置EEPROM40和PRAM20之間的地址映射關(guān)系并保存于TAG存儲器13中,圖3所示為本發(fā)明實施例一中EEPROM40和PRAM20之間的地址映射關(guān)系一示例。該示例以EEPROM40為32K(其中僅有28K可以使用),PRAM20為4K為例,以CacheLine為單位對EEPROM40和PRAM20的空間進行劃分(每一CacheLine大小為32*16bits),如此,EEPROM40共448個CacheLine,PRAM20共64個CacheLine。其實應用中,并不以圖3 所示之示例為限,EEPROM40、PRAM20及CacheLine的大小可根據(jù)需要進行設置。對某些EEPROM40中的CacheLine,可以將其設置為Cacheable(地址空間可搬運)或NonCacheable(地址空間不可搬運),NonCacheable的設置通過配置NonCacheablestartCacheLine與NonCacheableEndCacheLine的方式來實現(xiàn)的,配置之后,從NonCacheablestartCacheLine與NonCacheableEndCacheLine之間的所有CacheLine無法搬到PRAM20中,而只能MCU30訪問相應長字地址時,從外部EEPROM40中通過DMA搬對應的長字到內(nèi)部寄存器15,再返回給MCU30。當EEPROM40中的某段程序被執(zhí)行的幾率很低時,可以將該段程序所在的地址空間設置為NonCacheable,當要執(zhí)行該部分程序時,將這部分程序逐個長字的從外部EEPROM40直接返回給MCU30,而不將其先搬到PRAM20的相應CacheLine中,這樣可使映射到PRAM20中同樣CacheLine的程序不被替換,從而提高效率。在MCU30執(zhí)行程序過程中,命中仲裁器11判斷當前MCU30要訪問的程序空間地址是Cacheable還是NonCacheable。若當前MCU30要訪問的程序空間地址是Cacheable,讀取TAG存儲器13中相應的數(shù)據(jù)判斷命中與否,命中,則直接從PRAM20返回數(shù)據(jù)給MCU30;沒有命中,則立刻通過ClockingGating停掉MCU30的時鐘,計算出第一DMA請求信息送給DMA請求觸發(fā)器12,在DMA請求結(jié)束并且TAG更新模塊14更新TAG存儲器13中 的EEPROM40和PRAM20之間的地址映射關(guān)系之后,再釋放MCU的時鐘。第一DMA請求信息包括DMA的源地址、目的地址以及請求長度(圖3示例中以CacheLine為請求單位,因此長度為32個長字)。若當前MCU30要訪問的程序空間地址是NonCacheable,判斷上一次是否取出過該程序空間地址的數(shù)據(jù),是,則直接由內(nèi)部寄存器15返回給MCU30;否則立刻通過ClockingGating停掉MCU30的時鐘,計算出第二DMA請求信息送給DMA請求觸發(fā)器12,在DMA請求結(jié)束并且TAG更新模塊14更新TAG存儲器13之后,再釋放MCU30的時鐘。第二DMA請求信息包括DMA的源地址、目的地址以及請求長度(圖3示例中以CacheLine為請求單位,因此長度為32個長字)。本發(fā)明實施例一在MCU30內(nèi)部的程序存儲器大小不變的情況下,利用外部的EEPROM,擴大程序的尋址空間。以圖3所示為例,MCU30的程序地址空間由8K(其中,MCU30原有的PRAM204K,PROM4K)擴展到32K(其中,EEPROAM4028K,PROM4K),大大擴展了MCU30的程序地址空間。實施例二本發(fā)明實施例二提出一種擴大MCU程序地址空間的方法,應用于本發(fā)明實施例一的裝置。如圖4所示,本發(fā)明實施例二的方法包括如下步驟:步驟S1、程序執(zhí)行過程中,判斷MCU需要訪問的程序地址在不 在PRAM中,在則進入步驟S2,否則進入步驟S3。步驟S2、當MCU需要訪問的程序地址在PRAM中,直接從PRAM中讀取MCU需要訪問的程序地址,并反饋至MCU。步驟S3、判斷MCU需要訪問的程序地址是否為Cacheable,是則進入步驟S4,否則進入步驟S5。步驟S4、緩存控制器根據(jù)EEPROM地址與PRAM地址的映射關(guān)系,將MCU需要的程序地址從EEPROM搬至PRAM中,MCU再從PRAM中讀取MCU需要的程序地址。如圖5所示,步驟S4可包括:步驟S41、緩存控制器根據(jù)EEPROM地址與PRAM地址的映射關(guān)系計算第一DMA請求信息。緩存控制器在當前時鐘周期通過ClockGating停掉MCU的時鐘,保持住程序存儲返回給MCU的總線上的數(shù)據(jù),然后發(fā)起第一DMA請求,同時計算出第一DMA請求信息的源地址、目的地址、請求長度。步驟S42、根據(jù)第一DMA請求信息從EEPROM中將MCU需要訪問的程序地址搬運至PRAM;步驟S43、更新EEPROM地址與PRAM地址的映射關(guān)系,并返回步驟A1直到程序執(zhí)行完畢。等到DMA請求結(jié)束后,MCU需要訪問的程序地址已被搬到了PRAM中,對EEPROM地址與PRAM地址的映射關(guān)系進行更新,接著,從PRAM中取出MCU所需要的程序地址,釋放MCU的時鐘,從而MCU得以正確的繼續(xù)運行。步驟S5、緩存控制器從EEPROM中將MCU需要訪問的程序地 址搬運至一預設的內(nèi)部寄存器,MCU再從內(nèi)部寄存器中讀取MCU需要的程序地址。如圖6所示,步驟S5可包括:步驟S51、判斷MCU需要的程序地址是否在內(nèi)部寄存器中;步驟S52、當MCU需要訪問的程序地址不在內(nèi)部寄存器中,計算第二DMA請求信息;緩存控制器在當前時鐘周期通過ClockGating停掉MCU的時鐘,保持住程序存儲返回給MCU的總線上的數(shù)據(jù),然后發(fā)起DMA請求,同時計算出第二DMA請求信息的源地址、目的地址、請求長度。步驟S53、根據(jù)第二DMA請求信息從EEPROM中將MCU需要訪問的程序地址搬運至內(nèi)部寄存器。等到DMA請求結(jié)束后,MCU需要訪問的程序地址已經(jīng)被存放在內(nèi)部寄存器中,緩存控制器將該數(shù)據(jù)返回給MCU,然后釋放MCU的時鐘,從而MCU得以正確的繼續(xù)運行。步驟S54、當MCU需要訪問的程序地址在內(nèi)部寄存器中,直接從內(nèi)部寄存器中讀取MCU需要訪問的程序地址,并反饋至MCU,而不對MCU進行任何控制。這樣可使映射到PRAM20中同樣CacheLine的程序不被替換,從而提高效率。在本發(fā)明實施例二中,通過PRAM與外部EEPROM的地址映射關(guān)系,使PRAM成為CACHE,EEPROM擴展成為程序地址空間。另外一方面,當EEPROM中的某段程序被執(zhí)行的幾率很低時,可將該段程序所在的地址空間設置為NonCacheable,當要執(zhí)行該部分程序 時,將這部分程序從外部EEPROM直接返回給MCU,如此可以使映射到PRAM中對應地址空間的程序不被替換,從而提高效率。本發(fā)明實施例的CACHE功能滿足了對更大程序空間的需求。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。