版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Cortex-M3 學習小結(jié) 2012.112內(nèi)容 Cortex-M3 匯編指令集 AMBA總線AHB & APB 流水線技術(shù) 異常和中斷 與ARM7的比較3內(nèi)容 Cortex-M3 匯編指令集 AMBA總線AHB & APB 流水線技術(shù) 異常和中斷 與ARM7的比較ARM 各種架構(gòu)版本45CM3芯片6CM3內(nèi)核CM3操作模式和特權(quán)極別 當處理器處在線程狀態(tài)下時,既可以使用特權(quán)級也可以使用用戶級;另一方面,handler模式總是特權(quán)級的。在復位后,處理器進入線程模式特權(quán)級。7CM3 寄存器組8 如我們所見,CM3擁有通用寄存器R0-R15以及一些特殊功能寄存器。R0-R12是最
2、“通用目的”的,但是絕大多數(shù)的16位指令只能使用R0-R7(低組寄存器),而32位的Thumb-2指令則可以訪問所有通用寄存器。 特殊功能寄存器有預定義的功能,而且必須通過專用的指令來訪問。堆棧指針R13 主堆棧指針(MSP),或?qū)懽鱏P_main。這是缺省的堆棧指針,它由OS內(nèi)核、異常服務(wù)例程以及所有需要特權(quán)訪問的應(yīng)用程序代碼來使用。 進程堆棧指針(PSP),或?qū)慡P_process。用于常規(guī)的應(yīng)用程序代碼(不處于異常服用例程中時)。9堆棧指針R13(續(xù))10連接寄存器R14l R14是連接寄存器(LR)。在一個匯編程序中,你可以把它寫作LR和R14。LR用于在調(diào)用子程序時存儲返回地址。例如
3、,當你在使用BL(分支并連接,Branch and Link)指令時,就自動填充LR的值。main ;主程序BL function1 ; 使用“分支并連接”指令呼function1;PC=function1,并且LR=main的下一條指令地址 function1 ; function1的代碼 BX LR ; 函數(shù)返回(如果function1要使用LR,必須在使用前 ; PUSH, 否則返回時程序就可能跑飛了)11程序計數(shù)器R15l R15是程序計數(shù)器,在匯編代碼中一般我們都都叫它的外號“PC”。因為 CM3內(nèi)部使用了指令流水線,讀PC時返回的值是當前指令的地址+4。l 如:0 x1000: M
4、OV R0, PC ; R0 = 0 x100412特殊功能寄存器組Cortex-M3中的特殊功能寄存器包括: 程序狀態(tài)寄存器組(PSRs或曰xPSR) 中斷屏蔽寄存器組(PRIMASK, FAULTMASK,以及BASEPRI) 控制寄存器(CONTROL) 它們只能被專用的MSR/MRS指令訪問,而且它們也沒有與之相關(guān)聯(lián)的訪問地址。MRS , ;讀特殊功能寄存器的值到通用寄存器 MSR , ;寫通用寄存器的值到特殊功能寄存器13程序狀態(tài)寄存器組 (PSRs或xPSR)l 程序狀態(tài)寄存器在其內(nèi)部又被分為三個子狀態(tài)寄存器:u 應(yīng)用程序PSR(APSR)u 中斷號PSR(IPSR)u 執(zhí)行PSR
5、(EPSR)14中斷屏蔽寄存器組15控制寄存器(CONTROL)16CM3存儲器系統(tǒng)CM3的存儲器系統(tǒng)與從傳統(tǒng)ARM架構(gòu)的相比,已經(jīng)有過脫胎換骨般的改革了:l 第一, 它的存儲器映射是預定義的,并且還規(guī)定好了哪個位置使用哪條總線。l 第二, CM3的存儲器系統(tǒng)支持所謂的“位帶”(bit-band)操作。通過它,實現(xiàn)了對單一比特的原子操作。位帶操作僅適用于一些特殊的存儲器區(qū)域中,見本章論述。l 第三, CM3的存儲器系統(tǒng)支持非對齊訪問和互斥訪問。這兩個特性是直到了v7M時才出來的。l 最后,CM3的存儲器系統(tǒng)支持小端配置和大端配置。17CM3存儲器映射18存儲器的缺省訪問許可19位帶操作l 支持
6、了位帶操作后,可以使用普通的加載/存儲指令來對單一的比特進行讀寫。在CM3中,有兩個區(qū)中實現(xiàn)了位帶。其中一個是SRAM區(qū)的最低1MB范圍,第二個則是片內(nèi)外設(shè)區(qū)的最低1MB范圍。這兩個位帶中的地址除了可以像普通的RAM一樣使用外,它們還都有自己的“位帶別名區(qū)”位帶別名區(qū)把每個比特膨脹成一個32位的字。當你通過位帶別名區(qū)訪問這些字時,就可以達到訪問原始比特的目的。20位帶操作21非對齊數(shù)據(jù)傳送l CM3支持在單一的訪問中使用非(地址)對齊的傳送,數(shù)據(jù)存儲器的訪問無需對齊。在以前,ARM處理器只允許對齊的數(shù)據(jù)傳送。這種對齊是說:以字為單位的傳送,其地址的最低兩位必須是0;以半字為單位的傳送,其地址的
7、LSB必須是0;以字節(jié)為單位的傳送則無所謂對不對齊。l 在CM3中,非對齊的數(shù)據(jù)傳送只發(fā)生在常規(guī)的數(shù)據(jù)傳送指令中,如LDR/LDRH/LDRSH。其它指令則不支持,包括:u 多個數(shù)據(jù)的加載/存儲(LDM/STM)u 堆棧操作PUSH/POPu 互斥訪問(LDREX/STREX)。如果非對齊會導致一個用法faultu 位帶操作。因為只有LSB有效,非對齊的訪問會導致不可預料的結(jié)果。22互斥訪問l 在新版的ARM處理器中,讀/寫訪問往往使用不同的總線,導致SWP無法再保證操作的原子性,因為只有在同一條總線上的讀/寫能實現(xiàn)一個互鎖的傳送。因此,互鎖傳送必須用另外的機制實現(xiàn),這就引入了“互斥訪問”?;?/p>
8、斥訪問的理念同SWP非常相似,不同點在于:在互斥訪問操作下,允許互斥體所在的地址被其它總線master訪問,也允許被其它運行在本機上的任務(wù)訪問,但是CM3能夠“駁回”有可能導致競態(tài)條件的互斥寫操作。23端模式l CM3支持小端模式和大端模式。但是,單片機其它部分的設(shè)計,包括總線的連接,內(nèi)存控制器以及外設(shè)的性質(zhì)等,也共同決定可以支持的內(nèi)存類型。所以在設(shè)計軟件之前,一定要先在單片機的數(shù)據(jù)手冊上查清楚可以使用的端。l 在CM3中,是在復位時確定使用哪種端模式的,且運行時不得更改。指令預取永遠使用小端模式,在配置控制存儲空間的訪問也永遠使用小端模式(包括NVIC, FPB等)。另外,外部私有總線地址區(qū)
9、0 xE0000000至0 xE00FFFFF也永遠使用小端模式。24CM3電源管理l 兩種睡眠模式依次為:u 睡眠:由CM3處理器的SLEEPING信號指示 u 深度睡眠:由CM3處理器的SLEEPDEEP信號指示為了判定當前使用的是哪一種睡眠模式,以及其它睡眠時的上下文,需要檢視在NVIC的系統(tǒng)控制寄存器25WFI/WFE進入睡眠26WFI/WFE喚醒l WFI/WFE除了進入睡眠的序列不同外,它們的喚醒行為也有所不同。l 當從WFI喚醒時,要根據(jù)異常系統(tǒng)的游戲規(guī)則來決定是否喚醒。只有當該中斷的優(yōu)先級比當前優(yōu)先級要高(如果是在服務(wù)例程中使用WFI),并且比BASEPRI掩蔽的高時,才喚醒處
10、理器并執(zhí)行ISR。但如果PRIMASK置位,則依然喚醒處理器,然而ISR卻不執(zhí)行了。l WFE則有點區(qū)別,不管優(yōu)先級和掩蔽情況如何,只要SEVONPEND置位,它就會不錯過任何一個事件,在發(fā)生事件時一定把處理器喚醒。至于是否執(zhí)行ISR,則與WFI的規(guī)則相同。27SleepOnExitl CM3還有一個“自動睡眠”的機制:SleepOnExit它可以被編程為從中斷服務(wù)例程返回后立即睡眠。這樣一來,處理器的所有工作就只是響應(yīng)中斷了,其它時間都在睡眠。在真實的應(yīng)用程序里,通常只有在程序很簡單的電池供電設(shè)備中,才會用此功能。如欲使用此特性,需要把系統(tǒng)控制寄存器中的SLEEPONEXIT位置位。28MP
11、Ul 在Cortex-M3處理器中可以選配一個存儲器保護單元(MPU),它可以實施對存儲器(主要是內(nèi)存和外設(shè)寄存器)的保護,從而使軟件更加健壯和可靠。如果打算啟用MPU,則在使用前,必須根據(jù)需要對其編程。如果沒有啟用MPU,則等同于系統(tǒng)中沒有配MPU。MPU有如下的能力可以提高系統(tǒng)的可靠性:u 阻止用戶應(yīng)用程序破壞操作系統(tǒng)使用的數(shù)據(jù)u 阻止一個任務(wù)訪問其它任務(wù)的數(shù)據(jù)區(qū),從而把任務(wù)隔開。u 可以把關(guān)鍵數(shù)據(jù)區(qū)設(shè)置為只讀,從根本上消除了被破壞的可能。u 檢測意外的存儲訪問,如,堆棧溢出,數(shù)組越界。u 此外,還可以通過MPU設(shè)置存儲器regions的其它訪問屬性,比如,是否緩區(qū),是否緩沖等。29MPU
12、(續(xù))l MPU在執(zhí)行其功能時,是以所謂的“region”為單位的。一個region其實就是一段連續(xù)的地址,只是它們的位置和范圍都要滿足一些限制(對齊方式,最小容量等)。CM3的MPU共支持8個regions。怎么,嫌少?是少了點,不過,還允許把每個region進一步劃分成更小的“子region”。此外,還允許啟用一個“背景region”(即沒有MPU時的全部地址空間),不過它是只能由特權(quán)級享用。在啟用MPU后,就不得再訪問定義之外的地址區(qū)間,也不得訪問未經(jīng)授權(quán)的region。否則,將以“訪問違例”處理,觸發(fā)MemManage fault。30復位信號3132內(nèi)容 Cortex-M3 匯編指令
13、集 AMBA總線AHB & APB 流水線技術(shù) 異常和中斷 與ARM7的比較指令集概述l 在過去,做ARM開發(fā)必須處理好兩個狀態(tài)。這兩個狀態(tài)是井水不犯河水的,它們是:32位的ARM狀態(tài)和16位的Thumb狀態(tài)。當處理器在ARM狀態(tài)下時,所有的指令均是32位的(哪怕只是個”NOP”指令),此時性能相當高。而在Thumb狀態(tài)下,所有的指令均是16位的,代碼密度提高了一倍。不過,thumb狀態(tài)下的指令功能只是ARM下的一個子集,結(jié)果可能需要更多條的指令去完成相同的工作,導致處理性能下降。l 伴隨著Thumb-2指令集的橫空出世,終于可以在單一的操作模式下搞定所有處理了,再也沒有來回切換的事來
14、煩你了。事實上,Cortex-M3內(nèi)核干脆都不支持ARM指令,中斷也在Thumb態(tài)下處理(以前的ARM總是在ARM狀態(tài)下處理所有的中斷和異常)。這可不是小便宜,它使CM3在好幾個方面都比傳統(tǒng)的ARM處理器更先進:u 消滅了狀態(tài)切換的額外開銷,節(jié)省了both 執(zhí)行時間和指令空間。u 不再需要把源代碼文件分成按ARM編譯的和Thumb編譯的,軟件開發(fā)管理大大減負。u 無需再反復地求證和測試:究竟該在何時何地切換到何種狀態(tài)下,我的程序才最有效率。開發(fā)軟件容易多了。33CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l MRS和MSR雖然名字與以前的ARM相同,但功能變了。這兩條指令是訪問特殊功能寄存
15、器的“專用通道”當然必須在特權(quán)級下使用,除了APSR可以在用戶級下訪問外。指令語法如下:MRS , ;加載特殊功能寄存器的值到RnMSR , ;存儲Rn的值到特殊功能寄存器SReg可以是下表中的一個:34CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l IF-THENu IF-THEN(IT)指令圍起一個塊,里面最多有4條指令,它里面的指令可以條件執(zhí)行。IT指令已經(jīng)帶了一個“T”,因此還可以最多再帶3個“T”或者“E”。并且對 T和E的順序沒有要求。其中T對應(yīng)條件成立時執(zhí)行的語句,E對應(yīng)條件不成立時執(zhí)行的語句。在If-Then塊中的指令必須加上條件后綴,且T對應(yīng)的指令必須使用和IT指令中相同
16、的條件,E對應(yīng)的指令必須使用和IT指令中相反的條件。u IT 指令使能了指令的條件執(zhí)行方式,并且使CM3不再預取不滿足條件的指令。又因為它在使用時取代了條件轉(zhuǎn)移指令,還避免了在執(zhí)行流轉(zhuǎn)移時,對流水線的清洗和重新指令預取的開銷,所以能優(yōu)化C結(jié)構(gòu)中的微小if 塊和很多“?:”運算符 35CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l SDIV和UDIV突破性的32位硬件除法指令,如下所示:SDIV.W Rd, Rn, RmUDIV.W Rd, Rn, Rm運算結(jié)果是 Rd= Rn/Rm,余數(shù)被丟棄。例如:LDR r0, =300MOV R1, #7UDIV.W R2, R0, R1則R2= 3
17、00/7 =44 為了捕捉被零除的非法操作,你可以在NVIC的配置控制寄存器中置位DIVBYZERO位。這樣,如果出現(xiàn)了被零除的情況,將會引發(fā)一個用法fault 異常。如果沒有任何措施,Rd將在除數(shù)為零時被清零。36CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l REV, REVH,REV16以及REVSHREV反轉(zhuǎn)32位整數(shù)中的字節(jié)序,REVH則以半字為單位反轉(zhuǎn),且只反轉(zhuǎn)低半字。語法格式為:REV Rd, RmREVH Rd, RmREV16 Rd, RmREVSH Rd, Rm例如,記R0=0 x12345678,在執(zhí)行下列兩條指定后:REV R1, R0REVH R2, R0REV1
18、6 R3, R0則R1=0 x78563412,R2=0 x12347856,R3=0 x34127856。這些指令專門服務(wù)于小端模式和大端模式的轉(zhuǎn)換,最常用于網(wǎng)絡(luò)應(yīng)用程序中(網(wǎng)絡(luò)字節(jié)序是大端,主機字節(jié)序常是小端)。REVSH在REVH的基礎(chǔ)上,還把轉(zhuǎn)換后的半字做帶符號擴展。例如,記R0=0 x33448899,則 REVSH R1, R0執(zhí)行后,R1=0 xFFFF998837CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l RBITRBIT比前面的REV之流更精細,它是按位反轉(zhuǎn)的,相當于把32位整數(shù)的二進制表示法水平旋轉(zhuǎn)180度。其格式為:RBIT.W Rd, Rn這個指令在處理串行比特
19、流時大有用場,而且?guī)缀醯搅藳]它不行的地步例如, 記 R1=0 xB4E10C23(二進制數(shù)值為 1011,0100,1110,0001,0000,1100,0010,0011),RBIT.W R0, R1 執(zhí)行后,則R0=0 xC430872D(二進制數(shù)值為1100,0100,0011,0000,1000,0111,0010,1101)這條指令單獨使用時看不出什么作用,但是與其它指令組合使用時往往有特效,高級技巧常用到它。38CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l SXTB, SXTH, UXTB, UXTH這4個指令是為了體貼C語言的強制數(shù)據(jù)類型轉(zhuǎn)換而設(shè)的,把數(shù)據(jù)寬度轉(zhuǎn)換成處理器
20、喜歡的32位長度(處理器字長是多少,就喜歡多長的整數(shù),其操作效率和存儲效率都最高)。它們的語法如下:SXTB Rd, RnSXTH Rd, RnSXTB Rd, RnUXTH Rd, Rn對于SXTB/SXTH,數(shù)據(jù)帶符號位擴展成32位整數(shù)。對于UXTB/UXTH,高位清零。例如,記R0=0 x55aa8765,則SXTB R1, R0 ; R1=0 xffffff65SXTH R1, R0 ; R1=0 xffff8765UXTB R1, R0 ; R1=0 x00000065UXTH R1, R0 ; R1=0 x0000876539CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l BF
21、C/BFIBFC(位段清零)指令把32位整數(shù)中任意一段連續(xù)的2進制位s清0,語法格式為:BFC.W Rd, #lsb, #width其中,lsb 為位段的末尾,width則指定在lsb 和它的左邊(更高有效位),共有多少個位參與操作。例如,LDR R0, =0 x1234FFFFBFC R0, #4, #10執(zhí)行完后,R0= 0 x1234C00FBFI(位段插入指令)把某個寄存器按LSB對齊的數(shù)值,拷貝到另一個寄存器某個位段中BFI.W Rd, Rn, #lsb, #width例如,LDR R0, =0 x12345678LDR R1, =0 xAABBCCDDBFI.W R1, R0, #
22、8, #16則執(zhí)行后,R1= 0 xAA5678DD 40CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l UBFX/SBFXUBFX/SBFX都是位段提取指令,語法格式為:UBFX.W Rd, Rn, #lsb, #widthSBFX.W Rd, Rn, #lsb, #widthUBFX從Rn中取出任一個位段,執(zhí)行零擴展后放到Rd中。例如:LDR R0, =0 x5678ABCDUBFX.W R1, R0, #12,#16則R0=0 x0000678A類似地,SBFX也抽取任意的位段,但是以帶符號的方式進行擴展。例如:LDR R0, =0 x5678ABCDSBFX.W R1, R0, #
23、8,#4則R0=0 xFFFFFFFB41CM3中一些前衛(wèi)的指令(v6v7 才開始支持的)l LDRD/STRD CM3在一定程度上支持64位整數(shù)。其中LDRD/STRD就是為64位整數(shù)的數(shù)據(jù)傳送而設(shè)的,語法格式為:LDRD.W RL, RH, Rn, #+/-offset ! ;可選預索引的64位整數(shù)加載LDRD.W RL, RH, Rn,#+/-offset ;后索引的64位整數(shù)加載STRD.W RL, RH, Rn, #+/-offset ! ;可選預索引的64位整數(shù)存儲STRD.W RL, RH, Rn,#+/-offset ;后索引的64位整數(shù)存儲例如,記 (0 x1000)= 0
24、x1234_5678_ABCD_EF00:則LDR R2, =0 x1000 ;LDRD.W R0, R1, R2執(zhí)行后, R0= 0 xABCD_EF00, R1=0 x1234_5678同理,我們也可以使用STRD來存儲64位整數(shù)。在上面的例子執(zhí)行完畢后,若執(zhí)行如下代碼:STRD.W R1, R0, R2執(zhí)行后, (0 x1000)=0 xABCD_EF00_1234_5678,從而實現(xiàn)了雙字的字序反轉(zhuǎn)操作。42CM3中詳細指令集指令集的詳細信息由ARMv7-M Architecture Application Level Reference Manual A5.7 Alphabetica
25、l list of Thumb instructions4344內(nèi)容 Cortex-M3 匯編指令集 AMBA總線AHB & APB 流水線技術(shù) 異常和中斷 與ARM7的比較 Advanced Microcontroller Bus Architecture 片上總線的標準 定義了三種總線 AHB (Advanced High-performance Bus) ASB (Advanced System Bus) APB (Advanced Peripheral Bus)45AMBA介紹l 處理器和其它主設(shè)備/從設(shè)備都是可以替換46一個典型的AMBA系統(tǒng)AHBl高速總線,高性能l流水線操
26、作l可支持多個總線主設(shè)備l上升沿觸發(fā)操作l支持Burst傳輸l非三態(tài)l寬數(shù)據(jù)位:8、16、32、64、128、512、 1024bits47AHB組成部分l AHB 主設(shè)備(master)u 初始化一次讀/寫操作u 某一時刻只允許一個主設(shè)備使用總線u uP、DMA、DSP、LCDC l AHB從設(shè)備(slave)u 響應(yīng)一次讀/寫操作u 通過地址映射來選擇使用哪一個從設(shè)備u 外部存儲器控制器、APB橋、UART、 l AHB仲裁器(arbiter)u 允許某一個主設(shè)備控制總線u 在AMBA協(xié)議中沒有定義仲裁算法l AHB譯碼器(decoder)u 通過地址譯碼來決定選擇哪一個從設(shè)備48AHB傳
27、輸49發(fā)起一個請求給仲裁器驅(qū)動地址和控制信號允許某個主設(shè)備控制總線僅選中的從設(shè)備響應(yīng)地址/控制信號拉高HREADY信號,總線傳輸完成AMBA AHB-Lite5051AHB主 從設(shè)備接口5152AHB Decoder52AHB信號53基本AHB信號l HCLK 總線時鐘l HRESETn 總線復位,低電平有效l HADDR31:0 32位系統(tǒng)地址總線l HWDATA31:0 寫數(shù)據(jù)總線,從主設(shè)備寫到從設(shè)備l HRDATA31:0 讀數(shù)據(jù)總線,從從設(shè)備讀到主設(shè)備54基本AHB信號(續(xù))lHTRANS 指出當前傳輸?shù)念愋?NONSEQ、SEQ、IDLE、BUSYl HRESP 從設(shè)備發(fā)給主設(shè)備的總
28、線傳輸狀態(tài) OKAY、ERRORl HBURST 指出傳輸?shù)腷urst類型l HREADY 高:從設(shè)備指出傳輸結(jié)束 低電平:從設(shè)備需延長傳輸周期5556其它AHB控制信號l HWRITE 高電平:寫 低電平:讀l HSIZE2:0 000:8bits 100:128bits 001:16bits 101:256bits 010:32bits 110:513bits 011:64bits 111:1024bits 最大值受總線的配置所限制 通常使用32bits(010) l HPROT3:0 HPROT0: OPCODE/DATA HPROT1: USER/PRIVILGED HPROT2: B
29、ufferable/Non-Bufferable HPROT3: Cacheable/Non-Cacheable5657數(shù)據(jù)總線 不是三態(tài)總線,讀數(shù)據(jù)總線和寫數(shù)據(jù)總線分開 大小端模式 在AMBA定義中沒有定義 主設(shè)備和從設(shè)備應(yīng)該采用同樣的大小端模式 不支持動態(tài)大小端轉(zhuǎn)換 對于IP設(shè)計, 只有應(yīng)用面比較廣泛的應(yīng)用程序才支持兩種端模式。5758小端模式數(shù)據(jù)的有效字節(jié)5859大端模式數(shù)據(jù)的有效字節(jié)59時鐘和復位要求l時鐘u每個AHB-Lite部件使用一個單一的時鐘信號HCLK。所有的輸入信號都在該信號的上升沿采樣。所有的輸出信號必須在上升沿后改變。l復位u復位信號HRESETn是所有總線元素的復位信
30、號,低有效,可以進行異步置位,但推薦在HCLK信號的上升沿后同步置位。復位中,所有的Master必須確保地址和控制信號處于正確的電平,并且HTRANS1:0置為IDLE;所有的Slave必須保證HREADYOUT為高。60基本AHB傳輸l兩個階段 地址周期,只有一個有效周期 數(shù)據(jù)周期,由HBURST信號決定需要幾個有效周期l流水線傳送 先是有效地址周期,然后是有效數(shù)據(jù)周期61基本AHB傳輸(續(xù))l一次無需等待狀態(tài)的簡單傳輸62Master release address and controlSlave sample the addressMaster sample the dataIf sl
31、ave hasnt ready to receive data, how to deal with it?63Not readyNot readyReadyNote: according to spec, slave shouldnt insert more than 16 wait cycles! 需要兩個等待周期的簡單傳輸63基本AHB傳輸(續(xù))One transfer need at least two cycles, how to promote its efficiency?64PipelineA AddressA DataB AddressB DataC AddressC Data
32、64基本AHB傳輸(續(xù))Slave decodes every transfer, one transfer on wait, how to decrease the wait cycles?65Burst TransferAAA+4A+4A+8A+8A+12A+12HBURST shows the burst types:Single TransferIncrementing transfer with unspecified length4-beat 8-beat16-beatSlave has know that master need 4 data, A/A+4/A+8/A+12Dur
33、ing burst transfer, if slave is not ready, then hready=0; but if master is not ready, how to do?65基本AHB傳輸(續(xù))66 HTRANS1:0:傳輸類型 四種類型:IDLE、BUSY、NONSEQ、SEQ 00:IDLE 主設(shè)備占用總線,但沒進行傳輸 兩次burst傳輸中間主設(shè)備可發(fā)IDLE 01:BUSY 主設(shè)備占用總線,但是在burst傳輸過程中還沒有準備好進行下一次傳輸 一次burst傳輸中間主設(shè)備可發(fā)BUSY傳輸類型6667傳輸類型(續(xù)) 10:NOSEQ 表明一次單個數(shù)據(jù)的傳輸 或者一次
34、burst傳輸?shù)牡谝粋€數(shù)據(jù) 地址和控制信號與上一次傳輸無關(guān) 11:SEQ 表明burst傳輸接下來的數(shù)據(jù) 地址和上一次傳輸?shù)牡刂肥窍嚓P(guān)的6768The first transfer Master is busyThe subsequent transferThe subsequent transferSlave is not readyThe subsequent transfer傳輸類型舉例6869BURST傳輸l AHB Burst 操作 4beat、8beat、16beat、單個字節(jié)傳輸、未定義長度的傳輸 支持incrementing和wrapping兩種burst傳輸l Increme
35、nting burst 地址是上一次的傳輸?shù)刂芳?個傳輸單位l Wrapping burst 例:4beat的wrapping burst 字傳輸(4byte): 0 x34 - 0 x38 - 0 x3c - 0 x30 應(yīng)用場合:Cache填充注意:Master不允許開始一個跨越1KB地址邊界的遞增Burst。6970INCR4 Burst707171WRAP4 Burst72INCR8 BurstHCLKSEQNSEQSEQSEQSEQSEQINCR80 x600 x680 x640 x6c0 x740 x70HTRANSHBURSTHADDRHRDATAd1d0d2d4d3d50 x7
36、80 x7cSEQSEQd6d77273WRAP8 BurstHCLKSEQNSEQSEQSEQSEQSEQWRAP80 x700 x780 x740 x7c0 x640 x60HTRANSHBURSTHADDRHRDATAd5d4d6d0d7d10 x680 x6cSEQSEQd2d3start of line7374未定義長度的Burst傳輸7475注意! Burst傳輸不能穿越1K邊界 一個從設(shè)備最小的地址間隙是1KB NONSEQ - SEQ - 1KB Boundary - NONSEQ - SEQ 主設(shè)備不能試圖開始一個可能穿越1K邊界的INCR傳輸7576INCR Burst o
37、ver 1k boundaryHCLKSEQNSEQSEQNSEQSEQSEQINCR0 x3F00 x3F80 x3F40 x3FC0 x4040 x400HTRANSHBURSTHADDRHRDATAd1d0d2d4d3d50 x408 0 x40CSEQSEQd6d7start of 1k page7677從設(shè)備響應(yīng)信號77例:ERROR響應(yīng)的傳輸78APB7980APB信號8081APB信號(續(xù))l PADDR31:0 地址總線,由設(shè)備總線的bridge單元驅(qū)動l PSELx 從譯碼器來的信號,到每一個總線從設(shè)備xl PENABLE 用于在設(shè)備總線上把所有訪問按時間階段進行l(wèi) PWRI
38、TE 高電平:寫 低電平:讀l PRDATA和PWDATA 最多32位寬8182Address Decoding StagesSlave 3(APB)Slave 1(EBI)Slave 2(SRAM)0 xCFFF_FFFF0 xC000_00000 x5000_FFFF0 x5000_00000 x3FFF_FFFF0 x0000_0000Peripheral 3(UART)Peripheral 1(Int Cont)Peripheral 2(Timers)0 xC3FF_FFFF0 xC300_00000 xC2FF_FFFF0 xC100_00000 xC000_FFFF0 xC000_
39、0000APBmemory mapTimer 2Timer 10 xC2FF_FFFF0 xC200_00000 xC1FF_FFFF0 xC100_0000AHB DecoderHSELapbPSELtimAPB BridgeTimersAHBmemory mapTimersmemory map8283APB InterconnectAHB2APBBridgeAPBMasterPADDRHCLKPSEL#1PWRITEPSEL#2PSEL#3PCLKHADDRHWRITEPeripheral #1Peripheral #3Peripheral #2PENABLEPWDATAPRDATAHRD
40、ATAHSELHWDATAAHBAPB8384寫傳輸8485讀傳輸8586BridgeHow to translate ahb pipelined timing to 2-cycle apb timing?8687Bridge FSMAHB Transfer8788APB Slave8889APB to AHBHCLK/PCLKDataDataAddrAddrHADDRHWRITEHRDATAHREADYPADDRPWRITEPSELPRDATA8990APB到AHB的接口讀9091APB到AHB的接口寫9192Back to Back Transfers9293內(nèi)容 Cortex-M3 匯編
41、指令集 AMBA總線AHB & APB 流水線技術(shù) 異常和中斷 與ARM7的比較流水線(Pipeline)簡介l 流水線縮短了在一個時鐘周期內(nèi)給的那個信號必須通過的通路長度,從而可以提高時鐘頻率。例如:一個2級組合邏輯假定每級延遲相同為Tpd,無流水線的總 延遲就是2Tpd,可以在一個時鐘周期完成,但是時鐘周期受限制在2Tpd,如果使用流水線,每一級加入寄存器(延遲為Tco)后,單級的延遲為Tpd+ Tco,每級消耗一個時鐘周期,流水線需要2個時鐘周期來獲得第一個計算結(jié)果,稱為首次延遲,它要2*(Tpd+Tco),但是執(zhí)行重復操作時,只要一個 時鐘周期來獲得最后的計算結(jié)果,稱為吞吐延遲
42、(Tpd+Tco)可見只要Tco小于Tpd,流水線可以提高速度。94流水線在CPU設(shè)計中的應(yīng)用l 對于一條具體的指令執(zhí)行過程,通??梢苑譃槲鍌€部分:取指令,指令譯碼,取操作數(shù),運算(ALU),寫結(jié)果。其中前三步一般由指令控制器完成, 后兩步則由運算器完成。按照傳統(tǒng)的方式,所有指令順序執(zhí)行,那么先是指令控制器工作,完成第一條指令的前三步,然后運算器工作,完成后兩步,在指令控制器 工作,完成第二條指令的前三步,在是運算器,完成第二條指令的后兩部很明顯,當指令控制器工作是運算器基本上在休息,而當運算器在工作時指令控制器卻 在休息,造成了相當大的資源浪費。解決方法很容易想到,當指令控制器完成了第一條指
43、令的前三步后,直接開始第二條指令的操作,運算單元也是。這樣就形成了 流水線系統(tǒng),這是一條2級流水線。如果是一個超標量系統(tǒng),假設(shè)有三個指令控制單元和兩個運算單元,那么就可以在完成了第一條指令的取址工作后直接開始第二條指令的取址,這時第一條指令在進行譯碼,然后第三條指令取址,第二條指令譯碼,第一條指令取操作數(shù)這樣就是一個5級流水線。95流水線在CPU設(shè)計中的問題l 流水線系統(tǒng)最大限度地利用了CPU資源,使每個部件在每個時鐘周期都工作,大大提高了效率。但是,流水線有兩個非常大的問題:相關(guān)和轉(zhuǎn)移。l 越是長的流水線,相關(guān)和轉(zhuǎn)移兩大問題也越嚴重,所以,流水線并不是越長越好,超標量也不是越多越好,找到一個
44、速度與效率的平衡點才是最重要的。96相關(guān)l 在一個流水線系統(tǒng)中,如果第二條指令需要用到第一條指令的結(jié)果,這種情況叫做相關(guān)。以上面哪個5級流水線為例,當?shù)诙l指令需要取操作數(shù)時,第一條指令 的運算還沒有完成,如果這時第二條指令就去取操作數(shù),就會得到錯誤的結(jié)果。所以,這時整條流水線不得不停頓下來,等待第一條指令的完成。這是很討厭的問 題,特別是對于比較長的流水線,比如20級,這種停頓通常要損失十幾個時鐘周期。目前解決這個問題的方法是亂序執(zhí)行。亂序執(zhí)行的原理是在兩條相關(guān)指令中插 入不相關(guān)的指令,使整條流水線順暢。比如上面的例子中,開始執(zhí)行第一條指令后直接開始執(zhí)行第三條指令(假設(shè)第三條指令不相關(guān)),然
45、后才開始執(zhí)行第二條指 令,這樣當?shù)诙l指令需要取操作數(shù)時第一條指令剛好完成,而且第三條指令也快要完成了,整條流水線不會停頓。當然,流水線的阻塞現(xiàn)象還是不能完全避免的, 尤其是當相關(guān)指令非常多的時候。97轉(zhuǎn)移l另一個大問題是條件轉(zhuǎn)移。在上面的例子中,如果第一條指令是一個條件轉(zhuǎn)移指令,那么系統(tǒng)就會不清楚下面應(yīng)該執(zhí)行那一條指令?這時就必須等第一條指令的判斷結(jié)果出來才能執(zhí)行第二條指令。條件轉(zhuǎn)移所造成的流水線停頓甚至比相關(guān)還要嚴重的多。所以,現(xiàn)在采用分支預測技術(shù)來處理轉(zhuǎn)移問題。雖然我們的程序中充滿著分支,而且哪一條分支都是有可能的,但大多數(shù)情況下總是選擇某一分支。比如一個循環(huán)的末尾是一個分支,除了最后一
46、次我們需要跳出循環(huán)外,其他的時候我們總是選擇繼續(xù)循環(huán)這條分支。根據(jù)這些原理,分支預測技術(shù)可以在沒有得到結(jié)果之前預測下一條指令是什么,并執(zhí)行它。 現(xiàn)在的分支預測技術(shù)能夠達到90%以上的正確率,但是,一旦預測錯誤,CPU仍然不得不清理整條流水線并回到分支點。這將損失大量的時鐘周期。所以,進一步提高分支預測的準確率也是正在研究的一個課題。98ARM7三級流水線技術(shù)l ARM7系列處理器中每條指令分取指、譯碼、執(zhí)行三個階段,分別在不同的功能部件上依次獨立完成。取指部件完成從存儲器裝載一條指令,通過譯碼部件產(chǎn)生下一周期數(shù)據(jù)路徑需要的控制信號,完成寄存器的解碼,再送到執(zhí)行單元完成寄存器的讀取、ALU運算及
47、運算結(jié)果的寫回,需要訪問存儲器的指令完成存儲器的訪問。流水線上雖然一條指令仍需3個時鐘周期來完成,但通過多個部件并行,使得處理器的吞吐率約為每個周期一條指令,提高了流式指令的處理速度,從而可達到0.9 MIPSMHz的指令執(zhí)行速度。99三級流水線運行情況分析100三級流水線運行情況分析101三級流水線運行情況分析102三級流水線運行情況分析103ARM9五級流水線技術(shù)l ARM9系列處理器的流水線分為取指、譯碼、執(zhí)行、訪存、回寫。取指部件完成從指令存儲器取指;譯碼部件讀取寄存器操作數(shù),與三級流水線中不占有數(shù)據(jù)路徑區(qū)別很大;執(zhí)行部件產(chǎn)生ALU運算結(jié)果或產(chǎn)生存儲器地址(對于存儲器訪問指令來講);訪
48、存部件訪問數(shù)據(jù)存儲器;回寫部件完成執(zhí)行結(jié)果寫回寄存器。把三級流水線中的執(zhí)行單元進一步細化,減少了在每個時鐘周期內(nèi)必須完成的工作量,進而允許使用較高的時鐘頻率,且具有分開的指令和數(shù)據(jù)存儲器,減少了沖突的發(fā)生,每條指令的平均周期數(shù)明顯減少。104五級流水線運行情況分析105五級流水線運行情況分析106五級流水線優(yōu)化l要實現(xiàn)把內(nèi)存地址0 x1000和0 x2000處的數(shù)據(jù)分別拷貝到0 x8000和0 x9000處。0 x1000處的內(nèi)容:1,2,3,4,5,6,7,8,9,100 x2000處的內(nèi)容:H,e,l,l,o,W,o,r,l,d107全部拷貝過程由兩個結(jié)構(gòu)相同的循環(huán)各自獨立完成,分別實現(xiàn)兩
49、塊數(shù)據(jù)的拷貝,并且兩個拷貝過程極為類似,分析其中一個即可。T1T3是3個單獨的時鐘周期;T4T11是一個循環(huán),在時空圖中描述了第一次循環(huán)的執(zhí)行情況。在T12的時候?qū)慙R的同時,開始對循環(huán)的第一條語句進行取指,所以總的流水線周期數(shù)為3+1010+29=121。整個拷貝過程需要1212+2=244個時鐘周期完成。五級流水線優(yōu)化(續(xù))l 考慮到通過減少流水線的沖突可以提高流水線的執(zhí)行效率,而流水線的沖突主要來自寄存器沖突和分支指令,因此對代碼作如下兩方面調(diào)整:將兩個循環(huán)合并成一個循環(huán)能夠充分減少循環(huán)跳轉(zhuǎn)的次數(shù),減少跳轉(zhuǎn)帶來的流水線停滯;調(diào)整代碼的順序,將帶有與臨近指令不相關(guān)的寄存器插到帶有相關(guān)寄存器
50、的指令之間,能夠充分地避免寄存器沖突導致的流水線阻塞。108調(diào)整之后,T1T5是5個單獨的時鐘周期,T6T13是一個循環(huán),同樣在T14的時候BNE指令在寫LR的同時,循環(huán)的第一條指令開始取指,所以總的指令周期數(shù)為5+1010+29+2=125。五級流水線優(yōu)化(續(xù))l 通過兩段代碼的比較可看出:調(diào)整之前整個拷貝過程總共使用了244個時鐘周期,調(diào)整了循環(huán)內(nèi)指令的順序后,總共使用了125個時鐘周期就完成了同樣的工作,時鐘周期減少了119個,縮短了119244=488,效率提升十分明顯。l 因此流水線的優(yōu)化問題主要應(yīng)從兩方面考慮:通過合并循環(huán)等方式減少分支指令的個數(shù),從而減少流水線的浪費;通過交換指令
51、的順序,避免寄存器沖突造成流水線停滯。109CM3流水線l Cortex-M3處理器使用一個3級流水線。流水線的3個級分別是:取指,解碼和執(zhí)行。l 當運行的指令大多數(shù)都是16位時,你會發(fā)現(xiàn)處理器會每隔一個周期做一次取指。這是因為CM3有時可以一次取出兩條指令來(一次能取32位),因此在第一條16位指令取來時,也順帶著把第二條16位指令取來了。此時總線接口就可以先歇一個周期再取指。或者如果緩沖區(qū)是滿的,總線接口干脆就空閑下來了。有些指令的執(zhí)行需要多個周期,在這期間流水線就會暫停。l 當執(zhí)行到跳轉(zhuǎn)指令時,需要清洗流水線,處理器會不得不從跳轉(zhuǎn)目的地重新取指。為了改善這種情況,CM3支持一定數(shù)量的AR
52、Mv7M新指令,可以避免很多微型跳轉(zhuǎn),如第4章講到的IF-THEN語句塊。由于流水線的存在,以及出于對Thumb代碼兼容的考慮,讀取PC時,會返回當前指令地址+4的值。這個偏移量總是4,不管是執(zhí)行16位指令還是32位指令,這就保了在Thumb和Thumb2之間的一致性。110CM3流水線(續(xù))l 在處理器內(nèi)核的預取單元中也有一個指令緩沖區(qū),它允許后續(xù)的指令在執(zhí)行前先在里面排隊,也能在執(zhí)行未對齊的32位指令時,避免流水線“斷流”。不過該緩沖區(qū)并不會在流水線中添加額外的級數(shù),因此不會使跳轉(zhuǎn)導致的性能下降(penalty)更加惡化。111112內(nèi)容 Cortex-M3 匯編指令集 AMBA總線AHB
53、 & APB 流水線技術(shù) 異常和中斷 與ARM7的比較異常類型113編號編號類型類型優(yōu)先級優(yōu)先級描述描述0 0- - -復位復位時載入向量表的第一項作為主堆棧棧頂?shù)刂贰r載入向量表的第一項作為主堆棧棧頂?shù)刂贰? 1復位復位-3-3復位復位。2 2NMINMI-2-2不可不可屏蔽中斷(來自外部屏蔽中斷(來自外部NMI輸入腳)。輸入腳)。3 3硬故障硬故障- -1 1當當故障由于優(yōu)先級或者是可配置的故障處理程序被禁止的原因而故障由于優(yōu)先級或者是可配置的故障處理程序被禁止的原因而無法激活時,所有類型故障都會以硬故障的方式激活。無法激活時,所有類型故障都會以硬故障的方式激活。4 4存儲器管理存
54、儲器管理可編程可編程MPUMPU不匹配,包括訪問沖突和不匹配。不匹配,包括訪問沖突和不匹配。5 5總線故障總線故障可編程可編程預預取指故障、存儲器訪問故障和其它地址取指故障、存儲器訪問故障和其它地址/存儲器相關(guān)的故障。存儲器相關(guān)的故障。6 6用法故障用法故障可編程可編程由于由于程序錯誤導致的異常,通常是使用一條無效指令,或都是非程序錯誤導致的異常,通常是使用一條無效指令,或都是非法的狀態(tài)轉(zhuǎn)換。法的狀態(tài)轉(zhuǎn)換。7-107-10保留保留- -1111SVCallSVCall可編程可編程執(zhí)行執(zhí)行SVC指令的系統(tǒng)服務(wù)調(diào)用。指令的系統(tǒng)服務(wù)調(diào)用。1212調(diào)試監(jiān)視器調(diào)試監(jiān)視器可編程可編程調(diào)試調(diào)試監(jiān)視器(斷點,
55、數(shù)據(jù)觀察點,或是外部調(diào)試請求)監(jiān)視器(斷點,數(shù)據(jù)觀察點,或是外部調(diào)試請求)1313保留保留- -1414PendSVPendSV可編程可編程系統(tǒng)系統(tǒng)服務(wù)的可觸發(fā)(服務(wù)的可觸發(fā)(pendable)請求。)請求。1515SysTickSysTick可編程可編程系統(tǒng)系統(tǒng)節(jié)拍定時器。節(jié)拍定時器。中斷類型編號編號類型類型優(yōu)先級優(yōu)先級描述描述1616IRQ IRQ #0#0可編程可編程外設(shè)外設(shè)中斷中斷 #01717IRQ IRQ #1#1可編程可編程外設(shè)外設(shè)中斷中斷 #1255255IRQ IRQ #239#239可編程可編程外設(shè)外設(shè)中斷中斷 #239114優(yōu)先級的定義l CM3的優(yōu)先級配置寄存器允許的最
56、少使用位數(shù)為3個位,亦即至少要支持8級優(yōu)先級l 在圖中,4:0沒有被實現(xiàn),所以讀它們總是返回零,寫它們則忽略寫入的值。因此,對于3個位的情況,我們能夠使用的8個優(yōu)先級為:0 x00(最高),0 x20,0 x40,0 x60,0 x80,0 xA0,0 xC0以及0 xE0。115搶占優(yōu)先級與子優(yōu)先級l 為了使搶占機能變得更可控,CM3還把256級優(yōu)先級按位分成高低兩段,分別稱為搶占優(yōu)先級和子優(yōu)先級,如下所述。NVIC中有一個寄存器是“應(yīng)用程序中斷及復位控制寄存器”,它里面有一個位段名為“優(yōu)先級組”。該位段的值對每一個優(yōu)先級可配置的異常都有影響把其優(yōu)先級分為2個位段:MSB所在的位段(左邊的)
57、對應(yīng)搶占優(yōu)先級,而LSB所在的位段(右邊的)對應(yīng)子優(yōu)先級。l 舉個例子,如果只使用3個位來表達優(yōu)先級(7:5),并且優(yōu)先級組的值是5(從比特5處分組),則得到4級搶占優(yōu)先級,且在每個搶占優(yōu)先級的內(nèi)部有2個子優(yōu)先級116向量表l 當發(fā)生了異常并且要響應(yīng)它時,CM3需要定位其服務(wù)例程的入口地址。這些入口地址存儲在所謂的“(異常)向量表”中。缺省情況下,CM3認為該表位于零地址處,且各向量占用4字節(jié)。因此每個表項占用4字節(jié)。117向量表(續(xù))l 因為地址0處應(yīng)該存儲引導代碼,所以它通常映射到Flash或者是ROM器件,并且它們的值不得在運行時改變。然而,為了支持動態(tài)重分發(fā)中斷,CM3允許向量表重定位
58、從其它地址處開始定位各異常向量。這些地址對應(yīng)的區(qū)域可以是代碼區(qū),但更多是在RAM區(qū)。在RAM區(qū)就可以修改向量的入口地址了。為了實現(xiàn)這個功能,NVIC中有一個寄存器,稱為“向量表偏移量寄存器”(在地址0 xE000_ED08處),通過修改它的值就能重定位向量表。l 如果需要動態(tài)地更改向量表,則對于任何器件來說,向量表的起始處都必須包含以下向量:u 主堆棧指針(MSP)的初始值u 復位向量u NMIu 硬fault服務(wù)例程 后兩者也是必需的,因為有可能在引導過程中發(fā)生這兩種異常。可以在SRA中開出一塊空間用于存儲向量表。在引導期間先填寫好各向量,然后在引導完成后,就可以啟用內(nèi)存中的新向量表,從而實
59、現(xiàn)向量可動態(tài)調(diào)整的能力。118中斷輸入及懸起行為119l當中斷輸入腳被assert后,該中斷就被懸起。即使后來中斷源撤消了中斷請求,已經(jīng)被標記成懸起的中斷也被記錄下來。到了系統(tǒng)中它的優(yōu)先級最高的時候,就會得到響應(yīng)。但是,如果在某個中斷得到響應(yīng)之前,其懸起狀態(tài)被清除了(例如,在PRIMASK或FAULTMASK置位的時候軟件清除了懸起狀態(tài)標志),則中斷被取消,中斷輸入及懸起行為120中斷輸入及懸起行為121中斷輸入及懸起行為(續(xù))l 當某中斷的服務(wù)例程開始執(zhí)行時,就稱此中斷進入了“活躍”狀態(tài),并且其懸起位會被硬件自動清除,在一個中斷活躍后,直到其服務(wù)例程執(zhí)行完畢,并且返回后,才能對該中斷的新請求
60、予以響應(yīng)。當然,新請求在得到響應(yīng)時,亦是由硬件自動清零其懸起標志位。中斷服務(wù)例程也可以在執(zhí)行過程中把自己對應(yīng)的中斷重新懸起(使用時要注意避免進入“死循環(huán)”)。122中斷輸入及懸起行為(續(xù))123中斷輸入及懸起行為(續(xù))124中斷輸入及懸起行為(續(xù))125中斷輸入及懸起行為(續(xù))126中斷異常的響應(yīng)序列l(wèi) 當CM3開始響應(yīng)一個中斷時,會在它小小的體內(nèi)奔涌起三股暗流:u入棧: 把8個寄存器的值壓入棧u取向量:從向量表中找出對應(yīng)的服務(wù)程序入口地址u選擇堆棧指針MSP/PSP,更新堆棧指針SP,更新連接寄存器LR,更新程序計數(shù)器PC127中斷異常的響應(yīng)序列(續(xù))128入棧l 響應(yīng)異常的第一個行動,就是自動保存現(xiàn)場的必要部分:依次把xPSR, P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合法的多人承包合同模板
- 2025租賃合同普通我方為承租人
- 2025切邊模具合同書
- 老屋修復技術(shù)在國內(nèi)外的發(fā)展現(xiàn)狀對比分析
- 2024年肛腸科醫(yī)院項目資金申請報告代可行性研究報告
- 探究學生自我監(jiān)控學習過程的有效策略
- 老年人用藥注意事項
- 二零二五年度電梯安裝工程安全防護設(shè)施采購合同2篇
- 2025年牛津譯林版必修3歷史上冊月考試卷
- 2025年魯科五四新版九年級地理上冊月考試卷含答案
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2024-2025學年八年級上學期1月期末物理試題(含答案)
- 商場電氣設(shè)備維護勞務(wù)合同
- 《妊娠期惡心嘔吐及妊娠劇吐管理指南(2024年)》解讀
- 2023年國家公務(wù)員錄用考試《行測》真題(行政執(zhí)法)及答案解析
- 全國教學設(shè)計大賽一等獎英語七年級上冊(人教2024年新編)《Unit 2 Were Family!》單元教學設(shè)計
- 2024智慧醫(yī)療數(shù)據(jù)字典標準值域代碼
- 年產(chǎn)12萬噸裝配式智能鋼結(jié)構(gòu)項目可行性研究報告模板-立項備案
- 【獨家揭秘】2024年企業(yè)微信年費全解析:9大行業(yè)收費標準一覽
- 醫(yī)療器械經(jīng)銷商會議
- 《±1100kV特高壓直流換流變壓器使用技術(shù)條件》
評論
0/150
提交評論