版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、PART1系統(tǒng)初始化流程如下:禁止看門狗-在中斷控制器中屏蔽所有中斷-系統(tǒng) 時鐘設置-初始化端口 -DMA 設置-cashe 和總線設置-存儲器設置, 初始化SDRAM-初始化堆棧-設置 IRQ 和 FIQ 的入口 -地址重映射。 必須由匯編來完成的任務有:異常中斷向量表的設置、IRQ 向量表(向量模式或 ISR 初始化(非向量模式、二級 ISR 地址表的定義、Flash 和 SDRAM 的設置(否則系統(tǒng) 無法加載代碼、堆棧設置和模式切換、拷貝RW 和 ZI 代碼、設置系統(tǒng)時鐘等。對于非向量模式,不使用 IRQ 中斷向量表,但二級 ISR 地址表的設置是相同的。PART2理解啟動代碼(ADS所
2、謂啟動代碼,就是處理器在啟動的時候執(zhí)行的一段代碼,主要任務是初始化處 理器模式,設置堆棧,初始化變量等等由于以上的操作均與處理器體系結構和系統(tǒng)配 置密切相關,所以一般由匯編來編寫具體到 S64,啟動代碼分成兩部分,一是與 ARM7TDMI 內核相關的部分,包括處 理器各異常向量的配置,各處理器模式的堆棧設置,如有必要,復制向量到 RAM,以便 remap之后處理器正確處理異常,初始化數(shù)據(jù)(包括 RW 與 ZI,最后跳轉到 Main.二是 與處理器外部設備相關的部分,這和廠商的聯(lián)系比較大.雖然都采用了 ARM7TDMI 的內核,但是不同的廠家 整合了不同的片上外設,需要不同的初始化,其中比較重要
3、的是初始化 WDT,初始化 各子系統(tǒng)時鐘,有必要的話,進行 remap 這一部分與一般控制器的初始化類似,因此,本 文不作重點描述.在進行分析之前,請確認如下相關概念:S64 片上 FLASH 起始于 0 x100000,共 64kB,片上 RAM 起始于 0 x200000,共 16kB.S64 復位之后,程序會從 0 開始執(zhí)行,此時 FLASH 被映射到 0 地址,因此,S64 可 以取得指令并執(zhí)行顯然,此時還是駐留在 0 x100000 地址.如果使用 remap 命令,將會 把RAM 映射到 0 地址,同樣的這時 0 地址的內容也只是 RAM 的鏡像.S64 的 FLASH 可以保證在
4、最差情況時以 30MHz 進行單周期訪問,而 RAM 可以 保證在最大速度時的單周期訪問.OK,以下開始分析啟動代碼.一,處理器異常S64 將異常向量至于 0 地址開始的幾個直接,這些是必需要處理的.由于復位向 量位于 0,也需要一條跳轉指令.具體代碼如下:RESETB SYSINIT ; ResetB UDFHANDLER ; UNDEFINEDB SWIHANDLER ; SWIB PABTHANDLER ; PREFETCH ABORTB DABTHANDLER ; DATA ABORTB.;RESERVEDB VECTORED_IRQ_HANDLERB . ; ADD FIQ CODE
5、 HERE UDFHANDLERB . SWIHANDLERB.PABTHANDLERB . DABTHANDLERB .請注意,B 指令經匯編后會替換為當前 PC 值加上一個修正值(+/-,所以這條指令 是代碼位置無關的,也就是不管這條指令是在 0 地址還是在 0 x100000 執(zhí)行,都能跳轉 到指定的位置,而 LDR PC,二??將向 PC 直接裝載一個標號的值,請注意,標號在編譯 過后將被替換為一個與 RO 相對應的值,也就是說,這樣的指令無論在哪里執(zhí)行,都只 會跳轉到一個指定的位置.下面舉一個具體的例子來說明兩者的區(qū)別:假定有如下程 序:RESETB INIT 或者 LDR PC,=
6、INITINIT其中 RESET為起始時的代碼,也就是這條代碼的偏移為 0,設 INIT 的偏移量為 offset.如果將這段程序按照 R0=0 x1000000 編譯,那么 B INIT 可理解為 ADD PC, PC, #offset,而 LDR PC,=INIT 可被理解為 MOV PC,#(RO+offset .顯然當系統(tǒng)復位時,程序 從 0 開始運行,而 0 地址有 FLASH 的副本,執(zhí)行 B INIT 將把 PC 指向位于 0 地址處 的鏡像代碼位置,也即 INIT;如果執(zhí)行 LDR PC,=INIT 將會將 PC 直接指向位于 FLASH 中的原始代碼.因此以上兩者都能正確運行
7、.下面將 RO 設置為 0 x200000,編 譯后生成代碼,還是得燒寫到 FLASH 中,也就是還是 0 x100000,系統(tǒng)復位后從 0 地址 執(zhí)行還是 FLASH 的副本,此時執(zhí)行 B INIT,將跳到副本中的 INIT 位置執(zhí)行,此處有 對應的代碼;但是如果執(zhí)行 LDRPC,=INIT,將向 PC 加載 0 x200000+offset 這將使得 PC 跳到 RAM 中,而此時由于代碼沒有復制,RAM 中的指定位置并沒有代碼,程序無 法運行.,處理器模式ARM 的處理器可工作于多種模式,不同模式有不同的堆棧,以下設置各模式及其 堆棧預定義一些參數(shù):MODUSR EQU 0 x10MOD
8、SYS EQU 0 x1FMODSVC EQU 0 x13MODABT EQU 0 x17MODUDF EQU 0 x1BMODIRQ EQU 0 x12MODFIQ EQU 0 x11IRQBIT EQU 0 x80FIQBIT EQU 0 x40RAMEND EQU 0 x00204000 ; S64 : 16KB RAMVECTSIZE EQU 0 x100 ;UsrStkSz EQU 8 ; size of USR stack SysStkSz EQU 128 ; size of SYS stackSvcStkSz EQU 8 ; size of SVC stack UdfStkSz
9、EQU 8 ; size of UDF stack AbtStkSzEQU 8 ; size of ABT stack IrqStkSz EQU 128 ; size of IRQ stack FiqStkSz EQU 16 ; sizeof FIQ stack修改這些值即可修改相應模式堆棧的尺寸以下為各模式代碼:SYSINITJMRS RO,CPSRBIC R0,R0,#0 x1FMOV R2,#RAMENDORR R1,R0,#(MODSVC :OR: IRQBIT :OR: FIQBITMSR cpsr_cxsf,R1 ; ENTER SVC MODEMOV sp,R2SUB R2,R2
10、,#SvcStkSzORR R1,R0,#(MODFIQ :OR: IRQBIT :OR: FIQBITMSR CPSR_cxsf,R1 ; ENTER FIQ MODEMOV sp,R2SUB R2,R2,#FiqStkSzORR R1,R0,#(MODIRQ :OR: IRQBIT :OR: FIQBITMSR CPSR_cxsf,R1 ; ENTER IRQ MODEMOV sp,R2SUB R2,R2,#lrqStkSzORR R1,R0,#(MODUDF :OR: IRQBIT :OR: FIQBITLDR R0,=|lmage$RO$Limit|MSR CPSR_cxsf,R1 ;
11、 ENTER UDF MODEMOV sp,R2SUB R2,R2,#UdfStkSzORR R1,RO,#(MODABT :OR: IRQBIT :OR: FIQBITMSR CPSR_cxsf,R1 ; ENTER ABT MODEMOV sp,R2SUB R2,R2,#AbtStkSz;ORR R1,R0,#(MODUSR :OR: IRQBIT :OR: FIQBIT;MSR CPSR_cxsf,R1 ; ENTER USR MODE;MOV sp,R2;SUB R2,R2,#UsrStkSzORR R1,R0,#(MODSYS :OR: IRQBIT :OR: FIQBITMSR C
12、PSR_cxsf,R1 ; ENTER SYS MODEMOV sp,R2 ;三,初始化變量編譯完成之后,連接器會生成三個基本的段,分別是 RO,RW,ZI,并會在 image 中 順序擺放.顯然,RW,ZI 在運行開始時并不位于指定的RW 位置,因此必須初始化IMPORT |Image$RW$Base|LDR R1,=|lmage$RW$Base|LDR R2,=|lmage$ZI$Base|1CMP R1,R2LDRLO R3,R0,#4STRLO R3,R1,#4BLO %B1MOV R3,#0LDR R1,=|lmage$ZI$Limit|2CMP R2,R1STRLO R3,R2,#
13、4BLO %B2四,復制異常向量由于代碼于 RAM 運行時,有明顯的速度優(yōu)勢,而且變量可以動態(tài)配置,因此可以通過 remap 將 RAM 映射到 0,使得出現(xiàn)異常時 ARM 從 RAM 中取得向量.IMPORT |lmage$RO$Base|IMPORT |lmage$RO$Limit|LDR R1,=RESET ; =|Image$RO$Base|IMPORT |lmage$RW$Limit|IMPORT |lmage$ZI$Base|IMPORT |Image$ZI$Limit|COPY_VECT_TO_RAMLDR RO,=|lmage$RO$Base|LDR R1,=SYSINITLD
14、R R2,=0 x200000 ; RAM STARTCMP R0,R1LDRLO R3,R0,#4STRLO R3,R2,#4BLO %B0這段程序將 SYSINIT 之前的代碼,也就是異常處理函數(shù),全部復制到 RAM 中, 這就意味著不能將 RW 設置為 0 x200000,這樣會使得向量被沖掉.四,在 RAM 中運行如果有必要,且代碼足夠小,可以將代碼置于 RAM 中運行,由于 RAM 中本身沒有代碼,就需要將代碼復制到 RAM 中:COPY_BEGINLDR R0,=0 x200000CMP R1,R0 ;BLO COPY_END ;ADR R0,RESETADR R2,COPY_EN
15、DSUB R0,R2,R0ADD R1,R1,R0LDR R3,=|lmage$RO$Limit|3CMP R1,R3LDRLO R4,R2,#4STRLO R4,R1,#4BLO %B3LDR PC,=COPY_ENDCOPY_END程序首先取得 RESET 的連接地址,判斷程序是否時是在 RAM 中運行,方法是與RAM 起始地址比較,如果小于,那么就跳過代碼復制.在復制代碼的時候需要注意,在這段程序結束之前的代碼沒有必要復制,因為這 些代碼都已經執(zhí)行過了,所以,先取得 COPY_END,作為復制起始地址,然后計算其相 對RESET 的偏移然后以 RO 的值加上這個偏移,就是復制目的地的起始
16、地址,然后 開始復制五,開始主程序以上步驟完成,就可以跳轉到 main 運行IMPORT Mai nLDR PC,=Ma inB .六,器件初始化主程序首先要進行器件的初始化,對 S64 而言,應該先初始化 WDT,因為默認情 況下,WDT 是打開的,然后是各設備的時鐘分配,最后應該 remap.以上是必要的啟動步驟,實際應用中可以根據(jù)具體情況添加一些代碼PART3ARM 啟動程序分析字體:小中大|打印發(fā)布:2007-7-17 11:05 作者:網(wǎng)絡轉載來源:網(wǎng)絡查看:4 次ARM 啟動程序分析TIMER1 用來觸發(fā)和 IRQ 中斷代碼在 FLASH 中運行這個例子有一下幾個文件:1. 中斷向
17、量表(ivt.s2. 匯編啟動代碼(init.s3. C 主函數(shù)文件中斷向量表;代碼必須鏈接在地址 0X0。這里提供了 ARM 內核的中斷向量;匯編指令-;- AREAIVTCODE ;新代碼段CODE32 ; ARM 指令IMPORT start ;在這段中沒有定義En try ;定義程序進入點;- LDRPC-=startLDR PC, Un defi ned_AddrLDR PC,_AddrLDR PC, Prefetch_AddrLDR PC, Abort_Addr;在地址 0 x14 用戶應該插入一個標記(校驗和.;此標記讓引導程序決定是否在 Flash 中有有效的用戶代碼,目前大多
18、數(shù) FLASH 編程工具(debuggers and ISP utility;有這個內置的功能,因此用戶不用考慮這個問題.假如開發(fā)工具沒有提供這種 功能,那么這個值必須自己計算,并把計算得到的值寫到地址 0 x14.計算校驗和的細 節(jié)可以參考 LPC2104/5/6 用戶指南的 FLASH 編程章節(jié).DCD .LDR PC, PC, #-)xFFOLDR PC, FIQ_AddrUn defi ned_Addr DCD Undefin ed_Ha ndlerPrefetch_Addr DCD Prefetch_HandlerAbort_Addr DCD Abort_Ha ndlerFIQ_Ad
19、dr DCD FIQ_Ha ndler;-;異常處理JUn defi ned_Ha ndlerB Un defi ned_Ha ndlerB_Ha ndlerPrefetch_Ha ndlerB Prefetch_Ha ndlerAbort_Ha ndlerB Abort_Ha ndlerFIQ_Ha ndlerB FIQ_Ha ndlerEND系統(tǒng)復位后,第一條要執(zhí)行的指令是:LDR PC,=start這條指令將跳轉到匯編的起始代碼(startup 他將中斷使能,為 IRQ 和管理模式設置堆棧;比較重要的中斷向量是 IRQ 中斷.LDR PC, PC, #-)xFFO;這條指令將從中斷向量控
20、制控制器(VIC 中的地址寄存器(OxFFFF F030 導入PC,并執(zhí)行.;所有剩余的向量都有中斷句柄啟動程序匯編代碼;-匚編語;- ARE-asm_code, CODE ;新代碼段CODE32 ; ARM 指令IMPORT _main ; main 在這個程序段中沒有定義EXPORT start ;全局變量;參考 ivt.s 文件start;中斷使能MSR cpsr_c,#0 x13 ;在管理模式時設定堆棧指針 SPLDR SP,=0 x4 設置 IRQ 模式.設置 SP_irq 然后返回管理模式MRS R0, CPSRBIC R1, R0,#0 x1FORR R1, R1,#0 x12M
21、SR cpsr_c, R1 進入中斷模式LDR SP, =0 x4MSR cpsr_c, R0 返回管理模式;跳轉到 c 程序LDR lr, =_mai nMOV pc, lrEND這段代碼在與 ivt.s 鏈接.假如設置堆棧指針失敗將導致數(shù)據(jù)中止異常,因此堆棧 的初始化應該在跳轉到 c mai n(函數(shù)之前。C 代碼Timer1 的寄存器這么配置,當匹配的時候將中斷內核,并且復位。 Timer1 運行在 60MHz.這段代碼在一個評估板上運行,其外部始終使用 10 MHz 晶體,并且內部 PLL 設定好。時鐘操作的具體細節(jié)請參考 LPC2106/5/4 中的相關章節(jié)。中斷服務程 序為空,用戶
22、可以根據(jù)需要添加。在 IRQHandler(函數(shù)中可以點亮一些 LED s 或觸發(fā)一些引腳.rq 關鍵字編譯器用來定義 IRQHandler (函數(shù)作為 IRQ 中斷服務程序C main 函數(shù)在 init.s 文件后執(zhí)行。LDR Ir, =_mai nMOV pc, IrC 代碼如下:*IRQHa ndler(void;void feed(void;void In itialize(void;*#in clude“LPC210 x.h ”函數(shù)定義*/ _irq void頭文件MAIN/*系統(tǒng)初始化*/In itialize(;/*啟動時鐘*/T1_TCR=0 x1;while(1/*In itialize(/*初始化 PLL 10MHzX6=60MHz*/*設置乘除數(shù)值*/PLLCFG=0 x25;feed(;/* 使能 PLL */PLLCON=0 x1;feed(;/*等待 PLL 鎖定設定的頻率*/while(!(PLLSTAT & PLOCK初始化*/ void/*連接 PLL 作為時鐘源*/PLLCON=Ox3;feed(;/*使能存儲器加速模塊 MAM,設定訪問 FLASH 的時鐘*/M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版委托貸款合同(購車貸款)3篇
- 2025版民間借貸合同文本四種借款人法律義務解讀4篇
- 商鋪售后返租合同風險評估與法律建議(2025年版)2篇
- 2025年度龍山區(qū)中醫(yī)院醫(yī)療廢物處理技術改造合同4篇
- 二零二五年度實木復合地板品牌代理銷售合同4篇
- 2025年物業(yè)管理責任服務協(xié)議書(含物業(yè)合同續(xù)簽)3篇
- 體育場館體育賽事現(xiàn)場安全保衛(wèi)措施與體系建設改進考核試卷
- 體育用品行業(yè)創(chuàng)新商業(yè)模式探索考核試卷
- 2025年農村地房產租賃土地租賃協(xié)議
- 2025年度木材加工與木工安裝服務承包合同4篇
- 土地買賣合同參考模板
- 新能源行業(yè)市場分析報告
- 2025年天津市政建設集團招聘筆試參考題庫含答案解析
- 房地產運營管理:提升項目品質
- 自愿斷絕父子關系協(xié)議書電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補類用藥的培訓
- 北師大版高三數(shù)學選修4-6初等數(shù)論初步全冊課件【完整版】
評論
0/150
提交評論