專利名稱::存取微處理器外部存儲(chǔ)器的方法
技術(shù)領(lǐng)域:
:本發(fā)明提供一種存取存儲(chǔ)器的方法,尤指一種存取連接于微處理器的外部存儲(chǔ)器的方法。
背景技術(shù):
:MCS(MicroComputerSystem)是Intel公司對(duì)微處理器的總稱,而其所開發(fā)的MCS-51/52系列的微處理器更是普遍地應(yīng)用在工業(yè)界中。一般而言,微處理器只含有少量的存儲(chǔ)器及輸入輸出端口,以MCS-51系列的微處理器為例,它有4K字節(jié)的程序存儲(chǔ)器、128字節(jié)的數(shù)據(jù)存儲(chǔ)器以及32條輸入輸出端口,MCS-52系列的微處理器則是將程序存儲(chǔ)器增加為8K字節(jié),以及將數(shù)據(jù)存儲(chǔ)器增加為256字節(jié),而MCS-52與MCS-51系列的微處理器同樣是使用一個(gè)8位的中央處理單元。程序存儲(chǔ)器用來存放使用者所撰寫的程序,屬于只讀存儲(chǔ)器(ROM),數(shù)據(jù)存儲(chǔ)器則是隨機(jī)存取存儲(chǔ)器(RAM),可供中央處理單元運(yùn)作時(shí)讀取或?qū)懭霐?shù)據(jù),通常是用來當(dāng)程序執(zhí)行時(shí)暫時(shí)存放數(shù)據(jù)的暫存器。MCS-51/52系列的微處理器都可以由外部擴(kuò)充存儲(chǔ)器,最大可擴(kuò)充至64K位字節(jié)。然而在一些應(yīng)用之中,使用者可能會(huì)需要撰寫很大的程序碼或是使用很大的陣列表,如此一來64K位字節(jié)的外部擴(kuò)充程序存儲(chǔ)器仍然不夠使用。存儲(chǔ)器組切換(bankswitch)是一種可以將存儲(chǔ)器大幅擴(kuò)充的方法,使用微處理器上多出的管腳作為解碼線來對(duì)超過64K字節(jié)的存儲(chǔ)器作尋址,若外部存儲(chǔ)器是一個(gè)大容量的存儲(chǔ)器裝置,則多出的管腳可以直接作為地址線,若外部存儲(chǔ)器是多個(gè)小容量的存儲(chǔ)器裝置,則多出的管腳可用來選擇存儲(chǔ)器芯片。由于微處理器最大的外部擴(kuò)充存儲(chǔ)器為64K字節(jié),所以可用64K字節(jié)作為單一存儲(chǔ)器組的基本容量,稱為一頁(page),并以微處理器多出的管腳來切換頁碼,以選擇不同的存儲(chǔ)器組。存儲(chǔ)器組切換最大的問題在于中斷向量表(interruptvectortable)配置的地址,因?yàn)橹袛嘞蛄勘硗ǔ?huì)放在存儲(chǔ)器中某個(gè)特定的地址,雖然程序在運(yùn)作時(shí)可以在各個(gè)頁作切換,但是當(dāng)中斷發(fā)生時(shí),程序會(huì)立刻在所在頁中的特定地址去尋找中斷向量表,而且此時(shí)程序并無法作存儲(chǔ)器組切換,當(dāng)程序找不到中斷向量表時(shí),便會(huì)產(chǎn)生錯(cuò)誤。一般解決這個(gè)問題的方法,便是在每個(gè)存儲(chǔ)器組中都保留共用區(qū)(commonarea),共用區(qū)中儲(chǔ)存中斷向量表、中斷服務(wù)程序(interruptserviceroutine,ISR)、通用函數(shù)庫以及存儲(chǔ)器組切換程序,所以不論程序運(yùn)作在那一個(gè)頁,當(dāng)程序發(fā)生中斷時(shí),程序都可以在所在的頁中找到中斷向量表繼續(xù)程序的執(zhí)行。請(qǐng)參考圖1,圖1為已知外部程序存儲(chǔ)器12配置的示意圖。假設(shè)有MCS-51/52系列的微處理器使用存儲(chǔ)器組切換的方式在外部擴(kuò)充512K字節(jié)的存儲(chǔ)器12,分為8個(gè)頁,每個(gè)頁為64K字節(jié),并保留10K字節(jié)的共用區(qū)用來存放中斷向量表、中斷服務(wù)程序、通用函數(shù)庫以及存儲(chǔ)器組切換程序。舉例來說,當(dāng)在第一頁的程序需要呼叫第二頁的程序時(shí),會(huì)立即跳至共用區(qū)中的存儲(chǔ)器組切換程序,存儲(chǔ)器組切換程序會(huì)設(shè)定所需存儲(chǔ)器組的頁碼,因?yàn)閷?duì)于微處理器而言,在共用區(qū)中改變頁碼并不會(huì)影響任何程序數(shù)據(jù)的讀取,接著微處理器就可以存取第二頁中所需的程序。在第二頁的程序處理完畢之后,程序會(huì)先回到共用區(qū)中,由存儲(chǔ)器組切換程序切換回原來的存儲(chǔ)器組,再回到第一頁中原來程序的地址繼續(xù)執(zhí)行程序。由上述可知,已知MCS-51/52系列的微處理器所提供的程序存儲(chǔ)器,最大只能利用擴(kuò)充外部程序存儲(chǔ)器至64K字節(jié),但是通過存儲(chǔ)器組切換的技巧,使用微處理器上多出的管腳,可以再將外部程序存儲(chǔ)器作大幅的擴(kuò)充,但是存儲(chǔ)器組切換有個(gè)缺點(diǎn),就是每個(gè)存儲(chǔ)器組之中都必須保留部分的空間作為共用區(qū),用來存放中斷向量表、中斷服務(wù)程序、通用函數(shù)庫以及存儲(chǔ)器組切換程序,而這些數(shù)據(jù)會(huì)復(fù)制并儲(chǔ)存在每個(gè)存儲(chǔ)器組的共用區(qū)之中,如此一來,存儲(chǔ)器的空間便無法有效的被利用。
發(fā)明內(nèi)容因此本發(fā)明的主要目的是提供一種存取連接微處理器的存儲(chǔ)器的方法,以解決上述問題。本發(fā)明的權(quán)利要求提供一種存取連接微處理器的存儲(chǔ)器的方法,該存儲(chǔ)器包含多個(gè)存儲(chǔ)器組(memorybank),其中每一存儲(chǔ)器組的大小為該微處理器內(nèi)部尋址線的最大尋址空間,該微處理器包含中斷處理單元,以及用來切換存儲(chǔ)器組的存儲(chǔ)器組選擇器,該方法包含(a)將中斷服務(wù)程序(interruptserviceroutine)儲(chǔ)存在該多個(gè)存儲(chǔ)器組的其中一個(gè);(b)在中斷發(fā)生時(shí),使用該中央處理單元將工作中的程序地址存入(push)堆棧中,接著將工作中的存儲(chǔ)器組的頁碼推入該堆棧中,再設(shè)定該存儲(chǔ)器組選擇器為儲(chǔ)存具有該中斷服務(wù)程序的存儲(chǔ)器組的頁碼;(c)將該中央處理單元切換至儲(chǔ)存該中斷服務(wù)程序的存儲(chǔ)器組中執(zhí)行該中斷服務(wù)程序;(d)使用該中央處理單元從該堆棧中取出(pop)在步驟(b)中存入該堆棧的存儲(chǔ)器組的頁碼并將其存入該存儲(chǔ)器組選擇器,接著由該堆棧中取出在步驟(b)中存入該堆棧的程序地址;以及(e)在執(zhí)行步驟(d)后,根據(jù)該存儲(chǔ)器組選擇器儲(chǔ)存的頁碼及取出的程序地址,切換回該頁碼所對(duì)應(yīng)的存儲(chǔ)器組繼續(xù)在該存儲(chǔ)器組地址執(zhí)行步驟(b)中斷之前的工作。相對(duì)于已知技術(shù),本發(fā)明所提供的方法使微處理器的中央處理單元在發(fā)生中斷時(shí)能利用堆棧起來記錄執(zhí)行中程序的地址數(shù)據(jù),如此可將存在于每一個(gè)存儲(chǔ)器組的共用區(qū)之中的中斷服務(wù)程序移出,減少共用區(qū)占用的空間,一方面增加了每一個(gè)存儲(chǔ)器組的可用空間,另一方面也減少了切換存儲(chǔ)器組的機(jī)會(huì),提高中央處理單元存取外部存儲(chǔ)器的效率,已知技術(shù)在使用存儲(chǔ)器組交換的方式擴(kuò)充外部存儲(chǔ)器時(shí),必須在每一個(gè)存儲(chǔ)器組中都復(fù)制一份含有中斷服務(wù)程序的共用區(qū)數(shù)據(jù),而中斷服務(wù)程序占了共用區(qū)很大的一部分,相當(dāng)浪費(fèi)存儲(chǔ)器的空間,而本發(fā)明則可以更有效的利用存儲(chǔ)器的空間。圖1為已知外部程序存儲(chǔ)器配置的示意圖。圖2為本發(fā)明外部存儲(chǔ)器的存儲(chǔ)器組配置的示意圖。圖3為本發(fā)明在中斷發(fā)生時(shí)切換存儲(chǔ)器組的流程圖。圖4為本發(fā)明切換記庫時(shí)使用堆棧的示意圖。具體實(shí)施例方式請(qǐng)參考圖2,圖2為本發(fā)明微處理器的外部存儲(chǔ)器22其存儲(chǔ)器組配置的示意圖。微處理器(圖未示)的外部存儲(chǔ)器22在使用存儲(chǔ)器組交換的存儲(chǔ)器配置方式時(shí),需在每一個(gè)存儲(chǔ)器組中皆需要復(fù)制一份共用區(qū)的數(shù)據(jù),相當(dāng)耗費(fèi)存儲(chǔ)器空間,若可以減少共用區(qū)中存放數(shù)據(jù)的大小,就能夠大幅的節(jié)省存儲(chǔ)器的空間。本發(fā)明將外部存儲(chǔ)器22的每一個(gè)存儲(chǔ)器組的共用區(qū)24所包含的中斷服務(wù)程序取出,也就是存儲(chǔ)器組的共用區(qū)24不包含中斷服務(wù)程序,而僅在外部存儲(chǔ)器的其中一個(gè)存儲(chǔ)器組之中儲(chǔ)存一份中斷服務(wù)程序26,于中斷發(fā)生時(shí)再切換至儲(chǔ)存中斷服務(wù)程序26的存儲(chǔ)器組中讀取數(shù)據(jù),如此每一個(gè)存儲(chǔ)器組的共用區(qū)就都縮小了,相對(duì)的每一個(gè)存儲(chǔ)器組就有更多的可用空間,也能減少存儲(chǔ)器組切換的機(jī)率。舉例來說,假設(shè)外部存儲(chǔ)器22的大小為512K字節(jié),分成8個(gè)存儲(chǔ)器組,每一個(gè)存儲(chǔ)器組的大小為64K字節(jié),而每一個(gè)存儲(chǔ)器組需要10K字節(jié)的存儲(chǔ)器空間來儲(chǔ)存共用區(qū)數(shù)據(jù),而其中中斷服務(wù)程序占了4K字節(jié),所以將每一個(gè)共用區(qū)中的中斷服務(wù)程序取出而僅儲(chǔ)存一份中斷服務(wù)程序26在存儲(chǔ)器組的第0頁,除了存儲(chǔ)器組的第0頁之外,每一個(gè)數(shù)據(jù)庫的可用空間由原來的54K字節(jié)增加為58K字節(jié),共增加了4K*(8-1)=28K字節(jié)的存儲(chǔ)器空間。因?yàn)橹袛喾?wù)程序26只儲(chǔ)存在存儲(chǔ)器組的第0頁,所以當(dāng)中斷發(fā)生時(shí),微處理器的中央處理單元需將工作中的存儲(chǔ)器組切換至存儲(chǔ)器組的第0頁,首先將執(zhí)行中的數(shù)據(jù)地址以及所在的存儲(chǔ)器組頁碼先后存入(push)堆棧之中,接著切換至存儲(chǔ)器組的第0頁作中斷處理,待完成中斷處理之后再由堆棧中先后取出(pop)先前存入的存儲(chǔ)器組頁碼以及數(shù)據(jù)地址,根據(jù)由堆棧中取出的存儲(chǔ)器組頁碼以及數(shù)據(jù)地址切換回中斷發(fā)生前的數(shù)據(jù)地址繼續(xù)工作。請(qǐng)參考圖3,圖3為本發(fā)明于中斷發(fā)生時(shí)切換存儲(chǔ)器組的流程圖。本發(fā)明為了節(jié)省存儲(chǔ)器的使用空間,將中斷服務(wù)程序由共用區(qū)中取出,僅儲(chǔ)存一份中斷服務(wù)程序26于其中一個(gè)存儲(chǔ)器組之中,如此不但增加了每一個(gè)存儲(chǔ)器組的可用空間,也由于可用空間的增加使得切換存儲(chǔ)器組的機(jī)率減少,提高效率。由于存儲(chǔ)器組的共用區(qū)中不含中斷服務(wù)程序,若程序在執(zhí)行時(shí)發(fā)生中斷,微處理器的中央處理單元會(huì)使用堆棧來記錄工作中的數(shù)據(jù)地址以及所在的存儲(chǔ)器組頁碼,于存儲(chǔ)器組切換至儲(chǔ)存中斷服務(wù)程序的數(shù)據(jù)庫完成中斷處理之后,就可以根據(jù)堆棧中記錄的數(shù)據(jù)回到中斷發(fā)生前所在的地址。本發(fā)明于中斷發(fā)生時(shí)切換存儲(chǔ)器組的詳細(xì)步驟內(nèi)容說明如下步驟110中斷發(fā)生,中央處理單元接收到中斷請(qǐng)求而必須停止正在執(zhí)行的程序進(jìn)行中斷處理;步驟120將執(zhí)行中的程序的地址數(shù)據(jù)存入堆棧之中,首先將記錄地址數(shù)據(jù)的8位低位地址存入堆棧之中,接著再將記錄地址數(shù)據(jù)的8位高位地址存入堆棧之中;步驟130將執(zhí)行中的程序所在數(shù)據(jù)庫的頁碼存入堆棧之中,也就是將儲(chǔ)存頁碼的存儲(chǔ)器組選擇器(pageselector)中的8位數(shù)據(jù)存入堆棧之中;步驟140切換存儲(chǔ)器組,也就是將存儲(chǔ)器組選擇器設(shè)定為儲(chǔ)存中斷服務(wù)程序的存儲(chǔ)器組的頁碼,使得中央處理單元能夠切換到儲(chǔ)存中斷服務(wù)程序的存儲(chǔ)器組作中斷處理;步驟150執(zhí)行中斷服務(wù)程序,進(jìn)行中斷處理;步驟160由堆棧中取出先前工作中的存儲(chǔ)器組的頁碼;步驟170切換回先前工作中的存儲(chǔ)器組,也就是將存儲(chǔ)器組選擇器設(shè)定為上一步驟中由堆棧取出的頁碼;步驟180由堆棧中取出先前執(zhí)行的程序的地址數(shù)據(jù),先將記錄地址數(shù)據(jù)的8位高位地址由堆棧中取出,接著再將記錄地址數(shù)據(jù)的8位低位地址由堆棧中取出;步驟190根據(jù)上一步驟由堆棧取出的地址數(shù)據(jù)繼續(xù)進(jìn)行中斷發(fā)生前所執(zhí)行的程序。請(qǐng)參考圖4,圖4為本發(fā)明切換存儲(chǔ)器組時(shí)使用堆棧28的示意圖。微處理器中的堆棧存儲(chǔ)器28通常是使用堆棧指針指向內(nèi)部數(shù)據(jù)存儲(chǔ)器的一個(gè)位置作為堆棧的起始位置,堆棧通常是用來存放呼叫子程序的程序計(jì)數(shù),或者是使用者自定的數(shù)據(jù),而由于微處理器的中央處理單元執(zhí)行8位的指令集,所以堆棧中的每一組數(shù)據(jù)也為8位。堆棧數(shù)據(jù)的處理方式為先進(jìn)后出,也就是存入堆棧中的數(shù)據(jù)必須等到下一組存入堆棧中的數(shù)據(jù)被取出后才會(huì)被取出使用,而最后一組存入堆棧中的數(shù)據(jù)則會(huì)最先被取出的數(shù)據(jù)。在上述的方法中,當(dāng)中央處理單元接到中斷請(qǐng)求時(shí),會(huì)依照上述的步驟先后將執(zhí)行中程序的低位地址、高位地址以及所在的存儲(chǔ)器組頁碼存入堆棧28之中,換句話說,當(dāng)中斷發(fā)生時(shí),中央處理單元會(huì)先利用堆棧28來記錄執(zhí)行中程序的地址數(shù)據(jù),所以在完成步驟130之后,堆棧中所存放的數(shù)據(jù)便如圖4所示,接著進(jìn)行步驟140來切換數(shù)據(jù)庫及步驟150來作中斷處理,在作中斷處理時(shí)可能也會(huì)使用到堆棧28儲(chǔ)存一些參數(shù),但是在完成中斷處理之后,堆棧28中所儲(chǔ)存的數(shù)據(jù)仍然會(huì)如圖4所示,此時(shí)中央處理單元就可以利用堆棧28中的數(shù)據(jù)進(jìn)行步驟160至步驟190回到中斷發(fā)生前的地址繼續(xù)執(zhí)行被中斷的程序。由上述可知,本發(fā)明的微處理器在外部存儲(chǔ)器22使用存儲(chǔ)器組交換的方法時(shí),將每一個(gè)存儲(chǔ)器組的共用區(qū)24的中斷服務(wù)程序取出,而僅儲(chǔ)存一份中斷服務(wù)程序26在其中一個(gè)存儲(chǔ)器組,而在中斷發(fā)生時(shí),使用堆棧28來記錄中央處理單元執(zhí)行中程序的地址數(shù)據(jù),再切換至儲(chǔ)存中斷服務(wù)程序的存儲(chǔ)器組作中斷處理,待完成中斷處理之后,由堆棧28中取出中斷發(fā)生前中央處理單元所執(zhí)行程序的地址數(shù)據(jù),使得中央處理單元可以根據(jù)該地址數(shù)據(jù)繼續(xù)執(zhí)行程序。相對(duì)于已知技術(shù),本發(fā)明所提供的方法使微處理器的中央處理單元在發(fā)生中斷時(shí)能利用堆棧起來記錄執(zhí)行中程序的地址數(shù)據(jù),如此可將存在于每一個(gè)存儲(chǔ)器組的共用區(qū)之中的中斷服務(wù)程序移出,減少共用區(qū)占用的空間,一方面增加了每一個(gè)存儲(chǔ)器組的可用空間,另一方面也減少了切換存儲(chǔ)器組的機(jī)會(huì),提高中央處理單元存取外部存儲(chǔ)器的效率,已知技術(shù)在使用存儲(chǔ)器組交換的方式擴(kuò)充外部存儲(chǔ)器時(shí),必須在每一個(gè)存儲(chǔ)器組中都復(fù)制一份含有中斷服務(wù)程序的共用區(qū)數(shù)據(jù),而中斷服務(wù)程序占了共用區(qū)很大的一部分,相當(dāng)浪費(fèi)存儲(chǔ)器的空間,而本發(fā)明則可以更有效的利用存儲(chǔ)器的空間。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,凡依本發(fā)明權(quán)利要求書所做的相同的變化與改進(jìn),都應(yīng)屬本發(fā)明專利的涵蓋范圍。權(quán)利要求1.一種存取大于微處理器內(nèi)部尋址線可尋址空間的存儲(chǔ)器的方法,該存儲(chǔ)器包含多個(gè)存儲(chǔ)器組,該微處理器包含堆棧,中斷處理單元,以及用來選擇存儲(chǔ)器組的存儲(chǔ)器組選擇器,該方法包含(a)將中斷服務(wù)程序儲(chǔ)存于該存儲(chǔ)器組的其中一個(gè);(b)在中斷發(fā)生時(shí),使用該中斷處理單元將工作中的程序地址存入堆棧中,接著將工作中的存儲(chǔ)器組的尋址碼推入該堆棧中,再設(shè)定該存儲(chǔ)器組選擇器為儲(chǔ)存具有該中斷服務(wù)程序的存儲(chǔ)器組的尋址碼;(c)將該微處理器切換至儲(chǔ)存該中斷服務(wù)程序的存儲(chǔ)器組中執(zhí)行該中斷服務(wù)程序;(d)使用該中斷處理單元從該堆棧中取出于步驟(b)中存入該堆棧的存儲(chǔ)器組的尋址碼并將其儲(chǔ)存于該存儲(chǔ)器組選擇器,接著由該堆棧中取出于步驟(b)中存入該堆棧的程序地址;以及(e)在執(zhí)行步驟(d)后,根據(jù)該存儲(chǔ)器組選擇器儲(chǔ)存的存儲(chǔ)器組尋址碼及取出的程序地址,將該微處理器切換回該存儲(chǔ)器組尋址碼所對(duì)應(yīng)的存儲(chǔ)器組繼續(xù)在該程序地址執(zhí)行步驟(b)中斷之前的工作。2.如權(quán)利要求1所述的方法,其中該微處理器是為MCS系列的微處理器。3.如權(quán)利要求1所述的方法,其還包含在每個(gè)存儲(chǔ)器組中儲(chǔ)存共用區(qū)。4.如權(quán)利要求3所述的方法,其中該共用區(qū)中的數(shù)據(jù)不包含中斷服務(wù)程序。5.如權(quán)利要求1所述的方法,其是由該微處理器根據(jù)儲(chǔ)存于該微處理器的程序存儲(chǔ)器中的程序碼來實(shí)現(xiàn)。6.一種實(shí)施權(quán)利要求1所述的方法的單芯片微處理器。全文摘要一種存取大于微處理器內(nèi)部尋址線可尋址空間的外部存儲(chǔ)器的方法,該方法包含將中斷服務(wù)程序儲(chǔ)存于多個(gè)存儲(chǔ)器組的其中一個(gè);在中斷發(fā)生時(shí),使用該微處理器將工作中的程序地址及存儲(chǔ)器組尋址碼存入堆棧中;將該微處理器切換至儲(chǔ)存該中斷服務(wù)程序的存儲(chǔ)器組中執(zhí)行該中斷服務(wù)程序;從該堆棧中取出存入該堆棧的存儲(chǔ)器組的尋址碼及程序地址;以及將該中央處理單元切換回從該堆棧中取出的存儲(chǔ)器組尋址碼所對(duì)應(yīng)的存儲(chǔ)器組繼續(xù)在該存儲(chǔ)器組中的程序地址執(zhí)行中斷之前的工作。文檔編號(hào)G06F12/10GK1536494SQ0311037公開日2004年10月13日申請(qǐng)日期2003年4月10日優(yōu)先權(quán)日2003年4月10日發(fā)明者曾寶慶,宋秉乘,陳炳盛,杜立群申請(qǐng)人:聯(lián)發(fā)科技股份有限公司