




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Bootloader 代碼分析報(bào)告 徐凱 2007-8-3 Bootloader 代碼分析報(bào)告 . 1 1. 啟動(dòng)代碼分析 . 1 1.1. vector.s 代碼分析 . 1 1.1.1. 宏定義 . 5 1.1.3. 判斷是否是 thumb 指令 . 6 1.1.4. 定義新程序、引入新符號(hào) . 6 1.1.5. 定義新程序、引入新符號(hào) . 7 1.1.6. 定義系統(tǒng)異常向量表 . 7 1.1.7. 程序跳轉(zhuǎn)宏定義 . 7 1.1.8. 異常處理程序定義 . 8 1.1.9. 聲明 C 主函數(shù)程序入口 . 10 1.1.10. 定義 vector.s 中需要用到的連接器變量 . 11 1.
2、1.11. 定義從FLASH啟動(dòng)程序的函數(shù) . 11 1.2. sysinit.s 代碼分析 . 11 1.2.1. 引入S3C4510相關(guān)系統(tǒng)配置寄存器的地址 . 18 1.2.2. 定義用于配置 ROM和RAM的宏 . 18 1.2.3. 定義用于配置 SYSCFG勺宏 . 19 1.2.4. 定義用于初始化內(nèi)存的函數(shù) InitMemory . 19 1.2.5. 定義用于初始化內(nèi)存的函數(shù) InitMemory . 20 1.2.6. 定義內(nèi)存重設(shè)置函數(shù) ResetMemSet . 21 1.2.7. 初始化 21 種中斷源響應(yīng)函數(shù) InitInterrupt . 22 1.2.8. 初始
3、化 18 個(gè)外部 I/O 端口函數(shù) InitPort . 22 1.2.9. 初始化 2 個(gè)計(jì)時(shí)器的函數(shù) InitTimer . 22 1.2.10. 初始化 2個(gè)串口函數(shù) InitUart . 23 1.2.11. 初始化棧函數(shù) InitStack . 24 1.2.12. 系統(tǒng)初始化函數(shù) InitSystem . 241 1.啟動(dòng)代碼分析 1.1. vector.s 代碼分析 由于連接器參數(shù)中有-first vector.o,所以先從這個(gè)文件開(kāi)始分析。首先,列出源代碼: 1 ModeMask EQU 0 x1F 2 SVC32Mode EQU 0 x13 3 IRQ32Mode EQU 0
4、 x12 4 FIQ32Mode EQU 0 x11 5 User32Mode EQU 0 x10 6 Abort32Mode EQU 0 x17 7 Un def32Mode EQU 0 x1B 8 IRQ_BIT EQU 0 x80 9 FIQ_BIT EQU 0 x40 10 ;RomBaseAddr EQU 0 11 RamBaseAddr EQU & 100 12 ;RamE ndAddr EQU &2 13 GBLS MainEntry 14 MainEntry SETS ma in 15 IMPORT $Mai nEn try 16 ;* 17 ;?鯡? ? ta
5、sm.exe? ?默? 18 GBLL THUMBCODE 19 CONFIG = 16 20 THUMBCODE SETL TRUE 21 CODE32 22 | 23 THUMBCODE SETL FALSE 24 25 25 THUMBCODE 26 CODE32 ;for start-up code for Thumb mode 27 29 28 ;* 2 29 AREA SelfBoot, CODE, READONL Y 32 30 IMPORT UDFN S_VECTOR 31 IMPORT SWI_SVC_VECTOR3 IMPORT INS_ABT_VECTOR IMPORT
6、DAT_ABT_VECTOR IMPORT IRQ_SVC_VECTOR IMPORT FIQ_SVC_VECTOR ENTRY IF :DEF: |ads$version| ELSE EXPORT _main _main ENDIF ResetEntry b SYS_RST_HANDLER b UDF_INS_HANDLER b SWI_SVC_HANDLER b INS_ABT_HANDLER b DAT_ABT_HANDLER b . b IRQ_SVC_HANDLER b FIQ_SVC_HANDLER * J MACRO $Label HANDLER $Vector $Label s
7、ub lr, lr, #4 stmfd sp!, r0-r3, lr ldr r0, =$Vector ldr pc, r0 Idmfd sp!, r0-r3, pcA MEND UDF_INS_HANDLER stmfd sp!, r0-r3, Ir Idr r0, =UDF_INS_VECTOR mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA SWI_SVC_HANDLER stmfd sp!, r0-r3, Ir Idr r0, =SWI_SVC_VECTOR 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
8、 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 4 mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA5 INS_ABT_HANDLER sub lr, lr, #4 stmfd sp!, r0-r3, lr ldr r0, =INS_ABT_VECTOR mov lr, pc ldr pc, r0 Idmfd sp!, r0-r3, pcA DAT_ABT_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-
9、r3, Ir Idr r0, =DAT_ABT_VECTOR mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA IRQ_SVC_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r12, Ir mrs r0, spsr stmfd sp!, r0 Idr r0, =IRQ_SVC_VECTOR Idr pc, r0 FIQ_SVC_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r12, Ir mrs r0, spsr stmfd sp!, r0 Idr r0, =IRQ_SVC_VECTOR Idr pc
10、, r0 * J SYS_RST_HANDLER mrs r0, cpsr ;enter svc mode and disabIe irq,fiq bic r0, r0, #ModeMask orr r0, r0, #(SVC32Mode :OR: IRQ_BIT :OR: FIQ_BIT) msr cpsr_c, r0 IMPORT InitSystem bI InitSystem adr r0, ResetEntry mov r3, #(RamBaseAddr16) Idr r1, BaseOfROM Idr r2, TopOfROM add r1, r1, r379 80 81 82 8
11、3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 6 add r2, r2, r3 0 ldmia r0!, r4-r11 stmia r1!, r4-r11 cmp r1, r2 bcc %B0 sub r1, r1, r2 sub r0, r0, r1 ldr r1, BaseOfBSS ldr r2, BaseOfZero add r1, r1, r3 ad
12、d r2, r2, r3 1 cmp r1, r2 ldrccr4, r0, #4 strcc r4, r1, #4 bcc %B1 mov r0, #0 ldr r2, EndOfBSS add r2, r2, r3 3 cmp r1, r2 strcc r0, r1, #4 bcc %B3 IMPORT RemapMemory adr r0, ResetEntry ldr r1, =RemapMemory ldr r2, BaseOfROM sub r2, r1, r2 add r0, r0, r2 add r1, r2, r3 mov r2, #32 0 ldr r3, r0, #4 s
13、tr r3, r1, #4 subs r2, r2, #1 bne %B0 ldr lr, GotoMain b RemapMemory123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 7 * ; ROM code start ; RAM data starts after ROM program
14、 ; Pre-initialised variables IMPORT |Image$ZI$Base| ; uninitialised variables IMPORT |Image$ZI$Limit| ; End of variable RAM space BaseOfROM DCD |Image$RO$Base| TopOfROM DCD |Image$RO$Limit| BaseOfBSS DCD |Image$RW$Base| BaseOfZero DCD |Image$ZI$Base| EndOfBSS DCD |Image$ZI$Limit| * TIP_SIZE EQU 256
15、IMPORT ResetMemSet EXPORT trans_to_boot trans_to_boot mov lr, r1 ; a2 = r1 ldr r1, =ResetMemSet ldr r2, BaseOfROM sub r2, r1, r2 add r0, r0, r2 ; a1 = r0 mov r2, #TIP_SIZE 0 ldr r3, r1, #4 str r3, r0, #4 subs r2, r2, #1 bne %B0 sub r0, r0, #TIP_SIZE*4 mov pc, r0 * END 1. 宏定義 ModeMask SVC32ModeGotoMa
16、in DCD $MainEntry 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 1.1. 1 2 IMPORT |Image$RO$Base| IMPORT |Image$RO$Limit| IMPORT |Image$RW$Base| EQU 0 x1F EQU 0 x13 8 3 IRQ32Mode EQU 0 x12
17、 4 FIQ32Mode EQU 0 x11 5 User32Mode EQU 0 x10 6 Abort32Mode EQU 0 x17 7 Undef32Mode EQU 0 x1B 8 IRQ_BIT EQU 0 x80 9 FIQ_BIT EQU 0 x40 10 ;RomBaseAddr EQU 0 11 RamBaseAddr EQU &100 12 ;RamEndAddr EQU &20行 1 定義了 CPSR 中表示模式位的 5 位。 行 2-7 定義了 6 種處理器模式(除 system 模式)對(duì)應(yīng)的 CPSR 位。 行 8-7 定義了 CPSR 中 FIQ
18、與 IRQ 置位。 行10、12為注釋?zhuān)?11定義了一個(gè)宏, &的意義等于 DCD 偽指令,其分配一個(gè)字的內(nèi)存, 并用 100 初始化該字的內(nèi)存, 并使用 RomBaseAddr 標(biāo)志這段內(nèi)存的實(shí)際地址。 1.1.2. 宏定義 13 GBLS MainEntry 14 MainEntry SETS main 15 IMPORT $MainEntry 行 13-15 聲明了一個(gè)字符串變量 MainEntry, 并將其設(shè)置為 ”main ”,并引入外部符號(hào) ”main ”。 1.1.3. 判斷是否是 thumb 指令 18 GBLL THUMBCODE 19 CONFIG = 16 20
19、 THUMBCODE SETL TRUE 21 CODE32 22 | 23 THUMBCODE SETL FALSE 24 25 26 THUMBCODE 27 CODE32 ;for start-up code for Thumb mode 28 行 18 聲明了邏輯變量 THUMBCODE 行 19-24 執(zhí)行了一個(gè) IF ELSE ENDIF 指令, CONFIG 變量是 1 中第 88 頁(yè)說(shuō)明的匯編器域定 定義變量,如果其為 32 則說(shuō)明本文件采用 ARM 匯編器,相應(yīng)地把 THUMBCODE 設(shè)置為 FALSE ,若為 16 則是使用 thumb 匯編器,相應(yīng)地把 THUMBCOD
20、E 設(shè)置為 TRUE。 行 26-28 ,強(qiáng)制執(zhí)行 32 位的 ARM 指令,感覺(jué)很奇怪,應(yīng)該是用 CODE16 命令才對(duì)。 9 1.1.4. 定義新程序、引入新符號(hào) 31 AREA SelfBoot, CODE, READONL Y 32 33 IMPORT UDF_INS_VECTOR 34 IMPORT SWI_SVC_VECTOR 35 IMPORT INS_ABT_VECTOR 36 IMPORT DAT_ABT_VECTOR 37 IMPORT IRQ_SVC_VECTOR 38 IMPORT FIQ_SVC_VECTOR 行 31 定義了一個(gè)新的程序段 SelfBoot 。 行
21、33-38 引入了一系列的符號(hào),這些符號(hào)在 sysinit.s 中定義并導(dǎo)出。 1.1.5. 定義新程序、引入新符號(hào) 40 ENTRY 41 IF :DEF: |ads$version| 42 ELSE 43 EXPORT _main 44 _main 45 ENDIF 行 40 首先聲明了程序的入口 根據(jù)1中第89頁(yè)的說(shuō)明,行41-45判斷程序是給 ADS還是SDT執(zhí)行的,如果是如果是SDT , ,則導(dǎo)出 _main 符號(hào),并開(kāi)始定義 _main 函數(shù)的開(kāi)始。 1.1.6. 定義系統(tǒng)異常向量表 46 ResetEntry 47 b SYS_RST_HANDLER 48 b UDF_INS_H
22、ANDLER 49 b SWI_SVC_HANDLER 50 b INS_ABT_HANDLER 51 b DAT_ABT_HANDLER 52 b . 53 b IRQ_SVC_HANDLER 54 b FIQ_SVC_HANDLER 行 46-54 定義了系統(tǒng)異常處理向量表,并在 vector.o 首次執(zhí)行時(shí)首先執(zhí)行行 47 的代碼。 1.1.7. 程序跳轉(zhuǎn)宏定義 57 MACRO 58 $Label HANDLER $Vector 59 $Label 60 sub lr, lr, #4 61 stmfd sp!, r0-r3, lr 62 ldr r0, =$Vector 63 ldr
23、pc, r0 64 Idmfd sp!, r0-r3, pcA 65 MEND 行 57-65 定義了一個(gè)有 1 個(gè)參數(shù)的宏 HANDLER ,該宏實(shí)現(xiàn)程序跳轉(zhuǎn),跳轉(zhuǎn)到 $Vector 所指 向內(nèi)存所保存的內(nèi)存地址的值,執(zhí)行完該函數(shù)后,恢復(fù)現(xiàn)場(chǎng),并返回原來(lái)的狀態(tài)。10 1.1.8. 異常處理程序定義 UDF_INS_HANDLER stmfd sp!, r0-r3, lr ldr r0, =UDF_INS_VECTOR mov lr, pc ldr pc, r0 Idmfd sp!, r0-r3, pcA SWI_SVC_HANDLER stmfd sp!, r0-r3, Ir Idr r0,
24、 =SWI_SVC_VECTOR mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA INS_ABT_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r3, Ir Idr r0, =INS_ABT_VECTOR mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA DAT_ABT_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r3, Ir Idr r0, =DAT_ABT_VECTOR mov Ir, pc Idr pc, r0 Idmfd sp!, r0-r3, pcA
25、 IRQ_SVC_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r12, Ir mrs r0, spsr stmfd sp!, r0 Idr r0, =IRQ_SVC_VECTOR Idr pc, r0 FIQ_SVC_HANDLER sub Ir, Ir, #4 stmfd sp!, r0-r12, Ir mrs r0, spsr stmfd sp!, r0 Idr r0, =IRQ_SVC_VECTOR Idr pc, r0 * J SYS_RST_HANDLER67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
26、 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 11 mrs r0, cpsr ;enter svc mode and disable irq,fiq bic r0, r0, #ModeMask orr r0, r0, #(SVC32Mode :OR: IRQ_BIT :OR: FIQ_BIT) msr cpsr_c, r0 IMPORT InitSystem bl InitSystem adr r0, ResetEntry mov r3, #(RamBaseAdd
27、r16) ldr r1, BaseOfROM ldr r2, TopOfROM add r1, r1, r3 add r2, r2, r3 0 ldmia r0!, r4-r11 stmia r1!, r4-r11 cmp r1, r2 bcc %B0 sub r1, r1, r2 sub r0, r0, r1 ldr r1, BaseOfBSS ldr r2, BaseOfZero add r1, r1, r3 add r2, r2, r3 1 cmp r1, r2 ldrccr4, r0, #4 strcc r4, r1, #4 bcc %B1 mov r0, #0 ldr r2, End
28、OfBSS add r2, r2, r3 3 cmp r1, r2 strcc r0, r1, #4 bcc %B3 IMPORT RemapMemory adr r0, ResetEntry ldr r1, =RemapMemory110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 12 15ld
29、r r2, BaseOfROM 155 sub r2, r1, r2 156 add r0, r0, r2 157 add r1, r2, r3 158 mov r2, #32 159 0 160 ldr r3, r0, #4 161 str r3, r1, #4 162 subs r2, r2, #1 163 bne %B0 164 165 ldr lr, GotoMain 16b RemapMemory 行 67-166 定義了 7 種模式異常的處理函數(shù) 具體地: UDF_INS_HANDLER 執(zhí)行 UDF_INS_VECTOR 內(nèi)存所保存的指令后, 返回到異常發(fā)生之前 的狀態(tài)。 類(lèi)似,
30、 SWI_SVC_HANDLER, INS_ABT_HANDLER, DA T_ABT_HANDLER, IRQ_SVC_HANDLER, FIQ_SVC_HANDLER 也執(zhí)行類(lèi)似的操作, 執(zhí)行 XX_XX_VECTOR 內(nèi)存所保存的指令, 然后 返回到異常發(fā)生之前的狀態(tài)。 SYS_RST_HANDLER 異常處理程序與其它異常處理程序有很大不同, 行 110-113 使得處理器迚入 SVC 模式,并且禁止 FIQ 與 IRQ 。 行 115-116 使得程序跳轉(zhuǎn)到 sysinit.s 中定義的 InitSystem 函數(shù)中執(zhí)行, 并在執(zhí)行結(jié)束后返回。 InitSystem 函數(shù)的作用是迚行
31、內(nèi)存、 堆棧、 LED 端口、 串口、定時(shí)器以及中斷的初始化工作, 具體講解請(qǐng)參見(jiàn) sysinit.s 中的分析( 1.2.12)。 行 118 將異常向量表 ResetEntry 的地址保存入 r0 。 行 119-128 將 bootloader 的 RO 段拷貝入內(nèi)存。 行 130-140 將 bootloader 的 RW 段拷貝入內(nèi)存。 行 142-148 將內(nèi)存中的 ZI 段初始化為 0 。 行 150-163 將 RemapMemory 函數(shù)拷貝入內(nèi)存中。 行 165 將返回地址迚行設(shè)置。 行 166 執(zhí)行 RemapMemory 函數(shù)(在 sysinit.s 中定義) , Re
32、mapMemory 函數(shù)主要是設(shè)置 ROMCON0 、ROMCON1 和 DRAMCON0 、 DRAMCON1 ;并將 IRQ_SERVICE 函數(shù)的地址 存入一個(gè)內(nèi)存中的數(shù)組中。 RemapMemory 函數(shù)執(zhí)行完后將跳入 bios.c 中定義的 main 函數(shù)。 1.1.9. 聲明 C 主函數(shù)程序入口13 168 GotoMain DCD $MainEntry 行 168 聲明了 GotoMain 標(biāo)號(hào),其被定義為變量 $MainEntry 的值“ main 1.1.10. 定義 vector.s 中需要用到的連接器變量 根據(jù)文獻(xiàn) 2 第 56-57 頁(yè)中的說(shuō)明,行 170-181 引入
33、了由連接器預(yù)定義的變量值。 * 171 IMPORT |Image$RO$Base| 170 ; ROM code start 172 IMPORT |Image$RO$Limit| ; RAM data starts after ROM program 14 173 IMPORT |Image$RW$Base| ; Pre-initialised variables 174 IMPORT |Image$ZI$Base| ; uninitialised variables 175 IMPORT |Image$ZI$Limit| ; End of variable RAM space 176 1
34、77 BaseOfROM DCD |Image$RO$Base| 178 TopOfROM DCD |Image$RO$Limit| 179 BaseOfBSS DCD |Image$RW$Base| 180 BaseOfZero DCD |Image$ZI$Base| 181 EndOfBSS DCD |Image$ZI$Limit| 1.1.11. 定義從 FLASH 啟動(dòng)程序的函數(shù) 184 TIP_SIZE EQU 256 185 186 IMPORT ResetMemSet 187 EXPORT trans _to_boot 188 trans_to_boot 189 mov lr,
35、r1 ; a2 = r1 190 ldr r1, =ResetMemSet 191 ldr r2, BaseOfROM 192 sub r2, r1, r2 193 add r0, r0, r2 ; a1 = r0 194 mov r2, #TIP_SIZE 195 0 196 ldr r3, r1, #4 197 str r3, r0, #4 198 subs r2, r2, #1 199 bne %B0 200 201 sub r0, r0, #TIP_SIZE*4 202 mov pc, r0 行184-202定義了從FLASH固定地址BIOS_LOAD = 0 x1000啟動(dòng)程序的函數(shù)
36、,似乎是重新 啟動(dòng)的程序。 1.2. sysinit.s 代碼分析 首先列出 sysinit.s 的源代碼 1 INCLUDE s3c4510.s 15 RomBaseAddr EQU 0 RomEndAddr EQU &20 RamBaseAddr EQU &100 RamEndAddr EQU &20 AREA text, CODE, READONL Y SFR_BASE EQU 0 x3ff ;0 x3ff0000 SRAM_BASE EQU 0 x3f8 ;0 x3f80000 ;EXPORT InitMemory InitMemory ldr r0, =SYS
37、CFG ldr r1, =SDRAM_ITF :OR: SFR_BASE16 :OR: SRAM_BASE6 :OR CACHE_ALL OR: CACHE_ EN str r1, r0 ldr r0, =CLKCON ldr r1, =0 str r1, r0 ldr r0, =EXTACON0 ldr r1, =0 x0fff0fff str r1, r0 ldr r0, =EXTACON1 ldr r1, =0 x0fff0fff str r1, r0 ldr r0, =EXTDBWTH ldr r1, =0 xffff556 str r1, r0 adr r0, MemCfgPara
38、ldmia r0, r1-r11 ldr r0, =ROMCON0 stmia r0, r1-r11 mov pc, r14 MemCfgPara DCD RomBaseAddr10 :OR RomEndAddr20 :OR: &60 ;&10840060 DCD &108420602 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 16 DCD &10842060 DCD &am
39、p;10842060 DCD &10842060 DCD &10842060 DCD RamBaseAddr10 :OR: RamEndAddr20 :OR: &398 ;&10000398 DCD &10040398 DCD &10040398 DCD &10040398 DCD &ce2983fd EXPORT RemapMemory RemapMemory adr r0, RemapMemPara ldmia r0, r1-r11 ldr r0, =ROMCON0 stmia r0, r1-r11 nop nop ldr r
40、0, =IRQ_SVC_VECTOR ldr r1, =IRQ_SERVICE ;IRQ_SVC_VECTOR in ram, so set it after remap str r1, r0 mov pc, r14 RemapMemPara DCD &12040060 DCD &10842060 DCD &10842060 DCD &10842060 DCD &10842060 DCD &10842060 DCD &10000398 DCD &10040398 DCD &10040398 DCD &1004039
41、8 DCD &ce2983fd EXPORT ResetMemSet ResetMemSet adr r0, ResetMemPara 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 17 ldmia r0, r1-r11 ldr r0, =ROMCON018 stmia nop nop r0, r1-r11 mov pc, r14 ResetMemPara DCD &2000
42、0060 DCD &00000060 DCD &00000060 DCD &00000060 DCD &00000060 DCD &00000060 DCD &00000000 DCD &00000000 DCD &00000000 DCD &00000000 DCD &000083f * J InitInterrupt ldr r0, =INTMSK ldr r1, =0 x3fffff str r1, r0 ;disable all interrupt mov pc, r14 * J InitPort ldr0
43、, =IOPMOD ldr r1, =1 str r1, r0 ;all input but p0 output ldr r0, =IOPCON ldr r1, =0 str r1, r0 ;disable XIRQ 0-3, dma req,ack, timer 0,1 output ldr r0, =IOPDA TA ldr r1, r0 ;read input data mov pc, r14 * 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 11
44、3 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 19 J InitTimer20 ldr r0, =TMOD ldr r1, =0 str r1, r0 ;disable timer 0,1 mov pc, r14 * UART_DIV_CNT0 EQU 26 UART_DIV_CNT1 EQU 0 InitUart ldr r0, =ULCON0 ldr r1, =DATA8b :OR: STOPb1 :OR PARITY_NO str r1, r0 ldr0, =UCON0 ldr r1, =RX_STA
45、T_INT|9 str r1, r0 ldr r0, =UBRDIV0 ldr r1, =UART_DIV_CNT04|UART_DIV_CNT1 str1, r0 ;if UART_DIV_CNT1=xxx0 baud rate MCLK/(UART_DIV_CNT0+1)/16 ;if UART_DIV_CNT1=xxx1 baud rate MCLK/(UART_DIV_CNT0+1)/16/16 ldr r0, =URXBUF0 ldr r1, r0 ;read rx data ldr r0, =ULCON1 ldr r1, =DA TA8b :OR: STOPb1 :OR PARIT
46、Y_NO str r1, r0 ldr r0, =UCON1 ldr r1, =RX_STA T_INT|9 str r1, r0 ldr r0, =UBRDIV1 ldr r1, =UART_DIV_CNT04|UART_DIV_CNT1 str r1, r0 ;if UART_DIV_CNT1=xxx0 baud rate MCLK/(UART_DIV_CNT0+1)/16 ;if UART_DIV_CNT1=xxx1 baud rate MCLK/(UART_DIV_CNT0+1)/16/16 ldr r0, =URXBUF1 ldr r1, r0 ;read rx data130 13
47、1 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 21 mov pc, r14 * J InitStack mrs r0, cpsr bic r0, r0, #PSR_MODE_MASK orr r1, r0, #PSR_UNDEF_MODE|NO_INT msr cpsr_cxsf, r1 ;UndefMode ldr sp,=Undef
48、Stack orr r1, r0, #PSR_ABORT_MODE|NO_INT msr cpsr_cxsf, r1 ;AbortMode ldr sp, =AbortStack orr r1, r0, #PSR_IRQ_MODE|NO_INT msr cpsr_cxsf, r1 ;IRQMode ldr sp, =IRQStack orr r1, r0, #PSR_FIQ_MODE|NO_INT msr cpsr_cxsf, r1 ;FIQMode ldr sp, =FIQStack orr r1, r0, #PSR_SVC_MODE|NO_INT msr cpsr_cxsf, r1 ;SV
49、CMode ldr sp, =SVCStack mov pc, r14 * J EXPORT InitSystem InitSystem mov r12, r14 bl InitMemory bl InitStack bl InitPort bl InitUart bl InitTimer bl InitInterrupt ; ldr r0, =0 x11000000 ;Cache Flush ; mov r1, #0 ; mov r2, #256 ;1170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
50、 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 22 str r1, r0, #4 subs r2, r2, #1 bne %B1 mov pc, r12 * J IRQ_SERVICE ;using I_ISPR register. IMPORT pIrqStart IMPORT pIrqFinish IMPORT pIrqHandler ;nop ;ldr r0, =TMOD ;ldr r1, r0 ;and r1, r1, #&
51、amp;37 ;str r1, r0 ldr r4, =INTOFFSET ldr r4, r4 mov r1, r4, lsr #2 mov r0, #1 mov r0, r0, lsl r1 ldr r1, =INTPND str r0, r1 ;clear interrupt pending bit ldr r1, =pIrqStart ldr r1, r1 cmp r1, #0 movne lr, pc ; .+8 movne pc, r1 ldr r1, =pIrqHandler ldr r1, r1 cmp r1, #0 movne lr, pc movne pc, r1 ldr
52、r1, =pIrqFinish ldr r1, r1 cmp r1, #0 movne lr, pc ; .+8 movne pc, r1 cmp r0, #0 movne lr, pc movne pc, r0214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 23 258 259 ldmfd s
53、p!, r0 ;? IRQ ? 260 msr spsr_cxsf, r0 261 Idmfd sp!, r0-r12, pcA 262 ;* 263 AREA HiVector, DATA, READWRITE 264 265 _RAM_END_ADDR EQU 0 x01000000 266 267 A (_RAM_END_ADDR-0 x600) # 256 ;xxxxxa00 # 256 ;xxxxxb00 # 256 ;xxxxxc00 # 256 ;xxxxxd00 256 ;xxxxxe00 0 ;xxxxxf00 274 275 276 MAP (_RAM_END_ADDR-0
54、 x100) 277 SYS_RST_VECTOR # 4 278 UDF_INS_VECTOR # 4 279 SWI_SVC_VECTOR # 4 280 INS_ABT_VECTOR # 4 281 DAT_ABT_VECTOR # 4 282 RESERVED_VECTOR # 4 283 IRQ_SVC_VECTOR # 4 284 FIQ_SVC_VECTOR # 4 285 286 EXPORT SYS_RST_VECTOR 287 EXPORT UDF_INS_VECTOR 288 EXPORT SWI_SVC_VECTOR 289 EXPORT INS_ABT_VECTOR
55、290 EXPORT DA T_ABT_VECTOR 291 EXPORT RESERVED_VECTOR 292 EXPORT IRQ_SVC_VECTOR 293 EXPORT FIQ_SVC_VECTOR 294 END 1.2.1.引入 S3C4510 相關(guān)系統(tǒng)配置寄存器的地址 1 INCLUDE s3c4510.s 引入 s3c4510.s 文件后, sysinit.s 就包含了很多與處理器相關(guān)的配置寄存器的地址, 以在后續(xù)的配置程序中方便引用。 1.2.2. 定義用于配置 ROM 和 RAM 勺宏 3 RomBaseAddr EQU 0 4 RomEndAddr EQU &
56、20 268 UserStack 269 SVCStack 270 UndefStack 271 AbortStack 272 IRQStack # 273 FIQStack # 從而可 24 5 RamBaseAddr EQU &100 6 RamEndAddr EQU &200 行 3-6 定義的這些宏將用于初始化 MemCfgPara 內(nèi)存表,用于初始化 ROMCON0 和 DRAMCON0 配置寄存器。 123. 定義用于配置 SYSCF 的宏 8 AREA text, CODE, READONL Y 9 9 SFR_BASE EQU 0 x3ff ;0 x3ff000
57、0 10 SRAM_BASE EQU 0 x3f8 ;0 x3f80000 行8定義一段代碼text,該段將放入 RO段。 行 10-11 定義了 2 個(gè)宏,用于對(duì) SYSCFG 寄存器迚行初始化。 1.2.4. 定義用于初始化內(nèi)存的函數(shù) InitMemory 14 InitMemory 15 ldr r0, =SYSCFG 16 ldr r1, =SDRAM_ITF :OR: SFR_BASE16 :OR: SRAM_BASE6 :OR: CACHE_ALL :OR: CACHE_EN 17 str r1, r0 18 18 ldr r0, =CLKCON 19 ldr r1, =0 20
58、str r1, r0 22 21 ldr r0, =EXTACON0 22 ldr r1, =0 x0fff0fff 23 str r1, r0 24 ldr r0, =EXTACON1 25 ldr r1, =0 x0fff0fff 26 str r1, r0 29 27 ldr r0, =EXTDBWTH 28 ldr r1, =0 xffff556 29 str r1, r0 33 30 adr r0, MemCfgPara 31 ldmia r0, r1-r11 32 ldr r0, =ROMCON0 33 stmia r0, r1-r11 38 34 mov pc, r14 40 35 MemCfgPara 36 DCD RomBaseAddr10 :OR RomEndAddr20 :OR: &60 ;&10840060 37 DCD &1084206025 44 DCD &10842060 45 DCD &10842060 46 DCD &10842060 47 DCD &10842060 48 DCD RamBaseAddr10 :OR: RamEndAddr20 :OR: &398 ;&1000039
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度離職員工保密協(xié)議及競(jìng)業(yè)限制合同簽訂流程規(guī)范
- 二零二五年度知識(shí)產(chǎn)權(quán)保護(hù)合伙人合作協(xié)議范本
- 法律實(shí)務(wù)案例分析題及法律理論應(yīng)用題卷
- 共享平臺(tái)合作協(xié)議知識(shí)產(chǎn)權(quán)合作開(kāi)發(fā)協(xié)議
- 高峰會(huì)議交流與合作備忘錄
- 油漆勞務(wù)合同油漆工用工合同
- 基于大數(shù)據(jù)的農(nóng)業(yè)現(xiàn)代化種植管理系統(tǒng)開(kāi)發(fā)實(shí)踐
- 企業(yè)形象策劃及活動(dòng)推廣合作協(xié)議
- 精紡織品采購(gòu)合同
- 高一英語(yǔ)動(dòng)詞時(shí)態(tài)對(duì)照分析教案
- 2025屆高考化學(xué)二輪復(fù)習(xí):晶胞的相關(guān)性質(zhì)及計(jì)算(含解析)
- 2024年沙洲職業(yè)工學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫(kù)含答案解析
- 2024年山東鋁業(yè)職業(yè)學(xué)院高職單招數(shù)學(xué)歷年參考題庫(kù)含答案解析
- 2024年山東勞動(dòng)職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 融合智慧數(shù)據(jù)的圖書(shū)館數(shù)智服務(wù)平臺(tái)研究
- 員工外宿免責(zé)協(xié)議書(shū)(2篇)
- IT科技產(chǎn)業(yè)云計(jì)算服務(wù)平臺(tái)開(kāi)發(fā)方案
- 2025年中國(guó)航天科工招聘筆試參考題庫(kù)含答案解析
- 血透室停電停水應(yīng)急預(yù)案
- 4《公民的基本權(quán)利和義務(wù)》(第2課時(shí))教學(xué)實(shí)錄-2024-2025學(xué)年道德與法治六年級(jí)上冊(cè)統(tǒng)編版
- 人教版小學(xué)數(shù)學(xué)三年級(jí)下冊(cè)第一單元《位置與方向(一)》單元測(cè)試
評(píng)論
0/150
提交評(píng)論