第4章.外部匯流排
外部匯流排提供外部裝置定址並且可以對51MX裝置進行代碼讀取,資料讀寫操作。外部匯流排使用相同的經典的80C51多路外部匯流排 ,並允許增加輸出地址為23位。
4.1 多路外部匯流排
51MX外部匯流排支援8位元據傳輸並且支援23位地址口線。需要通過設定MXCON寄存器的EAM位來配置相應口線的有效數量。預設是16位地址匯流排,可以先後相容現有的80C51的socket。
軟體改變匯流排配置資訊通過設定 MXCON寄存器中EAM位 = 1來達到。典型的不推薦在程式執行中改變口線地址配置。(如: 在程式執行把EAM =1 改為 0將改變匯流排介面,晶片將不能訪問外部空間);
當P2口複用地址位23位(EAM =1 )時,高地址(Address16~Address23)和低地址(Address0~address7) 將通過鎖存器ALE鎖定到固定外部空間中,當中間地址(Address8~Address15)到來後 ALE降低不進行鎖存工作,3個位元組地址合成總地址。如果MXCON寄存器的EAM位不為1,則和80C51一樣工作。
這裡有兩種特殊的P2口複用對外部空間定址方法(EAM=1, MXCON), MOVX @Ri和 MOVX @DPTR 這兩個指令並不提供23位地址所有資源,當使用程式儲存地址MOVC時,任何缺少的地址位是由PC填補的,對於MOVX所有缺失的地址位都強制填補0來達到23位,所以這些指令是擷取XDATA的低部儲存空間,因此MOVX @Ri地址由高8位全零,中間8位填補為零+低8位為Ri內容組成一個23位地址值。MOVX @DPTR: 地址則由全零的高8位+低16位的DPTR的內容組成23位地址值。這個段落中敘述的MOVX的狀態都是在EAM = 1的設定下有效。只有在這種方式下才會P2口複用地址23位為23位,反之則依然為80C51的16位定址方式。
如果使用者有特殊需要使用23位地址介面和片外代碼可以使用軟體佈建 ,如果這種方式:執行部分代碼再進行配置修改EAM = 1那麼指令必須是固定設定或者地址<00FBH的。因為在 配置向23位地址轉變的時候,需要防止外部匯流排提供一個16位地址。如果此時PC計數器跳轉地址為0100當EAM = 0時(外部硬體期望還是一個23位地址)那麼提供給出的地址將會變成01:0100會出錯。所以標誌位設定要在中間地址為0的情況設定,這樣的話無論16位還是23位地址都是一樣的。
現在打算利用51MX的23位寬地址和80C51的介面一樣對同樣的空間記憶體映射的應用已經得到發展,我們必須遵守一些編程規則,51MX的外部記憶體提供者需要將EAM標誌置1,
如果使用P2口和RW,RD控制線進行記憶體映射,那麼相比於51不需要任何改變,只使用當前23位地址匯流排上的低16位地址。
記憶體映射裝置使用下降沿觸發ALE控制器來鎖存16位地址,MOVX @Ri/DPTR指令不能使用除了 EMOV @Pri;ALE下降沿時鎖存P0的低8位地址和P2口高8位地址,正確的期望記憶體映射裝置地址有效,當P2的address8~address15地址有效時在是下降沿執行WR/RD. MOVX @Ri/DPTR指令將導致高位變0,這樣會導致裝置訪問的問題,為了避免這個問題EMOV @Pri被使用,用PR0: R3 = R2, PR1: R7 =R5 這樣的話 P2口輸出既是 ALE下降沿又是在RD/WR下降沿。最終記憶體映射裝置將會找到正確的地址。
ALE: 鎖存地址功能,這個訊號量直接鎖存地址連接埠。可能是資料或者代碼地址。
PSEN: 程式儲存輸出訊號端,能夠讀出EPROM/ROM中的指令碼範圍在 00:0000-7F:FFFF,如果是通用記憶體映射中範圍相應位址範圍 80:0000-FF:FFFF.
RD:外部資料讀訊號,串連 RD外設裝置
WR:寫外部資料訊號,串連WR外設裝置
外部資料匯流排位址範圍在 00:0000 ~7F:FFFF匹配通用映射記憶體位址。如果片內地址被啟用,那麼外部地址將不能使用,所有DATA/IDATA都在片內。
第5章.中斷處理:
P87C551提供四種不同優先及中斷處理類型,這將有效對各種中斷資源進行源。P87C551提供11個中斷源。
每個對立的中斷源通過設定 INT或者INT1寄存器的某一位來開啟或者關閉,INT0包含一個全域中斷控制位 EA:能夠控制所有的中斷是否有效。
每個中斷源可以通過IP0, IP0H, IP1, IP1H位來設定4個優先順序中的一個。一個高優先順序的中斷可以搶佔當前低優先及的中斷,而同優先順序或低優先順序中斷不能搶佔高優先順序中斷。其他優先順序的中斷不能強佔最好優先順序的中斷,如果不同優先順序中斷同時請求,則優先執行高優先順序中斷服務。
00是最低優先順序中斷屬性,11是最高優先順序屬性,例如: Time0中斷優先屬性是由IN0 和IN0H位來控制, 如果IN0H = 1, IN0 = 0 則 Time0優先屬性為10, 既為2。
如果2個相同優先順序的中斷同時請求,那麼依次選舉決定執行哪個服務,這成為優先仲裁,注意優先仲裁只發生在同優先順序中斷同時請求的情況下。