![嵌入式系統(tǒng)原理-第3章_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/0749a6d6-4688-48e6-9ba7-658da01e3902/0749a6d6-4688-48e6-9ba7-658da01e39021.gif)
![嵌入式系統(tǒng)原理-第3章_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/0749a6d6-4688-48e6-9ba7-658da01e3902/0749a6d6-4688-48e6-9ba7-658da01e39022.gif)
![嵌入式系統(tǒng)原理-第3章_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/0749a6d6-4688-48e6-9ba7-658da01e3902/0749a6d6-4688-48e6-9ba7-658da01e39023.gif)
![嵌入式系統(tǒng)原理-第3章_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/0749a6d6-4688-48e6-9ba7-658da01e3902/0749a6d6-4688-48e6-9ba7-658da01e39024.gif)
![嵌入式系統(tǒng)原理-第3章_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/8/0749a6d6-4688-48e6-9ba7-658da01e3902/0749a6d6-4688-48e6-9ba7-658da01e39025.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、vARM9微處理器采用的是微處理器采用的是ARMv4版本的指令集版本的指令集架構(gòu),其指令集代碼的格式如架構(gòu),其指令集代碼的格式如: v32位的位的ARM指令集由指令集由14種基本指令類型組成。種基本指令類型組成。指令操作碼中的指令操作碼中的Cond子域是條件域,它表明子域是條件域,它表明ARM指令集中的所有指令是有條件執(zhí)行的。指令集中的所有指令是有條件執(zhí)行的。v指令執(zhí)行的條件是根據(jù)指令執(zhí)行的條件是根據(jù)CPSR寄存器中的狀態(tài)標(biāo)志寄存器中的狀態(tài)標(biāo)志位和指令的條件域確定,見下表:位和指令的條件域確定,見下表: 寄存器裝載及存儲(chǔ)類指令 v這類指令是最常用的指令之一。它們把數(shù)據(jù)從存這類指令是最常用的指令
2、之一。它們把數(shù)據(jù)從存儲(chǔ)器單元中裝載(讀入)到微處理器核的寄存器儲(chǔ)器單元中裝載(讀入)到微處理器核的寄存器(即(即R0R15)中,或者把微處理器核的寄存器)中,或者把微處理器核的寄存器中的數(shù)據(jù)存儲(chǔ)(寫入)到存儲(chǔ)器單元中。中的數(shù)據(jù)存儲(chǔ)(寫入)到存儲(chǔ)器單元中。 v(1)單一數(shù)據(jù)加載)單一數(shù)據(jù)加載/存儲(chǔ)指令:存儲(chǔ)指令:LDR/STRv 指令書寫格式:指令書寫格式:v (1)LDR/STR條件碼條件碼B Rd,Rn v (2)LDR/STR條件碼條件碼B Rd,Rn,F(xiàn)lexoffset ! v (3)LDR/STR條件碼條件碼B Rd,label v (4)LDR/STR條件碼條件碼B Rd,Rn,F(xiàn)
3、lexoffset v下面是幾條下面是幾條LDR/STR指令書寫的示例:指令書寫的示例:v LDR R2,R5 ;無偏移量,無偏移量,R2R5v LDREQ R5,R6,#28! v ;(若相等);(若相等)R5R6+28,R6R6+28v LDR R8,label v ;加載一個(gè)字到;加載一個(gè)字到R8,該字存于,該字存于label對應(yīng)單元處對應(yīng)單元處v STR R1,R3,# -6! ;R1R3,R3R3-6v STRB R0,R3,-R8 ASR #2 v ;R0的最低字節(jié)的最低字節(jié)R3-R8/4單元的低字節(jié)單元的低字節(jié) v(2)多數(shù)據(jù)加載)多數(shù)據(jù)加載/存儲(chǔ)指令:存儲(chǔ)指令:LDM和和STM
4、。 v指令書寫格式:指令書寫格式:v LDM/STM條件碼條件碼類型類型 Rn!,寄存器列表,寄存器列表v 指令中的類型是指存儲(chǔ)器地址變化的方式。也就是說,每加載或者存指令中的類型是指存儲(chǔ)器地址變化的方式。也就是說,每加載或者存儲(chǔ)完一個(gè)寄存器后,存儲(chǔ)器的地址需要自動(dòng)變化,如何變化則由指令儲(chǔ)完一個(gè)寄存器后,存儲(chǔ)器的地址需要自動(dòng)變化,如何變化則由指令助記符后面所跟的類型確定。類型可以是下列情況之一:助記符后面所跟的類型確定。類型可以是下列情況之一:v IA 每次數(shù)據(jù)傳送后存儲(chǔ)器的地址加每次數(shù)據(jù)傳送后存儲(chǔ)器的地址加1;v IB 每次數(shù)據(jù)傳送前存儲(chǔ)器的地址加每次數(shù)據(jù)傳送前存儲(chǔ)器的地址加1;v DA 每
5、次數(shù)據(jù)傳送后存儲(chǔ)器的地址減每次數(shù)據(jù)傳送后存儲(chǔ)器的地址減1;v DB 每次數(shù)據(jù)傳送前存儲(chǔ)器的地址減每次數(shù)據(jù)傳送前存儲(chǔ)器的地址減1;v FD 滿遞減堆棧;滿遞減堆棧;v ED 空遞減堆棧;空遞減堆棧;v FA 滿遞增堆棧;滿遞增堆棧;v EA 空遞增堆棧。空遞增堆棧。 v例如:例如:v STMFD R13!,!,R0-R12,R14 ;寄存器進(jìn)棧;寄存器進(jìn)棧v v LDMFD R13!,!,R0-R12,PC ;寄存器出棧,返回;寄存器出棧,返回v 利用利用STM指令把存儲(chǔ)在指令把存儲(chǔ)在LR寄存器中的當(dāng)前寄存器中的當(dāng)前PC值保存到存儲(chǔ)器中的值保存到存儲(chǔ)器中的時(shí)候,同時(shí)還保存了時(shí)候,同時(shí)還保存了CP
6、SR寄存器的值。在用寄存器的值。在用LDM指令重新裝載指令重新裝載 PC寄存器的時(shí)候,除非設(shè)計(jì)者在指令中寫上相應(yīng)的符號,否則不會(huì)恢復(fù)寄存器的時(shí)候,除非設(shè)計(jì)者在指令中寫上相應(yīng)的符號,否則不會(huì)恢復(fù)CPSR的值。所寫的符號是在寄存器列表后跟隨一個(gè)的值。所寫的符號是在寄存器列表后跟隨一個(gè)“”符號。符號。v 例如:例如:v STMFD R13!,!,R0-R12,R14 ;寄存器進(jìn)棧;寄存器進(jìn)棧v v LDMFD R13!,!,R0-R12,PC ;寄存器出棧,返回,;寄存器出棧,返回,同時(shí)恢復(fù)同時(shí)恢復(fù)CPSR v (3)單一數(shù)據(jù)交換指令:)單一數(shù)據(jù)交換指令:SWP。v 該指令完成在寄存器和存儲(chǔ)器之間進(jìn)
7、行數(shù)據(jù)交換該指令完成在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換的功能,其句法如下:的功能,其句法如下:v SWP條件碼條件碼B Rd,Rm,Rn v 若指令助記符中加上可選后綴若指令助記符中加上可選后綴B,則交換的是字,則交換的是字節(jié)數(shù)據(jù),否則交換的是字?jǐn)?shù)據(jù)。節(jié)數(shù)據(jù),否則交換的是字?jǐn)?shù)據(jù)。v 該指令的具體作用是數(shù)據(jù)從存儲(chǔ)單元加裁到該指令的具體作用是數(shù)據(jù)從存儲(chǔ)單元加裁到Rd寄存器中,寄存器中,Rm寄存器的內(nèi)容存儲(chǔ)到存儲(chǔ)單元中,寄存器的內(nèi)容存儲(chǔ)到存儲(chǔ)單元中,該存儲(chǔ)單元的地址是該存儲(chǔ)單元的地址是Rn寄存器的值。寄存器的值。 影響狀態(tài)標(biāo)志位類指令 vCPSR寄存器是寄存器是ARM9微處理器核中保存狀態(tài)標(biāo)微處理器核
8、中保存狀態(tài)標(biāo)志位的寄存器,其中志位的寄存器,其中N、V、C、Z標(biāo)志是由指令標(biāo)志是由指令執(zhí)行結(jié)果確定的。能影響這些標(biāo)志生成的指令或執(zhí)行結(jié)果確定的。能影響這些標(biāo)志生成的指令或讀讀/寫寫CPSR寄存器的指令如下:寄存器的指令如下:v (1)ADC,ADD,SBC,SUB,RSC和和RSB指令;指令;v (2)AND,ORR,EOR和和BIC指令;指令;v (3)MOV和和MVN指令;指令;注:注:MOV和和MVN是是寄存器與寄存器間的傳送指令。若寄存器與寄存器間的傳送指令。若R15是目的寄存是目的寄存器,則會(huì)修改程序計(jì)數(shù)器器,則會(huì)修改程序計(jì)數(shù)器PC的值或標(biāo)志。這一點(diǎn)可被用于子程序返的值或標(biāo)志。這一點(diǎn)
9、可被用于子程序返回,方法是把鏈接寄存器回,方法是把鏈接寄存器R14的內(nèi)容傳送到的內(nèi)容傳送到R15中。中。v (4)MUL和和MLA指令;指令;v (5)MRS和和MSR指令。指令。注:注:MRS:只能完成:只能完成CPSR寄存器和寄存器和SPSR寄存器的讀操作;寄存器的讀操作; MSR:只能完成:只能完成CPSR寄存器和寄存器和SPSR寄存器的寫操作。寄存器的寫操作。 v(1)CMP和和CMN指令指令 CMP條件碼條件碼 Op1,Op2 該條指令的功能如下該條指令的功能如下:狀態(tài)位:狀態(tài)位 = Op1 - Op2的結(jié)果的結(jié)果。 CMN:與取負(fù)的數(shù):與取負(fù)的數(shù)比較指令比較指令 CMN條件碼條件碼
10、 Op1,Op2 該條指令的功能如下該條指令的功能如下:狀態(tài)位:狀態(tài)位 = Op1 -(- Op2)的結(jié)果)的結(jié)果。 v(2)TST和和TEQ指令指令 TST條件碼條件碼 Op1,Op2 該條指令的功能如下該條指令的功能如下:狀態(tài)位:狀態(tài)位 = Op1 AND Op2的結(jié)果的結(jié)果。 TEQ條件碼條件碼 Op1,Op2 該條指令的功能如下該條指令的功能如下:狀態(tài)位:狀態(tài)位 = Op1 EOR Op2的結(jié)果的結(jié)果。 v(1)B和和BL B:分枝指令,其句法是:分枝指令,其句法是: B條件碼條件碼 destadd B指令是最簡單的分枝指令。指令是最簡單的分枝指令。ARM9微處理器一旦遇到一個(gè)微處理器
11、一旦遇到一個(gè)B指令,指令,將立即跳轉(zhuǎn)到指令中給定的目的地址處,從那里繼續(xù)執(zhí)行。將立即跳轉(zhuǎn)到指令中給定的目的地址處,從那里繼續(xù)執(zhí)行。 BL:帶鏈接的分枝指令,其句法是:帶鏈接的分枝指令,其句法是: BL條件碼條件碼 destadd BL指令指令是一個(gè)需要返回的分枝指令。該分枝指令在分枝之前是一個(gè)需要返回的分枝指令。該分枝指令在分枝之前,R14寄存器(即寄存器(即LR寄存器)中會(huì)裝載上寄存器)中會(huì)裝載上R15寄存器(即寄存器(即PC寄存器)寄存器)的內(nèi)的內(nèi)容。若要從分枝處返回發(fā)生轉(zhuǎn)移的地方,可以通過重新把容。若要從分枝處返回發(fā)生轉(zhuǎn)移的地方,可以通過重新把R14寄存寄存器的內(nèi)容裝載到器的內(nèi)容裝載到R
12、15 寄存器中來實(shí)現(xiàn),寄存器中來實(shí)現(xiàn),ARM微處理器返回到這個(gè)分微處理器返回到這個(gè)分枝指令之后的第一條指令處繼續(xù)執(zhí)行。枝指令之后的第一條指令處繼續(xù)執(zhí)行。 vSWI:軟件中斷指令,:軟件中斷指令,SWI是是Software Interrupt的縮寫。其句法是:的縮寫。其句法是: SWI條件碼條件碼 destcoad v上述句法中上述句法中destcoad是一個(gè)是一個(gè)24位的編號,即軟位的編號,即軟件中斷號。件中斷號。SWI指令會(huì)引起指令會(huì)引起SWI異常,使得微異常,使得微處理器的工作模式變換為管理模式,處理器的工作模式變換為管理模式,CPSR將被將被保存到管理模式的保存到管理模式的SPSR中,指
13、令執(zhí)行流水被阻中,指令執(zhí)行流水被阻塞,并轉(zhuǎn)移到塞,并轉(zhuǎn)移到SWI異常向量處。該指令不影響條異常向量處。該指令不影響條件碼標(biāo)志。件碼標(biāo)志。vSWI指令主要是為指令主要是為操作系統(tǒng)提供的。操作系統(tǒng)提供的。 v偽指令不是目標(biāo)系統(tǒng)能夠執(zhí)行的指令,而是匯編偽指令不是目標(biāo)系統(tǒng)能夠執(zhí)行的指令,而是匯編器采用的,用來指示如何進(jìn)行匯編的符號,這種器采用的,用來指示如何進(jìn)行匯編的符號,這種符號在匯編時(shí),匯編器會(huì)把它匯編成一條或幾條符號在匯編時(shí),匯編器會(huì)把它匯編成一條或幾條正真的匯編指令。正真的匯編指令。 v幾種主要的偽指令:幾種主要的偽指令:v(1)ADR 將程序相對偏移或寄存器相對偏移地址加載到寄存器中將程序相
14、對偏移或寄存器相對偏移地址加載到寄存器中 v(2)ADRL 該偽指令是加載長地址,功能類似如該偽指令是加載長地址,功能類似如ADR偽指令偽指令 v(3)LDR 該偽指令作用是把一個(gè)該偽指令作用是把一個(gè)32位常量或常量表達(dá)式加載到寄位常量或常量表達(dá)式加載到寄存器中。存器中。 v嵌入式系統(tǒng)發(fā)展到今天,程序的運(yùn)行效率及存儲(chǔ)嵌入式系統(tǒng)發(fā)展到今天,程序的運(yùn)行效率及存儲(chǔ)容量已不是嵌入式系統(tǒng)設(shè)計(jì)時(shí)所需考慮的主要問容量已不是嵌入式系統(tǒng)設(shè)計(jì)時(shí)所需考慮的主要問題。若只是關(guān)心嵌入式系統(tǒng)所具有的應(yīng)用功能,題。若只是關(guān)心嵌入式系統(tǒng)所具有的應(yīng)用功能,那么,在設(shè)計(jì)中,采用高級編程語言(例如那么,在設(shè)計(jì)中,采用高級編程語言(
15、例如C語語言等)編寫程序更合適,它隱藏了微處理器執(zhí)行言等)編寫程序更合適,它隱藏了微處理器執(zhí)行指令的許多細(xì)節(jié),設(shè)計(jì)時(shí)相對方便。指令的許多細(xì)節(jié),設(shè)計(jì)時(shí)相對方便。 v但是,如果嵌入式系統(tǒng)設(shè)計(jì)者希望對嵌入式系統(tǒng)但是,如果嵌入式系統(tǒng)設(shè)計(jì)者希望對嵌入式系統(tǒng)有更深層次的了解,希望能完成系統(tǒng)啟動(dòng)程序的有更深層次的了解,希望能完成系統(tǒng)啟動(dòng)程序的編寫、操作系統(tǒng)移植等任務(wù),那么,掌握匯編語編寫、操作系統(tǒng)移植等任務(wù),那么,掌握匯編語言程序設(shè)計(jì)是非常必要的。言程序設(shè)計(jì)是非常必要的。 匯編編程規(guī)則 v利用利用ARM9匯編指令進(jìn)行程序設(shè)計(jì)時(shí),程序中的匯編指令進(jìn)行程序設(shè)計(jì)時(shí),程序中的每一語句行的格式為:每一語句行的格式為:
16、 標(biāo)號標(biāo)號 指令指令 “或或” 指示符指示符 “或或” 偽指令偽指令 ;注解;注解。v指示符是匯編器定義的,也是用來指示匯編器如指示符是匯編器定義的,也是用來指示匯編器如何進(jìn)行匯編的符號,這些符號僅指示匯編器如何何進(jìn)行匯編的符號,這些符號僅指示匯編器如何進(jìn)行匯編和連接,不會(huì)被匯編成一條正真的匯編進(jìn)行匯編和連接,不會(huì)被匯編成一條正真的匯編指令。指令。v幾個(gè)主要指示符:幾個(gè)主要指示符:(1)AREA 指示匯編器匯編一段新的代碼段或數(shù)據(jù)段的指示符;指示匯編器匯編一段新的代碼段或數(shù)據(jù)段的指示符;(2)ENTRY 指示匯編器把其后的首條指令作為程序入口的指示符,指示匯編器把其后的首條指令作為程序入口的指
17、示符,一個(gè)源文件中只能有一個(gè)一個(gè)源文件中只能有一個(gè)ENTRY指示符;指示符;(3)END 表示源程序結(jié)束的指示符;表示源程序結(jié)束的指示符;(4)IMPORT 告訴匯編器某個(gè)變量名或標(biāo)號在當(dāng)前程序段中未曾定義告訴匯編器某個(gè)變量名或標(biāo)號在當(dāng)前程序段中未曾定義的指示符,這個(gè)變量名或標(biāo)號由連接器進(jìn)行定位;的指示符,這個(gè)變量名或標(biāo)號由連接器進(jìn)行定位;(5)EXPORT 指示由連接器在目標(biāo)和庫文件中使用的符號的指示符;指示由連接器在目標(biāo)和庫文件中使用的符號的指示符;(6)CODE32 指示匯編器將隨后的指令作為指示匯編器將隨后的指令作為32位位ARM指令進(jìn)行匯編指令進(jìn)行匯編的指示符;的指示符;(7)COD
18、E16 指示匯編器將隨后的指令作為指示匯編器將隨后的指令作為16位位Thumb指令進(jìn)行指令進(jìn)行匯編的指示符;匯編的指示符;(8)GET 指示包含一個(gè)文件的指示符,匯編器在指示包含一個(gè)文件的指示符,匯編器在GET處匯編包含處匯編包含的文件;的文件;(9)DATA 指示一個(gè)標(biāo)號是代碼段中數(shù)據(jù)區(qū)域的標(biāo)號,該符號后是通指示一個(gè)標(biāo)號是代碼段中數(shù)據(jù)區(qū)域的標(biāo)號,該符號后是通常是偽指令常是偽指令DCB或或DCD。 匯編指令的特點(diǎn) vARM9的匯編指令相對于其他微處理器的匯編指的匯編指令相對于其他微處理器的匯編指令來說,具有許多特點(diǎn):令來說,具有許多特點(diǎn):v(1)指令的條件執(zhí)行:)指令的條件執(zhí)行:32位位ARM
19、指令集中的指令集中的所有指令都是條件執(zhí)行的指令。需要條件執(zhí)行的所有指令都是條件執(zhí)行的指令。需要條件執(zhí)行的指令只需要使用條件后綴,就可以實(shí)現(xiàn)條件執(zhí)行。指令只需要使用條件后綴,就可以實(shí)現(xiàn)條件執(zhí)行。 例例1: CMP R0,R1 ;比較比較R0和和R1的值,結(jié)果用于更新標(biāo)志的值,結(jié)果用于更新標(biāo)志 ADDEQS R0,R1,R2 ;如標(biāo)志如標(biāo)志Z =1,則加法指令執(zhí)行,并更新標(biāo)志,則加法指令執(zhí)行,并更新標(biāo)志 v(2)多種形式的傳送類指令)多種形式的傳送類指令v(3)多寄存器加載)多寄存器加載/存儲(chǔ)指令存儲(chǔ)指令 v(4)映射存儲(chǔ)的指示符:)映射存儲(chǔ)的指示符:ARM匯編器可以使用匯編器可以使用MAP和和“
20、#”指示符,來描述一個(gè)結(jié)構(gòu)體,指示指示符,來描述一個(gè)結(jié)構(gòu)體,指示符符MAP和和“#”主要用于完成結(jié)構(gòu)體的定義,并主要用于完成結(jié)構(gòu)體的定義,并不一定具體確定其內(nèi)存空間地址。不一定具體確定其內(nèi)存空間地址。v指示符指示符MAP說明結(jié)構(gòu)體的基地址,指示符說明結(jié)構(gòu)體的基地址,指示符“#”定義數(shù)據(jù)項(xiàng)的標(biāo)號并說明所需空間。定義數(shù)據(jù)項(xiàng)的標(biāo)號并說明所需空間。 例如:例如: MAP 0 x00001000 element1 # 4 ;element1占用占用4字節(jié)字節(jié) element2 # 4 ;element2占用占用4字節(jié)字節(jié) element3 # 8 ;element3占用占用8字節(jié)字節(jié) element4
21、# 8 ;element4占用占用8字節(jié)字節(jié) element5 # 256 ;element5占用占用256字節(jié)字節(jié) v(5)程序中的宏定義:在匯編程序設(shè)計(jì)時(shí),宏)程序中的宏定義:在匯編程序設(shè)計(jì)時(shí),宏定義的使用是為了提高程序的可讀性、以及可維定義的使用是為了提高程序的可讀性、以及可維護(hù)性。護(hù)性。ARM匯編器提供的宏類似于標(biāo)準(zhǔn)匯編器提供的宏類似于標(biāo)準(zhǔn)C語言中語言中的的#define,其功能是在程序源代碼中進(jìn)行字符,其功能是在程序源代碼中進(jìn)行字符替代。替代。 vARM匯編器把指示符匯編器把指示符MACRO作為宏定義的開作為宏定義的開始,指示符始,指示符MEND作為宏定義的結(jié)束,并且可以作為宏定義的
22、結(jié)束,并且可以帶有參數(shù)。例如:帶有參數(shù)。例如: MACRO $ aa example $ bb,$cc,$dd $ aa CMP $ cc,#0 B$ dd $ bb MEND v系統(tǒng)引導(dǎo)程序系統(tǒng)引導(dǎo)程序(Bootloader)是目標(biāo))是目標(biāo)系統(tǒng)硬件上電或復(fù)位后執(zhí)系統(tǒng)硬件上電或復(fù)位后執(zhí)行的第一段程序代碼,它行的第一段程序代碼,它通常被安排在系統(tǒng)復(fù)位異通常被安排在系統(tǒng)復(fù)位異常向量地址處。常向量地址處。v系統(tǒng)引導(dǎo)程序是依賴于具系統(tǒng)引導(dǎo)程序是依賴于具體硬件環(huán)境的,除了依賴體硬件環(huán)境的,除了依賴于微處理器的體系結(jié)構(gòu)外,于微處理器的體系結(jié)構(gòu)外,還依賴于具體的板級硬件還依賴于具體的板級硬件配置。配置。 v
23、通常系統(tǒng)引導(dǎo)程序需完成以下功能:通常系統(tǒng)引導(dǎo)程序需完成以下功能:v 設(shè)置異常向量表(即在異常向量地址處設(shè)置相關(guān)分枝指令)設(shè)置異常向量表(即在異常向量地址處設(shè)置相關(guān)分枝指令)v 關(guān)看門狗定時(shí)器,關(guān)中斷。關(guān)看門狗定時(shí)器,關(guān)中斷。v 有時(shí)需要設(shè)置系統(tǒng)微處理器的速度和時(shí)鐘頻率。有時(shí)需要設(shè)置系統(tǒng)微處理器的速度和時(shí)鐘頻率。v 設(shè)置好堆棧指針。系統(tǒng)堆棧初始化取決于用戶使用哪些異設(shè)置好堆棧指針。系統(tǒng)堆棧初始化取決于用戶使用哪些異常,以及系統(tǒng)需要處理哪些錯(cuò)誤類型。一般情況下,管理常,以及系統(tǒng)需要處理哪些錯(cuò)誤類型。一般情況下,管理模式堆棧必須設(shè)置;若使用了模式堆棧必須設(shè)置;若使用了IRQ中斷,則中斷,則IRQ中斷
24、堆中斷堆棧必須設(shè)置。棧必須設(shè)置。v 如果系統(tǒng)應(yīng)用程序是運(yùn)行在用戶模式下,可在系統(tǒng)引導(dǎo)程如果系統(tǒng)應(yīng)用程序是運(yùn)行在用戶模式下,可在系統(tǒng)引導(dǎo)程序中將微處理器的工作模式改為用戶模式并初始化用戶模序中將微處理器的工作模式改為用戶模式并初始化用戶模式下的堆棧指針。式下的堆棧指針。v 若系統(tǒng)使用了若系統(tǒng)使用了DRAM或其他外設(shè),需要設(shè)置相關(guān)寄存器,或其他外設(shè),需要設(shè)置相關(guān)寄存器,以確定其刷新頻率、總線寬度等信息。以確定其刷新頻率、總線寬度等信息。v 初始化所需的存儲(chǔ)器空間。初始化所需的存儲(chǔ)器空間。v 跳轉(zhuǎn)到跳轉(zhuǎn)到C程序的入口點(diǎn)。程序的入口點(diǎn)。 v一個(gè)啟動(dòng)引導(dǎo)程序示例(文件名:一個(gè)啟動(dòng)引導(dǎo)程序示例(文件名:
25、Startup.s )v ;下面指令包含下面指令包含2440addr.s文件,該文件中定義了文件,該文件中定義了S3C2440內(nèi)部寄內(nèi)部寄存器地址對應(yīng)的變量,如存器地址對應(yīng)的變量,如WTCON、INTMSK等。等。v GET 2440addr.s v ; 某些某些ARM920T CPSR寄存器位的定義,定義了部分常量。寄存器位的定義,定義了部分常量。v USERMODE EQU0 x10v FIQMODE EQU0 x11v IRQMODE EQU0 x12v SVCMODE EQU0 x13v ABORTMODE EQU0 x17v UNDEFMODE EQU0 x1bv MODEMASK
26、EQU0 x1fv NOINT EQU0 xc0v I_Bit*0 x80v F_Bit*0 x40v;AREA指示匯編器匯編一段新的代碼指示匯編器匯編一段新的代碼AREA Init,CODE,READONLYv;IMPORT提供匯編器在當(dāng)前匯編中未曾定義的提供匯編器在當(dāng)前匯編中未曾定義的符號名。符號名。IMPORT _use_no_semihosting_swiIMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQv;下面下面ENTRY指明了程序的入口,在應(yīng)用程序中指明了程序的入口
27、,在應(yīng)用程序中有且只有一個(gè)程序入口。有且只有一個(gè)程序入口。ENTRYv;下面是異常向量表,第一條語句是復(fù)位異下面是異常向量表,第一條語句是復(fù)位異常對應(yīng)的跳轉(zhuǎn)指令。常對應(yīng)的跳轉(zhuǎn)指令。BColdReset;復(fù)位復(fù)位BEnter_UNDEF ;未定義指令錯(cuò)誤未定義指令錯(cuò)誤BEnter_SWI;軟件中斷軟件中斷BEnter_PABORT;預(yù)取指令錯(cuò)誤預(yù)取指令錯(cuò)誤BEnter_DABORT;數(shù)據(jù)存取錯(cuò)誤數(shù)據(jù)存取錯(cuò)誤B.;一個(gè)保留的中斷向量一個(gè)保留的中斷向量BIRQ_Handler;IRQHandlerBEnter_FIQ;FIQHandler v;涉及涉及IRQ異常的處理異常的處理EXPORT IRQ_
28、HandlerIRQ_HandlerIMPORT ISR_IrqHandlerSTMFDsp!, r0-r12, lrBLISR_IrqHandlerLDMFDsp!, r0-r12, lrSUBSpc, lr,#4 v;系統(tǒng)上電或復(fù)位后跳轉(zhuǎn)到此處開始進(jìn)行運(yùn)行。系統(tǒng)上電或復(fù)位后跳轉(zhuǎn)到此處開始進(jìn)行運(yùn)行。EXPORT ColdResetColdResetv;關(guān)看門狗定時(shí)器關(guān)看門狗定時(shí)器 LDR R0,=WTCONLDRR1,=0 x0STRR1,R0v;關(guān)所有中斷關(guān)所有中斷LDRR0,=INTMSKLDRR1,=0 xffffffffSTRR1,r0LDRR0,=INTSUBMSKLDRR1,=0 x7ff;關(guān)所有子中斷源關(guān)所有子中斷源STRR1,r0 v;初始化堆棧,使用了帶鏈接的分枝指令,跳轉(zhuǎn)到初始化堆棧,使用了帶鏈接的分枝指令,跳轉(zhuǎn)到堆棧指針設(shè)置子程序中堆棧指針設(shè)置子程序中BLInitStacksv;下面調(diào)轉(zhuǎn)到下面調(diào)轉(zhuǎn)到C語言的主函數(shù)處語言的主函數(shù)處IMPO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國皮鞋鞋材數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國燒結(jié)爐數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國旋流板凈化塔數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國插頭延長線數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國壁環(huán)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國光纖柜架數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國鋁芯線市場調(diào)查研究報(bào)告
- 2025年中國智能卡式水表市場調(diào)查研究報(bào)告
- Unit 4 My Family Lesson 4 教學(xué)設(shè)計(jì) 2024-2025學(xué)年冀教版(2024)七年級英語上冊
- 2025年中國AD丙烯酸防水乳液市場調(diào)查研究報(bào)告
- 2024年01月江西2024年江西銀行贛州分行招考筆試歷年參考題庫附帶答案詳解
- GB/T 1346-2024水泥標(biāo)準(zhǔn)稠度用水量、凝結(jié)時(shí)間與安定性檢驗(yàn)方法
- 初三數(shù)學(xué)一元二次方程應(yīng)用題附答案
- 教職工安全管理培訓(xùn)
- 2025年湖南中醫(yī)藥高等專科學(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 云南省曲靖市羅平縣2024-2025學(xué)年高二上學(xué)期期末地理試題( 含答案)
- 【歷史】金與南宋對峙課件-2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 《教育心理學(xué)(第3版)》全套教學(xué)課件
- 九宮數(shù)獨(dú)200題(附答案全)
- 國際標(biāo)準(zhǔn)《風(fēng)險(xiǎn)管理指南》(ISO31000)的中文版
- 燃?xì)膺^戶協(xié)議書
評論
0/150
提交評論