機(jī)器人資料002ARM7TDMIS(Rev 4)技術(shù)參考手冊(cè)_第1頁
機(jī)器人資料002ARM7TDMIS(Rev 4)技術(shù)參考手冊(cè)_第2頁
機(jī)器人資料002ARM7TDMIS(Rev 4)技術(shù)參考手冊(cè)_第3頁
機(jī)器人資料002ARM7TDMIS(Rev 4)技術(shù)參考手冊(cè)_第4頁
機(jī)器人資料002ARM7TDMIS(Rev 4)技術(shù)參考手冊(cè)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、arm7tdmi-s(rev 4)技術(shù)參考手冊(cè)第1 章 介紹這一章介紹armtdmi-s 處理器。包含以下小節(jié):* 關(guān)于arm7tdmi-s 處理器* arm7tdmi-s 結(jié)構(gòu)* arm7tdmi-s 模塊內(nèi)核和功能框圖* arm7tdmi-s 指令集匯總* rev 3a 和rev 4 之間的差異1.1 關(guān)于arm7tdmi-s 處理器arm7tdmi-s 處理器是arm 通用32 位微處理器家族的成員之一。arm 處理器具有優(yōu)異的性能,但功耗卻很低,使用門的數(shù)量也很少。arm 結(jié)構(gòu)是基于精簡指令集計(jì)算機(jī)(risc)原理而設(shè)計(jì)的。指令集和相關(guān)的譯碼機(jī)制比復(fù)雜指令集計(jì)算機(jī)要簡單得多。這樣的簡化

2、實(shí)現(xiàn)了:* 高的指令吞吐量* 出色的實(shí)時(shí)中斷響應(yīng)* 小的高性價(jià)比的處理器宏單元1.1.1 指令流水線arm7tdmi-s 處理器使用流水線來增加處理器指令流的速度。這樣可使幾個(gè)操作同時(shí)進(jìn)行,并使處理和存儲(chǔ)器系統(tǒng)連續(xù)操作。流水線使用3 個(gè)階段,因此指令分3 個(gè)階段執(zhí)行。* 取指* 譯碼* 執(zhí)行3 階段流水線如圖1-1 所示。注:程序計(jì)數(shù)器(pc)指向被取指的指令,而不是指向正在執(zhí)行的指令。在正常操作過程中,在執(zhí)行一條指令的同時(shí)對(duì)下一條指令進(jìn)行譯碼,并將第三條指令從存儲(chǔ)器中取出。1.1.2 存儲(chǔ)器訪問arm7tdmi-s 處理器使用了馮諾依曼(von neumann )結(jié)構(gòu), 指令和數(shù)據(jù)共用一條3

3、2 位總線。只有裝載存儲(chǔ)和交換指令可以對(duì)存儲(chǔ)器中的數(shù)據(jù)進(jìn)行訪問。數(shù)據(jù)可以是8 位字節(jié)16 位半字或者32 位字。字必須分配為占用4 字節(jié),而半字必須分配為占用2字節(jié)。1.1.3 存儲(chǔ)器接口arm7tdmi-s 處理器的存儲(chǔ)器接口可以使?jié)撛诘男阅艿玫綄?shí)現(xiàn),這樣減少了存儲(chǔ)器的使用。對(duì)速度有嚴(yán)格要求的控制信號(hào)使用流水線,這樣使系統(tǒng)控制功能以標(biāo)準(zhǔn)的低功耗邏輯實(shí)現(xiàn)。這些控制信號(hào)使許多片內(nèi)和片外存儲(chǔ)器技術(shù)所支持的“快速突發(fā)訪問模式”得到充分利用。arm7tdmi-s 處理器的存儲(chǔ)器周期有4 種基本類型* 內(nèi)部周期* 非連續(xù)的周期* 連續(xù)的周期* 協(xié)處理器寄存器傳輸周期1.2 arm7tdmi-s 的結(jié)構(gòu)a

4、rm7tdmi-s 處理器有兩個(gè)指令集* 32 位arm 指令集* 16 位thumb 指令集arm7tdmi-s 處理器使用了arm 結(jié)構(gòu)v4t。關(guān)于arm 和thumb 指令集的詳細(xì)信息請(qǐng)參閱arm體系結(jié)構(gòu)參考手冊(cè)1.2.1 指令壓縮傳統(tǒng)的微處理器結(jié)構(gòu)對(duì)于指令和數(shù)據(jù)有相同的帶寬。因此,和16 位結(jié)構(gòu)相比,32 位結(jié)構(gòu)處理32 位數(shù)據(jù)具有更高的性能,并且在尋址更大的地址空間時(shí)要有效得多。16 位結(jié)構(gòu)比32 位結(jié)構(gòu)具有更高的代碼密度,并且超過32 位結(jié)構(gòu)50%的性能。thumb 在32 位結(jié)構(gòu)上實(shí)現(xiàn)了16 位的指令集,這樣可提供:* 比16 位結(jié)構(gòu)更高的性能* 比32 位結(jié)構(gòu)更高的代碼密度1.

5、2.2 thumb 指令集thumb 指令集是最通用的arm指令的子集。thumb 指令長度為16 位,每條指令都對(duì)應(yīng)一條32 位arm指令,它對(duì)處理器模型有相同的效果。thumb 指令使用標(biāo)準(zhǔn)的arm 寄存器配置進(jìn)行操作,這樣arm 和thumb 狀態(tài)之間具有極好的互用性在執(zhí)行方面,thumb 具有32 位內(nèi)核所有的優(yōu)點(diǎn):* 32 位地址空間* 32 位寄存器* 32 位移位器和算術(shù)邏輯單元(alu)* 32 位存儲(chǔ)器傳輸thumb 因此提供了長的分支范圍,強(qiáng)大的算術(shù)操作和巨大的地址空間。thumb 代碼僅為arm 代碼規(guī)模的65% 但其性能卻相當(dāng)于連接到16 位存儲(chǔ)器系統(tǒng)的arm 處理器性

6、能的160%,因此thumb 使arm7tdmi-s 處理器非常適用于那些只有有限的存儲(chǔ)器帶寬并且代碼密度很高的嵌入式應(yīng)用。16 位thumb 和32 位arm 指令集使設(shè)計(jì)者極大的靈活性,使他們可以根據(jù)各自應(yīng)用的需求,在子程序一級(jí)上實(shí)現(xiàn)對(duì)性能或者代碼規(guī)模的優(yōu)化。例如,應(yīng)用中的快速中斷和dsp 算法可使用完全的arm 指令集編寫并使用thumb 代碼連接。1.3 arm7tdmi-s 模塊內(nèi)核和功能框圖arm7tdmi-s 處理器結(jié)構(gòu)內(nèi)核和功能框圖見下* arm7tdmi-s 模塊見圖1-2* arm7tdmi-s 內(nèi)核見圖1-3* arm7tdmi-s 功能框圖見圖1-4注:數(shù)據(jù)總線上沒有雙

7、向路徑,圖1-2 對(duì)這些作了簡化。1.4 arm7tdmi-s 指令集匯總該節(jié)提供了arm 和thumb 指令集的匯總:* arm 指令匯總* thumb 指令匯總指令集詳見arm 體系結(jié)構(gòu)參考手冊(cè)。1.5 rev 3a 和rev 4 之間的差異:arm7tdmi-s(rev 4)的變更見下面的章節(jié)* 增加的embeddedice-rt 邏輯* 改進(jìn)的調(diào)試通信通道(dcc)帶寬* 通過jtag 對(duì)dcc 進(jìn)行訪問* tap 控制器id 寄存器* 更加有效的多路傳輸1.5.1 增加的embeddedice-rt 邏輯embeddedice-rt 對(duì)arm7tdmi-s(rev 3)當(dāng)中的embe

8、ddedice 邏輯作了改進(jìn)。embeddedice-rt 可以使您在監(jiān)控模式下執(zhí)行調(diào)試。在監(jiān)控模式下,內(nèi)核在遇到斷點(diǎn)或觀察點(diǎn)時(shí)執(zhí)行異常處理,并不像在暫停模式中那樣進(jìn)入調(diào)試狀態(tài)。如果內(nèi)核在遇到斷點(diǎn)或觀察點(diǎn)時(shí)不進(jìn)入調(diào)試狀態(tài),它仍然可以像正常情況下一樣響應(yīng)硬件中斷請(qǐng)求。如果內(nèi)核構(gòu)成了機(jī)械系統(tǒng)反饋環(huán)的一部分,那么在監(jiān)控模式下進(jìn)行調(diào)試非常有用,因?yàn)槿绻V箖?nèi)核會(huì)導(dǎo)致系統(tǒng)運(yùn)轉(zhuǎn)中斷。更詳細(xì)的信息請(qǐng)查閱第5 章 調(diào)試您的系統(tǒng)。節(jié)電當(dāng)dbgen 被拉低時(shí),大部分的embeddedice-rt 邏輯都被禁止以實(shí)現(xiàn)最低功耗。程序員模式的改變程序員模式的改變?nèi)缦拢赫{(diào)試控制寄存器增加了兩個(gè)新的位:bit4 監(jiān)控模式使

9、能,使用該位來控制器件對(duì)斷點(diǎn)或觀察點(diǎn)的反應(yīng)。* 置位時(shí)內(nèi)核執(zhí)行指令或數(shù)據(jù)的異常中止。* 當(dāng)清零時(shí)內(nèi)核進(jìn)入調(diào)試狀態(tài)。bit5 embeddedice-rt 禁止 在更改觀察點(diǎn)。和斷點(diǎn)時(shí)使用該位。* 置位時(shí),該位禁止斷點(diǎn)和觀察點(diǎn),斷點(diǎn)或觀察點(diǎn)寄存器可以編程為新的值。* 清零時(shí),新的斷點(diǎn)或觀察點(diǎn)值生效。協(xié)處理器寄存器映射協(xié)處理器寄存器映射中的一個(gè)新的寄存器(r2) 指示處理器是因?yàn)橐粋€(gè)真實(shí)的中止,還是因?yàn)閿帱c(diǎn)或觀察點(diǎn)而進(jìn)入預(yù)取指或數(shù)據(jù)異常中止。更詳細(xì)的信息請(qǐng)參閱第5 章的中止?fàn)顟B(tài)寄存器。1.5.2 改進(jìn)的調(diào)試通信通道(dcc)帶寬在arm7tdmi-s 處理器(rev 3)中,讀取dcc 數(shù)據(jù)需要對(duì)

10、掃描鏈2 進(jìn)行兩次訪問第一次訪問,狀態(tài)位,第二次訪問數(shù)據(jù)本身。為了改進(jìn)dcc 帶寬,在arm7tdmi-s 處理器(rev 4)中,讀取數(shù)據(jù)和狀態(tài)位只需要一次訪問。狀態(tài)位包含在掃描鏈所讀取的地址區(qū)域的最低位當(dāng)中。dcc 控制寄存器中的狀態(tài)位保持不變以確保向下兼容性。更多信息參考第5 章的調(diào)試通信通道一節(jié)。1.5.3 通過jtag 訪問dccdcc 控制寄存器可通過arm7tdmi-s 處理器(rev 4)中的jtag 接口進(jìn)行控制處理器寫操作清零bit0數(shù)據(jù)讀控制位。更多信息請(qǐng)參考第5 章的調(diào)試通信通道一節(jié)。1.5.4 tap 控制器id 寄存器tap 控制器id 寄存器值為0x7f1f0f0

11、f。更多信息請(qǐng)參考第5 章的arm7tdmi-s 器件標(biāo)識(shí)(id) 代碼寄存器一節(jié)。第2 章 編程模型這一章講述arm7tdmi-s 處理器的編程模型包含以下小節(jié)* 關(guān)于編程模型* 處理器操作狀態(tài)* 存儲(chǔ)器格式* 指令長度* 數(shù)據(jù)類型* 操作模式* 寄存器* 程序狀態(tài)寄存器* 異常* 狀態(tài)延遲* 復(fù)位2.1 關(guān)于編程模型arm7tdmi-s 處理器內(nèi)核使用arm v4t 結(jié)構(gòu)實(shí)現(xiàn),該結(jié)構(gòu)包含32 位arm 指令集和16 位thumb 指令集。在arm 體系結(jié)構(gòu)參考手冊(cè)中詳細(xì)講述了編程模型。2.2 處理器操作狀態(tài)arm7tdmi-s 處理器有兩種操作狀態(tài):arm 狀態(tài) 32 位,這種狀態(tài)下執(zhí)行的

12、是字方式的arm 指令thumb 狀態(tài) 16位,半字方式的thumb 指令在thumb 狀態(tài)中,程序計(jì)數(shù)器(pc )使用bit1 來選擇切換半字。注:arm 和thumb 狀態(tài)間的切換并不影響處理器模式或寄存器內(nèi)容。2.2.1 狀態(tài)切換您可以使用bx 指令將arm7tdmi-s 內(nèi)核的操作狀態(tài)在arm 狀態(tài)和thumb 狀態(tài)之間進(jìn)行切換詳見arm 體系結(jié)構(gòu)參考手冊(cè)。所有的異常處理都在arm 狀態(tài)中執(zhí)行。如果異常發(fā)生在thumb 狀態(tài)中,處理器會(huì)返回arm 狀態(tài)。在異常處理返回時(shí)自動(dòng)切換回thumb 狀態(tài)。2.3 存儲(chǔ)器格式arm7tdmi-s 處理器將存儲(chǔ)器看作是一個(gè)從0 開始的線性遞增的字節(jié)

13、集合* 字節(jié)0 到3 保存第1 個(gè)存儲(chǔ)的字* 字節(jié)4 到7 保存第2 個(gè)存儲(chǔ)的字* 字節(jié)8 到11 保存第3 個(gè)存儲(chǔ)的字arm7tdmi-s 處理器可以將存儲(chǔ)器中的字以下列格式存儲(chǔ)* 大端(big-endian )格式* 小端(little-endian )格式2.3.1 大端格式在大端格式中arm7tdmi-s 處理器將最高位字節(jié)保存在最低地址字節(jié),最低位字節(jié)保存在最高地址字節(jié),因此存儲(chǔ)器系統(tǒng)字節(jié)0 連接到數(shù)據(jù)線31 24。2.3.2 小端格式在小端格式中一個(gè)字當(dāng)中最低地址的字節(jié)被看作是最低位字節(jié),最高地址字節(jié)被看作是最高位字節(jié)。因此存儲(chǔ)器系統(tǒng)字節(jié)0 連接到數(shù)據(jù)線7 0。如圖2-2 所示。2

14、.4 指令長度指令長度為下面兩種之一* 32 位長度(在arm 狀態(tài)中)* 16 位長度(在thumb 狀態(tài)中)2.5 數(shù)據(jù)類型arm7tdmi-s 處理器支持下列數(shù)據(jù)類型* 字32 位* 半字16 位* 字節(jié)8 位您必須這樣進(jìn)行分配* 字量必須分配為占用4 個(gè)字節(jié)* 半字量必須分配為占用2 個(gè)字節(jié)* 字節(jié)量可放置在任何一個(gè)字節(jié)內(nèi)2.6 操作模式arm7tdmi-s 處理器具有7 種操作模式* 用戶模式 這是arm 程序通常執(zhí)行的狀態(tài),用于執(zhí)行大多數(shù)應(yīng)用程序。* 快速中斷(fiq)模式 支持?jǐn)?shù)據(jù)傳輸或通道處理。* 中斷(irq)模式 用于通用中斷處理。* 超級(jí)用戶模式 是操作系統(tǒng)一種受保護(hù)的模

15、式。* 中止模式 在數(shù)據(jù)或指令預(yù)取指中止時(shí)進(jìn)入該模式。* 系統(tǒng)模式 是操作系統(tǒng)一種特許的用戶模式。* 未定義模式 當(dāng)執(zhí)行未定義的指令時(shí)進(jìn)入該模式。除了用戶模式之外其它模式都被歸為特權(quán)模式。特權(quán)模式用于服務(wù)中斷異?;蛘咴L問受保護(hù)的資源。2.7 寄存器arm7tdmi-s 處理器總共有37 個(gè)寄存器* 31 個(gè)通用32 位寄存器* 6 個(gè)狀態(tài)寄存器這些寄存器并不是在同一時(shí)間全都可以被訪問的。處理器狀態(tài)和操作模式?jīng)Q定了程序員可以訪問哪些寄存器。2.7.1 arm 狀態(tài)寄存器集在arm 狀態(tài)中16 個(gè)通用寄存器和1 個(gè)或2 個(gè)狀態(tài)寄存器可在任何時(shí)候同時(shí)被訪問。在特權(quán)模式中與模式相關(guān)的分組寄存器可以被訪

16、問。圖2-3 所示為每種模式所能訪問的寄存器。arm 狀態(tài)寄存器集包含16 個(gè)可直接訪問的寄存器r0 r15。一個(gè)附加的寄存器當(dāng)前程序狀態(tài)寄存器(cpsr)包含條件代碼標(biāo)志和當(dāng)前模式位,寄存器r0 r13 為保存數(shù)據(jù)或地址值的通用寄存器,寄存器r14和r15 具有下面的特殊功能連接寄存器 寄存器14 作為一個(gè)子程序連接寄存器(lr)當(dāng)執(zhí)行連接分支(bl) 指令時(shí),r14 接收r15 的備份。在其它時(shí)候可將r14 當(dāng)成一個(gè)通用寄存器對(duì)應(yīng)的分組寄存器r14_svc, r14_irq, r14_fiq,r14_abt 和r14_und 與之相似,當(dāng)發(fā)生中斷和異?;蛘弋?dāng)中斷或異常,子程序中的bl指令執(zhí)

17、行,時(shí)用于保存r15 的返回值。程序計(jì)數(shù)器 寄存器15 用于保存程序計(jì)數(shù)器pc在arm 狀態(tài)中r15 中的bits1:0為0 bits31:2包含pc 值。在thumb 狀態(tài)中bit0為0 bits31:1包含pc 值在特權(quán)模式中另外一個(gè)寄存器被保存的程序狀態(tài)寄存器(spsp) 可以被訪問。它包含了條件代碼標(biāo)志和作為異常的結(jié)果所保存的模式位,此異常導(dǎo)致進(jìn)入當(dāng)前模式,關(guān)于程序狀態(tài)寄存器的描述見后面的章節(jié)分組寄存器有一個(gè)模式標(biāo)識(shí)符,用于指示它們被映射到哪個(gè)用戶模式寄存器。這些模式標(biāo)識(shí)符如表2-1所示:fiq 模式有7 個(gè)分組寄存器,分別映射到r8 r14 (r8_fiq r14_fiq)在arm

18、狀態(tài)中,大多數(shù)fiq 處理程序都不必保存任何寄存器。用戶,irq ,超級(jí)用戶,中止和未定義模式各有2 個(gè)分組寄存器,分別映射到r13 和r14,每種模式允許有一個(gè)專用的堆棧指針和lr。圖2-3 所示為arm 狀態(tài)寄存器。2.7.2 thumb 狀態(tài)寄存器集thumb 狀態(tài)寄存器集時(shí)arm 狀態(tài)集的子集,程序員可直接訪問:* 8 個(gè)通用寄存器r0 r7* pc* 堆棧指針sp* 連接寄存器lr* cpsr每個(gè)特權(quán)模式都有分組的sp lr 和spsr, 該寄存器集如圖2-4 所示。2.7.3 arm 狀態(tài)寄存器和thumb 狀態(tài)寄存器之間的關(guān)系thumb 狀態(tài)寄存器與arm 狀態(tài)寄存器有如下的關(guān)系

19、:* thumb 狀態(tài)r0 r7 與arm 狀態(tài)r0 r7 相同* thumb 狀態(tài)cpsr 和spsr 與arm 狀態(tài)cpsr 和spsr 相同* thumb 狀態(tài)sp 映射到arm 狀態(tài)r13* thumb 狀態(tài)lr 映射到arm 狀態(tài)r14* thumb 狀態(tài)pc 映射到arm 狀態(tài)pc(r15)這些關(guān)系如圖2-5 所示:注:寄存器r0 r7 為低寄存器,寄存器r8 r15 為高寄存器2.7.4 在thumb 狀態(tài)中訪問高寄存器在thumb 狀態(tài)中高寄存器r8 r15 不是標(biāo)準(zhǔn)寄存器集的一部分。匯編語言程序員對(duì)它們的訪問受到限制,但可以將它們用于快速暫存可以使用mov 指令的特殊變量將一

20、個(gè)值從低寄存器(r0 r7) 轉(zhuǎn)移到高寄存器,或者從高寄存器到低寄存器cmp 指令可用于比較高寄存器和低寄存器的值。add 指令可用于將高寄存器的值與低寄存器的值相加,詳細(xì)信請(qǐng)參考arm 體系結(jié)構(gòu)參考手冊(cè)。程序狀態(tài)寄存器arm7tdmi-s 內(nèi)核包含1 個(gè)cpsr 和5 個(gè)spsr 供異常處理程序使用。程序狀態(tài)寄存器:* 保持條件代碼標(biāo)志* 控制中斷的使能和禁止* 設(shè)置處理器操作模式位的分配如圖2-6 所示注:為了保持與將來的arm 處理器兼容,并且作為一種良好的習(xí)慣,在更改cpsr 時(shí),我們強(qiáng)烈建議您使用讀寫修改的方法。2.8.1 條件代碼標(biāo)志n, z, c 和v 位都是條件代碼標(biāo)志??梢酝?/p>

21、過算術(shù)和邏輯操作來設(shè)置這些位。這些標(biāo)志還可通過msr和ldm 指令進(jìn)行設(shè)置。arm7tdmi-s 處理器對(duì)這些位進(jìn)行測試以決定是否執(zhí)行一條指令。在arm 狀態(tài)中,所有指令都可按條件來執(zhí)行。在thumb 狀態(tài)中只有分支指令可條件執(zhí)行。更詳細(xì)的信息請(qǐng)參考arm 體系結(jié)構(gòu)參考手冊(cè)。2.8.2 控制位psr 的最低8 位為控制位,它們分別是* 中斷禁止位* t 位* 模式位當(dāng)發(fā)生異常時(shí),控制位改變,當(dāng)處理器在一個(gè)特權(quán)模式下操作時(shí),可用軟件操作這些位。中斷禁止位i 和f 位都是中斷禁止位* 當(dāng)i 位置位時(shí),irq 中斷被禁止* 當(dāng)f 位置位時(shí),fiq 中斷被禁止t 位t 位反映了正在操作的狀態(tài)* 當(dāng)t

22、位置位時(shí),處理器正在thumb 狀態(tài)下運(yùn)行* 當(dāng)t 位清零時(shí),處理器正在arm 狀態(tài)下運(yùn)行操作狀態(tài)通過cptbit 外部信號(hào)反映。警告:絕對(duì)不要強(qiáng)制改變cpsr 寄存器中的t 位。如果這樣做,處理器會(huì)進(jìn)入一個(gè)無法預(yù)知的狀態(tài)。模式位m4, m3, m2, m1 和m0 位(m4:0 )都是模式位。這些位決定處理器的操作模式,見表2-2 ,不是所有模式位的組合都定義了有效的處理器模式,因此請(qǐng)小心不要使用表中所沒有列出的組合。注:如果將非法值寫入m4:0中,處理器將進(jìn)入一個(gè)無法恢復(fù)的模式。2.8.3 保留位psr 中的保留位被保留將來使用,當(dāng)改變psr 標(biāo)志和控制位時(shí),請(qǐng)確認(rèn)沒有改變這些保留位。另外

23、請(qǐng)確保您的程序不依賴于包含特定值的保留位,因?yàn)閷淼奶幚砥骺赡軙?huì)將這些位設(shè)置為1 或者0。2.9 異常只要正常的程序流被暫時(shí)中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個(gè)來自外設(shè)的中斷。在處理異常之前,arm7tdmi-s 內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時(shí)可以恢復(fù)執(zhí)行原來的程序。如果同時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的順序來處理異常,見異常優(yōu)先級(jí)一節(jié)。該節(jié)將會(huì)詳細(xì)講述arm7tdmi-s 處理器的異常處理* 異常入口/出口匯總* 進(jìn)入異常* 退出異常2.9.1 異常入口/出口匯總表2-3 所示為異常入口處變量r14 所保存的pc 值以及退出異常處理程序所推薦使用的指令。2.9.2

24、進(jìn)入異常當(dāng)處理異常時(shí),arm7tdmi-s 內(nèi)核會(huì):1. 在適當(dāng)?shù)膌r 中保存下一條指令的地址。當(dāng)異常入口來自:2. arm 狀態(tài)arm7tdmi-s 將下一條指令的地址復(fù)制到lr 中(當(dāng)前pc+4 或pc+8 取決于異常的類型)thumb 狀態(tài)arm7tdmi-s 將pc 加偏移值(pc+4 或pc+8 取決于異常的類型)寫入lr當(dāng)進(jìn)入異常時(shí),異常處理程序不必確定狀態(tài)。例如在swi 情況下,movs pc,r14_svc 總是返回到下一條指令,而不管swi 是在arm 還是在thumb 狀態(tài)下執(zhí)行。2. 將cpsr 復(fù)制到適當(dāng)?shù)膕psr。3. 根據(jù)異常將cpsr 模式強(qiáng)制設(shè)為某一值。4. 強(qiáng)

25、制pc 從相關(guān)的異常向量處對(duì)下一條指令取指。arm7tdmi-s 內(nèi)核在中斷異常時(shí)置位中斷禁止標(biāo)志,這樣可防止不受控制的異常嵌套。注:異常總是在arm 狀態(tài)中進(jìn)行處理。當(dāng)處理器處于thumb 狀態(tài)時(shí)發(fā)生了異常,在異常向量地址裝入pc 時(shí),會(huì)自動(dòng)切換到arm 狀態(tài)。2.9.3 退出異常當(dāng)異常結(jié)束時(shí),異常處理程序必須:1. 將lr 中的值減去偏移量后移入pc,偏移量根據(jù)異常的類型而有所不同,見表2-32. 將spsr 的值復(fù)制回cpsr。3. 清零在入口置位的中斷禁止標(biāo)志。注:恢復(fù)cpsr 的動(dòng)作會(huì)將t, f 和i 位自動(dòng)恢復(fù)為異常發(fā)生前的值。2.9.4 快速中斷請(qǐng)求快速中斷請(qǐng)求(fiq)異常支持

26、數(shù)據(jù)轉(zhuǎn)移或通道處理。在arm 狀態(tài)中,fiq 模式有8 個(gè)專用的寄存器可用來滿足寄存器保護(hù)的需要(這是上下文切換的最小開銷)將nfiq 信號(hào)拉低可實(shí)現(xiàn)外部產(chǎn)生fiq。不管異常入口是來自arm 狀態(tài)還是thumb 狀態(tài),fiq 處理程序都會(huì)通過執(zhí)行下面的指令從中斷返回:subs pc,r14_fiq,#4在一個(gè)特權(quán)模式中,可通過置位cpsr 中的f 標(biāo)志來禁止fiq 異常。當(dāng)f 標(biāo)志清零時(shí),arm7tdmi-s在每條指令結(jié)束時(shí)檢測fiq 同步器輸出端的低電平。2.9.5 中斷請(qǐng)求中斷請(qǐng)求(irq) 異常是一個(gè)由nirq 輸入端的低電平所產(chǎn)生的正常中斷,irq 的優(yōu)先級(jí)低于fiq。對(duì)于fiq 序列

27、它是被屏蔽的。任何時(shí)候在一個(gè)特權(quán)模式下,都可通過置位cpsr 中的i 位來禁止irq,。不管異常入口是來自arm 狀態(tài)還是thumb 狀態(tài),irq 處理程序都會(huì)通過執(zhí)行下面的指令從中斷返回:subs pc,r14_irq,#42.9.6 中止中止表示當(dāng)前存儲(chǔ)器訪問不能被完成。這是通過外部abort 輸入指示的。不管異常入口是來自arm狀態(tài)還是thumb 狀態(tài),fiq 處理程序都會(huì)通過執(zhí)行下面的指令從中斷返回:subs pc,r14_fiq,#4 在存儲(chǔ)器訪問周期結(jié)束時(shí)檢測中止異常。有兩種類型的中止* 預(yù)取指中止 發(fā)生在指令預(yù)取指過程中* 數(shù)據(jù)中止 發(fā)生在對(duì)數(shù)據(jù)訪問時(shí)預(yù)取指中止當(dāng)發(fā)生預(yù)取指中止時(shí)

28、,arm7tdmi-s 內(nèi)核將預(yù)取的指令標(biāo)記為無效,但在指令到達(dá)流水線的執(zhí)行階段時(shí)才進(jìn)入異常。如果指令在流水線中因?yàn)榘l(fā)生分支而沒有被執(zhí)行,中止將不會(huì)發(fā)生。在處理中止的原因之后,不管處于哪種處理器操作狀態(tài),處理程序都會(huì)執(zhí)行下面的指令:subs pc,r14_abt,#4這個(gè)動(dòng)作恢復(fù)了pc 和cpsr 并重試被中止的指令。數(shù)據(jù)中止當(dāng)發(fā)生數(shù)據(jù)中止時(shí)根據(jù)指令的類型產(chǎn)生不同的動(dòng)作:* 數(shù)據(jù)轉(zhuǎn)移指令(ldr,str) 回寫到被修改的基址寄存器。中止處理程序必須注意這一點(diǎn)。* 交還指令(swp) 中止好像沒有被執(zhí)行過一樣中止必須發(fā)生在(swp) 指令進(jìn)行讀訪問時(shí)* 塊數(shù)據(jù)轉(zhuǎn)移指令(ldm,stm) 完成。當(dāng)

29、回寫被設(shè)置時(shí)。基址寄存器被更新,在指示出現(xiàn)中止后,arm7tdmi-s 內(nèi)核防止所有寄存器被覆蓋。這意味著arm7tdmi-s 內(nèi)核總是會(huì)保護(hù)被中止的ldm 指令中的r15 (總是最后一個(gè)被轉(zhuǎn)移的寄存器)。中止的機(jī)制使指令分頁的虛擬存儲(chǔ)器系統(tǒng)能夠被實(shí)現(xiàn)。在這樣一個(gè)系統(tǒng)中,處理器允許產(chǎn)生仲裁地址。當(dāng)某一地址的數(shù)據(jù)無法訪問時(shí),存儲(chǔ)器管理單元(mmu) 通知產(chǎn)生了中止,中止處理程序必須找出中止的原因,使請(qǐng)求的數(shù)據(jù)可以被訪問并重新執(zhí)行被中止的指令。應(yīng)用程序不必知道可用存儲(chǔ)器的數(shù)量,也不必知道它的被中止時(shí)所處的狀態(tài)。在修復(fù)產(chǎn)生中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必須執(zhí)行下面的返回指令:s

30、ubs pc,r14_abt,#8這個(gè)動(dòng)作恢復(fù)了pc 和cpsr 并重試被中止的指令:2.9.7 軟件中斷指令軟件中斷(swi)用于進(jìn)入超級(jí)用戶模式,通常用于請(qǐng)求一個(gè)特定的超級(jí)用戶函數(shù)。swi 處理程序通過執(zhí)行下面的指令返回:movs pc,r14_svc這個(gè)動(dòng)作恢復(fù)了pc 和cpsr 并返回到swi 之后的指令。swi 處理程序讀取操作碼以提取swi 函數(shù)編號(hào)。2.9.8 未定義的指令當(dāng)arm7tdmi-s 處理器遇到一條系統(tǒng)內(nèi)任何協(xié)處理器都無法處理的指令時(shí),arm7tdmi-s 內(nèi)核執(zhí)行未定義指令陷阱。軟件可使用這一機(jī)制通過仿真未定義的協(xié)處理器指令來擴(kuò)展arm 指令集。注:arm7tdmi

31、-s 處理器完全遵循arm 結(jié)構(gòu)v4t ,可以捕獲所有分類未被定義的指令位格式。在防止失敗的指令后,捕獲處理器執(zhí)行下面的指令:movs pc,r14_und這個(gè)動(dòng)作恢復(fù)了pc 和cpsr 并返回到未定義指令之后的指令。關(guān)于未定義指令更詳細(xì)的信息請(qǐng)參考arm 體系結(jié)構(gòu)參考手冊(cè)。2.9.9 異常向量表2-4 所示位異常向量地址,在表中,i 和f 表示先前的值。2.9.10 異常優(yōu)先級(jí)當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí)一個(gè)固定的優(yōu)先級(jí)系統(tǒng)決定它們被處理的順序:1. 復(fù)位(最高優(yōu)先級(jí))2. 數(shù)據(jù)中止3. fiq4. irq5. 預(yù)取指中止6. 未定義指令7. swi (最低優(yōu)先級(jí))有些異常不能一起發(fā)生* 未定義的指

32、令和swi 異?;コ?。它們分別對(duì)應(yīng)于當(dāng)前指令的一個(gè)特定(非重疊譯碼)*當(dāng)fiq 使能并且在發(fā)生fiq 的同時(shí)產(chǎn)生了一個(gè)數(shù)據(jù)中止,arm7tdmi-s 內(nèi)核進(jìn)入數(shù)據(jù)中止處理程序,然后立即轉(zhuǎn)到fiq 向量。從fiq 的正常返回使數(shù)據(jù)中止處理程序恢復(fù)執(zhí)行。數(shù)據(jù)中止的優(yōu)先級(jí)必須高于fiq 以確保數(shù)據(jù)轉(zhuǎn)移錯(cuò)誤不會(huì)被漏過。必須將異常入口的時(shí)間增加到系統(tǒng)中最壞情況下fiq 的延遲時(shí)間。2.10 中斷延遲中斷延遲被描述為* 最大中斷延遲* 最小中斷延遲2.10.1 最大中斷延遲當(dāng)fiq 使能時(shí),最壞情況下fiq 的延遲時(shí)間包含* tsyncmax,請(qǐng)求通過同步器的最長時(shí)間。tsyncmax 為2 個(gè)處理器周期

33、。* tldm 最長的指令執(zhí)行需要的時(shí)間(最長的指令是裝載包括pc 在內(nèi)所有寄存器的ldm 指令)tldm 在零等待狀態(tài)系統(tǒng)中的執(zhí)行時(shí)間為20 個(gè)周期。*texc 數(shù)據(jù)中止入口的時(shí)間,texc 為3 個(gè)周期* tfiq fiq 入口的時(shí)間,tfiq 為2 個(gè)周期因此總的延遲時(shí)間為27 個(gè)周期,在系統(tǒng)使用40mhz 處理器時(shí)鐘時(shí),略微小于0.7 微妙。在此時(shí)間結(jié)束后,arm7tdmi-s 執(zhí)行位于0x1c 處的指令。最大的irq 延遲時(shí)間與之相似,但必須考慮到這樣一個(gè)事實(shí),即有更高優(yōu)先級(jí)的fiq 可能會(huì)因?yàn)橹俨玫臅r(shí)間而延遲irq 處理程序的進(jìn)入。2.10.2 最小中斷延遲fiq 或irq 的最小

34、中斷延遲是請(qǐng)求通過同步器的時(shí)間tsyncmin 加上tfiq( 4 個(gè)處理器周期)2.11 復(fù)位當(dāng)nreset 信號(hào)被拉低時(shí)arm7tdmi-s 處理器放棄正在執(zhí)行的指令當(dāng)nreset 信號(hào)再次變?yōu)楦唠娖綍r(shí),nreset 處理器1. 強(qiáng)制m4:0變?yōu)閎10011 (超級(jí)用戶模式)2. 置位cpsr 中的i 和f 位3. 清零cpsr 中的t 位4. 強(qiáng)制pc 從地址0x00 開始對(duì)下一條指令進(jìn)行取指。5. 返回到arm 狀態(tài)并恢復(fù)執(zhí)行在復(fù)位后,除pc 和cpsr 之外的所有寄存器的值都不確定。第3 章 存儲(chǔ)器接口這一章講述arm7tdmi-s 處理器的存儲(chǔ)器接口,包含以下內(nèi)容:* 關(guān)于存儲(chǔ)器接

35、口* 總線接口信號(hào)* 總線周期類型* 尋址信號(hào)* 數(shù)據(jù)定時(shí)信號(hào)* 使用clken 控制總線周期3.1 關(guān)于存儲(chǔ)器接口arm7tdmi-s 處理器采用馮諾曼(von neumann) 結(jié)構(gòu),指令和數(shù)據(jù)共用一條32 位數(shù)據(jù)總線,只有裝載保存和交換指令可訪問存儲(chǔ)器中的數(shù)據(jù)arm7tdmi-s 處理器支持4 種基本類型的存儲(chǔ)器周期* 非連續(xù)* 連續(xù)* 內(nèi)部* 協(xié)處理器寄存器傳遞3.2 總線接口信號(hào)arm7tdmi-s 處理器總線接口的信號(hào)可分成4 類* 時(shí)鐘和時(shí)鐘控制* 地址分類信號(hào)* 存儲(chǔ)器請(qǐng)求信號(hào)* 數(shù)據(jù)定時(shí)信號(hào)時(shí)鐘和時(shí)鐘控制信號(hào)為* clk* clken* nreset地址分類信號(hào)* addr3

36、1:0* write* size1:0* prot1:0* lock存儲(chǔ)器請(qǐng)求信號(hào)為* trans1:0數(shù)據(jù)定時(shí)信號(hào)為* wdata31:0* rdata31:0* abort每個(gè)信號(hào)組都共用相同的總線接口周期時(shí)序關(guān)系。arm7tdmi-s 處理器總線接口中的所有信號(hào)都產(chǎn)生或采樣自clk 的上升沿。總線周期可通過使用clken 信號(hào)進(jìn)行延長。該信號(hào)的介紹見使用clken 控制總線周期一節(jié)。這一章的所有其它節(jié)所描述的都是一個(gè)clken 永遠(yuǎn)為高電平的簡單系統(tǒng)3.3 總線周期類型arm7tdmi-s 處理器總線接口采用流水線結(jié)構(gòu),因此地址分類信號(hào)和存儲(chǔ)器請(qǐng)求信號(hào)都在前一個(gè)總線周期內(nèi)廣播,這樣可使一

37、個(gè)存儲(chǔ)器周期用最大時(shí)間對(duì)地址進(jìn)行譯碼并響應(yīng)訪問請(qǐng)求。單個(gè)的存儲(chǔ)器周期如圖3-1 所示arm7tdmi-s 處理器總線接口可執(zhí)行4 種不同類型的存儲(chǔ)器周期。這些類型通過trans1:0信號(hào)指示。存儲(chǔ)器周期類型在trans1:0信號(hào)上的編碼見表3-1。arm7tdmi-s 處理器的存儲(chǔ)器控制器只在n 周期或s 周期負(fù)責(zé)存儲(chǔ)器的訪問。arm7tdmi-s 處理器有4 種基本類型的處理器周期:非連續(xù)周期在此周期中,arm7tdmi-s 內(nèi)核請(qǐng)求與一個(gè)地址進(jìn)行數(shù)據(jù)傳送,該地址與前一個(gè)周期所使用的地址無關(guān)。連續(xù)周期在此周期中,arm7tdmi-s 內(nèi)核請(qǐng)求與一個(gè)地址進(jìn)行數(shù)據(jù)傳送,該地址比前一個(gè)周期所使用的

38、地址大一個(gè)字或半個(gè)字。內(nèi)部周期在此周期中,arm7tdmi-s 內(nèi)核不請(qǐng)求傳送因?yàn)樗趫?zhí)行一個(gè)內(nèi)部功能,這時(shí)沒有有用的預(yù)取指能夠被執(zhí)行。協(xié)處理器傳輸周期在此周期中,arm7tdmi-s 內(nèi)核使用數(shù)據(jù)總線與協(xié)處理器進(jìn)行通信,但不請(qǐng)求存儲(chǔ)器的任何動(dòng)作。3.3.1 非連續(xù)周期非連續(xù)周期是arm7tdmi-s 處理器總線周期的最簡格式,當(dāng)arm7tdmi-s 內(nèi)核請(qǐng)求與一個(gè)地址進(jìn)行數(shù)據(jù)傳送,而該地址與前一個(gè)周期所使用的地址無關(guān)時(shí),就產(chǎn)生了非連續(xù)周期。存儲(chǔ)器控制器必須啟動(dòng)一個(gè)存儲(chǔ)器訪問以滿足該請(qǐng)求。地址分類信號(hào)和trans1:0=n 周期都在總線上廣播,在下一個(gè)總線周期結(jié)束時(shí),數(shù)據(jù)在cpu 和存儲(chǔ)器之

39、間進(jìn)行傳輸。如圖3-2 所示。arm7tdmi-s 處理器可執(zhí)行背靠背的非連續(xù)存儲(chǔ)器周期。例如,執(zhí)行一個(gè)str 指令。見圖3-3。如果您正在設(shè)計(jì)一個(gè)arm7tdmi-s 處理器的存儲(chǔ)器控制器,而您的存儲(chǔ)器系統(tǒng)無法應(yīng)付這種情況,那么您必須使用clken 信號(hào)延長總線周期,以使存儲(chǔ)器系統(tǒng)有足夠多的周期可用。3.3.2 連續(xù)周期連續(xù)周期執(zhí)行總線上的突發(fā)串傳輸,可以使用此信息優(yōu)化存儲(chǔ)器控制器與突發(fā)串存儲(chǔ)器件間的接口設(shè)計(jì),例如,dram在一個(gè)連續(xù)周期中,arm7tdmi-s 處理器請(qǐng)求一個(gè)存儲(chǔ)器位置,該位置是連續(xù)突發(fā)串的一部分。如果是突發(fā)串的第一部分,那么地址與前一個(gè)內(nèi)部周期相同。否則,地址根據(jù)前一個(gè)周

40、期增加。* 對(duì)于一個(gè)字突發(fā)串的訪問,地址加4* 對(duì)于一個(gè)半字突發(fā)串的訪問,地址加2字節(jié)突發(fā)串的訪問無法實(shí)現(xiàn)一個(gè)突發(fā)串總是以一個(gè)n 周期或一個(gè)合并的i-s 周期開始,接下來是s 周期,一個(gè)突發(fā)串由相同類型的傳輸組成。addr31:0信號(hào)在突發(fā)串中增加,其它地址分類信號(hào)在整個(gè)突發(fā)串中保持不變。突發(fā)串的類型見表3-2。突發(fā)串中的所有訪問都具有相同的寬度,方向和保護(hù)類型。圖3-4 所示為突發(fā)串訪問的一個(gè)例子。3.3.3 內(nèi)部周期在一個(gè)內(nèi)部周期中,arm7tdmi-s 處理器不請(qǐng)求對(duì)存儲(chǔ)器進(jìn)行訪問,由于正在執(zhí)行一個(gè)內(nèi)部功能,這時(shí)沒有有用的預(yù)取指能夠被執(zhí)行。arm7tdmi-s 處理器有可能廣播下一次訪問

41、的地址,這樣使譯碼能夠開始執(zhí)行,但存儲(chǔ)器控制器不能提交存儲(chǔ)器,訪問見下一節(jié)的描述。3.3.4 合并的i-s 周期arm7tdmi-s 處理器可以執(zhí)行對(duì)總線的優(yōu)化,這樣可為存儲(chǔ)器譯碼增加額外的時(shí)間。這樣做的時(shí)候,下一個(gè)存儲(chǔ)器周期的地址在總線的內(nèi)部周期中廣播。這使存儲(chǔ)器控制器對(duì)地址進(jìn)行譯碼,但在這個(gè)周期決不會(huì)啟動(dòng)存儲(chǔ)器的訪問。在合并的i-s 周期中,個(gè)周期是同一個(gè)存儲(chǔ)器位置的連續(xù)周期,這使訪問被提交,而存儲(chǔ)器控制器必須啟動(dòng)對(duì)存儲(chǔ)器的訪問。見圖3-5。注:當(dāng)設(shè)計(jì)一個(gè)存儲(chǔ)器控制器時(shí),請(qǐng)確保在指向一個(gè)不同地址的n 周期跟在i 周期之后時(shí),設(shè)計(jì)也能工作在發(fā)生異常或?qū)憄c 時(shí)可能會(huì)出現(xiàn)這種時(shí)序。很重要的一點(diǎn)

42、就是,存儲(chǔ)器控制器在i 周期內(nèi)不提交存儲(chǔ)器周期。3.3.5 協(xié)處理器寄存器傳輸周期在一個(gè)協(xié)處理器寄存器傳輸周期中,arm7tdmi-s 處理器使用數(shù)據(jù)總線與協(xié)處理器進(jìn)行數(shù)據(jù)傳輸。這時(shí)不需要存儲(chǔ)器周期,存儲(chǔ)器控制器不會(huì)啟動(dòng)處理。協(xié)處理器接口在第4 章有詳細(xì)描述。3.4 尋址信號(hào)地址分類信號(hào)分為* addr31:0* write* size1:0* prot1:0* lock* cptbit3.4.1 addr31:0addr31:0是32 位地址總線,它指定傳輸?shù)牡刂贰K械刂范紴樽止?jié)地址,因此一個(gè)字突發(fā)串訪問使地址總線每個(gè)周期加4。地址總線提供4gb 的線性地址空間,當(dāng)被通知進(jìn)行字訪問時(shí),存儲(chǔ)

43、器系統(tǒng)必須忽略最低兩位addr1:0,當(dāng)被通知進(jìn)行半字訪問時(shí),存儲(chǔ)器系統(tǒng)必須忽略最低位addr0。3.4.2 writewrite 指定傳輸?shù)姆较颉rite 為高電平時(shí)指示寫周期,為低電平時(shí)指示讀周期,s 周期的突發(fā)串總是為讀突發(fā)串。或?qū)懲话l(fā)串在突發(fā)串的中間不能改變方向。3.4.3 size1:0size1:0對(duì)傳輸規(guī)格進(jìn)行編碼。arm7tdmi-s 處理器可傳輸字半字和字節(jié)量。見表3-3 所示的size1:0編碼。傳輸規(guī)格在s 周期的突發(fā)串中不能改變。注:為arm7tdmi-s 處理器提供的可寫存儲(chǔ)器系統(tǒng)必須具有單個(gè)的字節(jié)寫使能,c 編譯器和arm 調(diào)試工具鏈(例如multi-ice )都

44、假設(shè)存儲(chǔ)器中的仲裁字節(jié)可寫。如果不提供單個(gè)的字節(jié)寫功能,可能無法使用上述兩種工具。3.4.4 port1:0port1:0對(duì)關(guān)于傳輸?shù)男畔⑦M(jìn)行編碼。存儲(chǔ)器管理單元使用該信號(hào)確定訪問是否來自一個(gè)特權(quán)模式是操作碼還是數(shù)據(jù)取指,因此可用它來實(shí)現(xiàn)訪問允許機(jī)制。port1:0的編碼如表3-4 所示。表3-4 port1:0編碼3.4.5 locklock 向仲裁器指出在總線上正在執(zhí)行一個(gè)微小的操作。lock 通常為低電平,但在執(zhí)行swp 或swpb 指令時(shí)置為高電平。這些指令執(zhí)行一個(gè)微小的讀/寫操作并且可以用于實(shí)現(xiàn)信號(hào)量。3.4.6 cptbitcptbit 指示arm7tdmi-s 處理器的操作狀態(tài)*

45、 在arm 狀態(tài)中cptbit 信號(hào)為低電平* 在thumb 狀態(tài)中cptbit 信號(hào)為高電平3.5 數(shù)據(jù)定時(shí)信號(hào)數(shù)據(jù)定時(shí)信號(hào)在下面的小節(jié)中描述* wdata31:0* rdata31:0* abort3.5.1 wdata31:0wdata31:0是寫數(shù)據(jù)總線。所有wdata31:0處理器的寫數(shù)據(jù)都在該總線上廣播,wdata31:0內(nèi)核到協(xié)處理器的數(shù)據(jù)傳輸在c 周期中也使用該總線。在正常環(huán)境下,存儲(chǔ)器系統(tǒng)必須在寫總線周期結(jié)束時(shí)的clk 上升沿對(duì)wdata31:0總線進(jìn)行采樣。wdata31:0的值只在寫周期內(nèi)有效。3.5.2 rdata31:0rdata31:0是讀數(shù)據(jù)總線,它供arm7td

46、mi-s 內(nèi)核讀取操作碼和數(shù)據(jù)之用。rdata31:0信號(hào)在總線周期結(jié)束時(shí)的clk 上升沿被采樣。在c 周期中該總線也用于從協(xié)處理器向arm7tdmi-s 內(nèi)核傳輸數(shù)據(jù)。3.5.3 abortabort 指示存儲(chǔ)器處理器失敗,abort 在有效的存儲(chǔ)器周期 (s 周期和n 周期內(nèi))的總線周期結(jié)束時(shí)被采樣。如果abort 在數(shù)據(jù)訪問時(shí)被聲明,它將使arm7tdmi-s 處理器執(zhí)行數(shù)據(jù)中止陷阱。如果在操作碼取指時(shí)聲明,中止將沿著流水線被跟蹤。如果指令已被執(zhí)行則執(zhí)行預(yù)取指中止陷阱。abort可被存儲(chǔ)器管理系統(tǒng)用來實(shí)現(xiàn)一個(gè)基本的存儲(chǔ)器保護(hù)機(jī)制或一個(gè)指令分頁的虛擬存儲(chǔ)器系統(tǒng)。3.5.4 字節(jié)和半字訪問a

47、rm7tdmi-s 處理器通過size1:0信號(hào)指示傳輸數(shù)據(jù)的規(guī)格。其編碼見表3-5為了能夠使用c 編譯器和arm 調(diào)試工具鏈(例如multi-ice), 基于arm7tdmi-s 處理器系統(tǒng)中所有的可寫存儲(chǔ)器都支持對(duì)單個(gè)字節(jié)的寫操作。arm7tdmi-s 處理器所產(chǎn)生的地址總是字節(jié)地址,但是存儲(chǔ)器系統(tǒng)會(huì)忽略地址中無意義的位有用的位。如表3-6 所示。當(dāng)執(zhí)行字節(jié)或半字讀操作時(shí),32 位存儲(chǔ)器系統(tǒng)可返回完整的32 位字,arm7tdmi-s 處理器從中提取有效的半字或字節(jié)部分。這部分根據(jù)cfgbigend 信號(hào)的狀態(tài)進(jìn)行提取,cfgbigend 信號(hào)決定系統(tǒng)的使用大端還是小端格式。被arm7td

48、mi-s 處理器提取出來的部分見表3-7。將8 位到16 位存儲(chǔ)器系統(tǒng)連接到arm7tdmi-s 處理器時(shí),請(qǐng)確保數(shù)據(jù)出現(xiàn)在arm7tdmi-s 處理器正確的字節(jié)位置上。見表3-8 和3-9寫當(dāng)arm7tdmi-s 處理器執(zhí)行字節(jié)或半字寫操作時(shí),被寫的數(shù)據(jù)在總線上被復(fù)制見圖3-6 。存儲(chǔ)器系統(tǒng)可使用最便捷的數(shù)據(jù)復(fù)制。一個(gè)可寫的存儲(chǔ)器系統(tǒng)必須能夠執(zhí)行對(duì)存儲(chǔ)器中任何單個(gè)字節(jié)的寫操,作這一功能是arm 的c 編譯器和調(diào)試工具鏈所需要的。3.6 使用clken 控制總線周期arm7tdmi-s 處理器總線接口的流水線特性意味著時(shí)鐘周期和總線周期存在著區(qū)別,clken 可用于延長總線周期,使其可以持續(xù)許

49、多個(gè)時(shí)鐘周期,clken 輸入通過增加完整的clk 周期使總線周期時(shí)序得到擴(kuò)展。* 當(dāng)clken 在clk 上升沿時(shí)為高電平,總線周期結(jié)束。* 當(dāng)clken 被采樣為低電平,時(shí)總線周期擴(kuò)展。在流水線中地址分類信號(hào)和存儲(chǔ)器請(qǐng)求信號(hào)超前數(shù)據(jù)傳輸一個(gè)總線周期。在一個(gè)使用clken 的系統(tǒng)中,這個(gè)總線周期可以大于一個(gè)clk 周期。圖3-7 所示為使用clken 擴(kuò)展一個(gè)非連續(xù)周期。在該例中第一個(gè)n 周期之后的n 周期指向一個(gè)無關(guān)的地址,第二次訪問的地址在第一次訪問結(jié)束之前廣播。注:當(dāng)設(shè)計(jì)一個(gè)存儲(chǔ)器控制器時(shí)強(qiáng)烈建議您只在clken 為高電平時(shí),對(duì)trans1:0和地址分類信號(hào)的值進(jìn)行采樣。這樣可以保證存

50、儲(chǔ)器控制器的狀態(tài)不會(huì)在一個(gè)總線周期內(nèi)意外更新。第4 章 協(xié)處理器接口這一章講述arm7tdmi-s 協(xié)處理器接口,包含以下部分* 關(guān)于協(xié)處理器* 協(xié)處理器接口信號(hào)* 協(xié)處理器接口握手* 連接協(xié)處理器* 不使用外部協(xié)處理器* 未定義的指令* 特權(quán)指令4.1 關(guān)于協(xié)處理器arm7tdmi-s 處理器指令集使您可以通過協(xié)處理器來實(shí)現(xiàn)特殊的附加指令。這些協(xié)處理器是與arm7tdmi-s 內(nèi)核相結(jié)合的單獨(dú)的處理單元。一個(gè)典型的協(xié)處理器包括:* 指令流水線* 指令譯碼邏輯* 寄存器分組* 帶獨(dú)立數(shù)據(jù)通路的特殊處理邏輯協(xié)處理器和arm7tdmi-s 處理器連接到同一個(gè)數(shù)據(jù)總線,這意味著協(xié)處理器可以對(duì)指令流中

51、的指令進(jìn)行譯碼并執(zhí)行那些它所支持的指令。每條指令的處理都沿著arm7tdmi-s 處理器流水線和協(xié)處理器流水線同時(shí)進(jìn)行。指令的執(zhí)行由arm7tdmi-s 內(nèi)核與協(xié)處理器共同實(shí)現(xiàn)。arm7tdmi-s 內(nèi)核1. 求出條件代碼的值以確定指令是否必須由協(xié)處理器執(zhí)行,然后使用cpni 通知系統(tǒng)中的所有協(xié)處理器。2. 產(chǎn)生指令所要求的地址(包括下一條指令的預(yù)取)指來填充流水線。3. 如果出現(xiàn)協(xié)處理器不接受的指令則執(zhí)行未定義指令陷阱。協(xié)處理器1. 對(duì)指令進(jìn)行譯碼以確定是否接受。2. 通過cpa 和cpb 指示它是否接受這一指令。3. 從自身的寄存器組當(dāng)中取出任何需要的值。4. 執(zhí)行指令所要求的操作。如果協(xié)

52、處理器無法執(zhí)行某條指令執(zhí)行未定義指令陷阱。您可以選擇在軟件中仿真協(xié)處理器功能或設(shè)計(jì)一個(gè)專用的協(xié)處理器。4.1.1 可用的協(xié)處理器一個(gè)系統(tǒng)中最多可連接16 個(gè)協(xié)處理器每個(gè)協(xié)處理器都通過唯一的id 號(hào)識(shí)別。arm7tdmi-s 處理器包含兩個(gè)內(nèi)部協(xié)處理器。* cp14 通信通道協(xié)處理器* cp15 為cache 和mmu 功能提供的系統(tǒng)控制協(xié)處理器,因此您不能將外部協(xié)處理器的編號(hào)分配為14 和15 ,arm 還保留了其它的協(xié)處理器編號(hào)見表4-1。如果您打算設(shè)計(jì)一個(gè)協(xié)處理器,請(qǐng)將標(biāo)題為coprocessor 的郵件發(fā)送到info 獲取已經(jīng)分配的協(xié)處理器編號(hào)的最新信息。4.2 協(xié)處理器接口信號(hào)此信號(hào)用

53、于連接arm7tdmi-s 內(nèi)核與協(xié)處理器,分為4 類時(shí)鐘和時(shí)鐘控制信號(hào)* clk* clken*nreset流水線跟隨信號(hào)* cpni* cpa* cpb握手信號(hào)* wdata31:0* rdata31:0這些信號(hào)和它們的用途見下面的章節(jié)* 流水線跟隨信號(hào)* 協(xié)處理器接口的握手* 連接協(xié)處理器* 不使用外部協(xié)處理器* 未定義的指令* 特權(quán)指令4.3 流水線跟隨信號(hào)每個(gè)系統(tǒng)中的協(xié)處理器都必須包含一個(gè)流水線跟隨器,用它對(duì)arm7tdmi-s 內(nèi)核流水線中執(zhí)行的指令進(jìn)行跟蹤,協(xié)處理器連接到arm7tdmi-s 處理器的輸入數(shù)據(jù)總線rdata31:0 (指令通過其被取指)和clk 以及clken。在

54、任何時(shí)候兩條流水線都必須保持步調(diào)一致。為協(xié)處理器設(shè)計(jì)一個(gè)流水線跟隨器時(shí),必須遵循以下原則:* 在復(fù)位時(shí)nreset 流水線必須被標(biāo)記為無效,或者填充不會(huì)被協(xié)處理器譯碼成有效指令的指令* 協(xié)處理器狀態(tài)必須只在clken 為高電平時(shí)改變(復(fù)位除外)* 指令必須在clk 的上升沿,并且前一個(gè)總線周期的cpnopc, cpnmreq 和cptbit 全都為低電平,裝入流水線。這些條件指示了該周期時(shí)arm 狀態(tài)操作碼取指,因此必須將新的操作碼采樣到流水線。* 流水線必須在clk 的上升沿并且當(dāng)前總線周期內(nèi)的cpnopc, cpnmreq 和cptbit 全都為低電平時(shí)超前。這些條件指示了當(dāng)前指令將要執(zhí)行

55、完畢,因?yàn)槿魏沃噶畹牡谝粋€(gè)動(dòng)作是執(zhí)行指令預(yù)取指來重新填充流水線。arm7tdmi-s 處理器流水線上的任何指令在它們進(jìn)入執(zhí)行時(shí)都不會(huì)在cpni 上輸出信號(hào)。因此它們根據(jù)所要求的預(yù)取指自動(dòng)填充流水線。在thumb 指令集當(dāng)中沒有協(xié)處理器指令,因此協(xié)處理器必須監(jiān)視cptbit 信號(hào)的狀態(tài)以確保它們不會(huì)將thumb 指令對(duì)像arm 指令一樣譯碼。4.4 協(xié)處理器接口的握手arm7tdmi-s 內(nèi)核與系統(tǒng)中的任何協(xié)處理器通過信號(hào)執(zhí)行握手。這些信號(hào)在后面的章節(jié)會(huì)詳細(xì)講述。4.4.1 協(xié)處理器協(xié)處理器對(duì)其流水線譯碼階段中的當(dāng)前指令進(jìn)行譯碼,并檢測指令是否為協(xié)處理器指令。協(xié)處理器指令具有一個(gè)與協(xié)處理器id 相匹配的編號(hào)。如果譯碼階段當(dāng)前的指令時(shí)一個(gè)協(xié)處理器指令1. 協(xié)處理器試圖執(zhí)行該指令。2. 協(xié)處理器使用cpa 和cpb 向arm7tdmi-s 內(nèi)核發(fā)出信號(hào)。4.4.2 arm7tdmi-s 內(nèi)核協(xié)處理器指令沿著arm7tdmi-s 處理器流水線運(yùn)行,與協(xié)處理器流水線保持步調(diào)一致。協(xié)處理器指令在下面的條件為真時(shí)執(zhí)行:1. 協(xié)處理器指令到達(dá)流水線的執(zhí)行階段(如果被一個(gè)分支搶先則有可能不是)。2. 指令已經(jīng)通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論