第2章 儲存群組織【2】
來源:互聯網
上載者:User
2.3 特殊功能寄存器
特殊功能寄存器為處理器提供了一種訪問內部控制寄存器,外圍裝置和I/O連接埠的方式。一個特殊功能寄存器地址總是被全部包含在一個指令內。
標準的特殊功能寄存器空間是128位元組大。為了提供對外圍裝置的控制或者訪問CPU特性和功能,特殊功能寄存器在每一個51MX裝置中,按照需要被實現。未定義的特殊功能寄存器被當作保留,而且不應該被使用者程式訪問。
在特殊功能寄存器空間的16個地址都是可位元組和位定址的。可位定址的特殊功能寄存器是那些以0h或者8h結尾的地址(也就是80h,88h,…,F8h)。位定址允許直接控制和測試那些特殊功能寄存器的位。所有51MX裝置也有附加的128位元組的擴充的特殊功能寄存器(在《51MX架構參考》)中有討論)。Figure 8和9顯示了對於P89C669部分的特殊功能寄存器和擴充特殊功能寄存器的映射圖。
Figure 8
Figure 9
2.4 外部資料儲存(XDATA)
51MX的XDATA空間和經典80C51上的64KB的外部資料儲存空間一樣。
片內XDATA儲存可以通過AUXR寄存器的EXTRAM位在程式控制下禁止掉。訪問以上實現的在片內XDATA預設會被引導到外部匯流排去。如果片內XDATA儲存被禁止,那麼所有的XDATA訪問會被引導到外部匯流排去。P89C669有768位元組的片內XDATA。
2.5 高端資料存放區(HDATA)
51MX架構使用23位定址,支援達8MB資料存放區空間。整個8MB空間中除過64KB的EDATA空間剩下的被稱作HDATA。XDATA空間包含了HDATA的低64KB。
資料指標51MX為了允許方便地擴充現有的80C51程式來使用超過64KB的資料存放區,添加了一個23位的擴充資料指標(EPTR)。如果我們想訪問定位在超出的第一個64KB範圍內的HDATA RAM中的一個單獨的資料位元組,MXCON特殊功能寄存器中EAM位必須被置位(EAX=1)。
所有用DPTR的80C51指令都有一個使用EPTR的51MX變體。23位的EPTR由(按順序)EPH、EPM和EPL特殊功能寄存器組成。圖10和11顯示了分別使用DPTR和EPTR間接訪問資料存放區的例子。因為EPTR是23位,所以EPH的第8位沒有使用。如果讀,它返回1,象其他在特殊功能寄存器中未實現位一樣。EPTR可以被當作23位寄存器或者3個獨立的8位寄存器來操作。使用EPTR允許訪問整個HDATA空間,包括XDATA。任何時候,一個指定的資料指標都是活動的且被和DPTR相關的指令使用。活動的資料指標(DPTR)由一個高位元組(DPH特殊功能寄存器)和一個低位元組(DPL特殊功能寄存器)組成,而且它的目的功能就是儲存一個16位的地址;然而,它可以被當作16位寄存器或者作為兩個獨立的8位寄存器來操作。活動DPTR的選擇可以通過改變資料指標選擇(DPS)位來改變。DPS位佔用了AUXR1的最底位。DPS位僅被應用於兩個DPTR,不是EPTR。
在間接定址模式,當前活動的DPTR或者EPTR分別為訪問XDATA和HDATA提供一個資料存放區地址。當DPTR被用來定址時,只有XDATA空間可以獲得。當EPTR被用來定址時,整個HDATA空間(包含XDATA空間)可以被訪問。如果EPTR值超過7E:FFFF(HDATA的限制),使用EPTR進行資料訪問會引起未定義的結果。限制HDATA地址是為了保持對EPTR定址和通用指標定址(在本文的後節中結實)的定址統一。
Figure 10
Figure 11
2.6 程式儲存(CODE)
80C51,當然也有51MX,都是“哈羅德”架構,意味著代碼和資料空間是分離的。如果有一個可執行代碼的位元組超出64KB,那麼MXCON特殊功能寄存器的EAM位就必須被置位(EAM=1)。同樣,有一個在CODE的常量超出64KB邊界,而且這個常量要被應用程式讀取,那麼EAM位也必須被置位(EAM=1)。
51MX架構擴充80C51程式計數器到23位,提供了一個連續的,不分段的線性代碼空間,這個可能有8MB大。片內空間從代碼地址0開始,擴充到片內代碼儲存的界限。超越這個界限,代碼會被從片外取到。51MX架構可選提供了外部匯流排,它支援:
·混合模式(一些片外代碼和/或資料存放區)
·單片操作(沒有外部匯流排串連)
·無ROM操作(沒有使用片內代碼儲存)
在一些情況下,代碼儲存可以被當作資料來定址。擴充的指令定址模式通過使用有索引的間接定址可以訪問整個帶個8MB帶代碼空間。當前活動的DPTR、EPTR、通用指標或者程式計數器可以被當作基址來使用。圖12到24顯示了不同代碼儲存定址模式的例子。
重設之後,象經典80C51一樣,P89C669從地址00:0000h開始代碼執行。相似地,中斷向量被放置在重設地址之上,從地址00:0003h開始。需要注意的是第一條指令(在地址0處)不應該是一個EJM指令。EJMP是一個5位元組的指令,這樣會和在地址00:0003h的外部中斷向量0重疊。
2.7 通用指標
特別地為了在很大程式上增強C語言的代碼密度和效能,一個新的定址模式叫作通用指標模式也已被添加進51MX。這個定址模式允許使用一個指令訪問任何片內的和片外的代碼和資料空間,而不需要進一步知道資料在不同空間中的哪一個。這包括DATA、IDATA、EDATA、XDATA、HDATA和CODE空間。SFR空間是唯一不可以使用通用指標訪問的空間。
通用指標定址模式使用了一個新的指標寄存器集,這裡有兩個原因。第一個是為了允許定址8MB代碼空間和8MB資料空間,需要24位指標;第二個原因是操作寄存器中的多位元組資料要比SFR中的有效地多。C編譯器實際就是在寄存器中進行指標操作,然後再把結果移到資料指標來使用。
支援兩個通用指標:PR0和PR1。PR0指標由當前寄存器“堆疊”中的寄存器R1、R2和R3組成,而PR1由當前寄存器“堆疊”中的寄存器R5、R6和R7組成。見圖15。
為了通過一個單一併統一的方式來訪問所有的不同的儲存空間,這些儲存空間必須被映射到一個新的16MB總儲存空間大小的視圖。這一新視圖叫作通用儲存映射。XDATA空間被放置在新地址映射的底部。HDATA空間緊接著XDATA的上面。標準內部資料存放區空間(DATA和IDATA)在HDATA的上面,後面剩下的是EDATA空間。最後,代碼儲存空間佔用了映射的最頂部分。因此,通用指標的最高有效位決定了存取碼還是資料存放區。通過把XDATA空間放置在通用儲存映射的底部,通用指標從00:000h到00:FFFFh的地址可以和經典80C51的外部資料儲存空間一致。這樣就提供了在不需要多於64KB外部資料空間時代碼的完全的向上相容性。圖16顯示了通用儲存映射,圖17顯示了標準儲存空間和如何與通用指標的值相關通用指標僅被51MX的一個新的叫做EMOV的指令使用。EMOV指令允許通過一個通用指標將資料移進或移出累加器。不管是移進還是移出,可以指定0、1、2或者3的位移,這個位移會加上前面使用的指標。位移允許C編譯器不用改變指標的值,可以訪問最多4個位元組大的變數(比如長整型)。圖18顯示了一個通用指標用法的例子。注意在通用儲存映射中的CODE地區儲存值是不可能的。另一個被添加的新的指令允許用值1到4來遞增任一通用指標。這樣允許指標越過最後被訪問的資料元素,而指向下一個資料元素。
通用指標主要被設計用來方便在擴充定址模式(當MXCON中的位EAM被置位時)下定址。然後,通用指標仍然可以在當EAM=0時被使用。在這樣的情況下,通用指標定址僅可以訪問底下的64KB代碼空間和底下的64KB的XDATA空間。指向這些地區的通用指標的值不能被更改。當EAM=0時,通用指標訪問這些地區以外的不可訪問的地區時,會傳回值FFh