S3C2410快速啟動的實現

2021-05-25 18:12:35 字數 3271 閱讀 9727

---嵌入式系統對功能、可靠性、成本、體積、功耗等均有嚴格要求,以arm體系結構為基礎的各種risc微處理器具有靈活的特性和強大的效能,在嵌入式系統中得到了廣泛的應用。

---s3c2410是三星公司基於arm920t設計的一款處理器,在開發基於s3c2410的系統的過程中,如何讓系統快速穩定地啟動是乙個重要問題。嵌入式系統的資源有限,程式通常都是固化在rom中執行。但在實際應用中,為提高系統的實時性,加快**的執行速度,系統啟動後程式往往要被搬移到ram中,因為ram的訪問速度要比rom快得多,這樣大大提公升系統的效能。啟動程式要完成的任務包括:硬體初始化,系統儲存系統的配置,複製二級中斷向量表。

啟動程式過程

系統硬體初始化

---系統上電或復位後,程式從位於位址0x0的reset exception vector處開始執行,因此需要在這裡放置bootloader的第一條指令:b resethandler,跳轉到標號為resethandler處進行第一階段的硬體初始化,主要內容為:關看門狗定時器,關中斷,初始化pll和時鐘,初始化儲存器系統。執行完以上程式後,系統進行堆疊和儲存器的初始化。系統堆疊初始化取決於使用者使用了哪些中斷,以及系統需要處理哪些錯誤型別。一般情況下,管理者堆疊必須設定,如果使用了irq中斷,則irq堆疊也必須設定。如果系統使用了外設,則需要設定相關的暫存器,以確定其重新整理頻率、匯流排寬度等資訊。

● 代碼段複製到ram中執行

---因為嵌入式系統的**通常都是固化在rom或者flash中,上電後開始執行。由於rom和flash的讀取速度相對較慢,這樣無疑會降低**的執行速度和系統的執行效率。為此,需要把系統的**複製到ram中執行。使用sdt鏈結器armlink產生的定位資訊,把ro的有效**和資料段到ram中。armlink將編譯後的程式鏈結成elf檔案。映像檔案內部共有三種輸出段:ro段、rw段和zi段。這三種輸出段分別包含了唯讀**及包含在**段中的少量資料、可讀寫的資料、初始化為0的資料,armlink同時還產生了這三種輸出段的起始和終止定位資訊:image$$ro$$base、image$$ro$$limit、image$$rw$$base、image$$limit、image$$linit和image$$zi$$limit。可以在程式中使用這些定位資訊。將rom中的**和資料搬移到ram中,具體程式如下。

---ldr r0, =|image$$ro$$base| /*ro段起始位址*/

---ldr r1, =|image$$ro$$limit| /*ro段結束位址*/

---ldr r2, =|image$$rw$$base|

---ldr r3, =|image$$rw$$limit|

---/*分別求出需要映像的**和資料的長度並累加,放到暫存器r1中*/

---sub r1, r1, r0

---sub r3, r3, r2

---add r1, r1, r3

---/*將需要映象的**和資料複製到ram中去*/

---0 /*標示符*/

---ldr r3, [r0], #4

---str r3, [r2], #4

---subs r1, r1, #4

---bne %b0 /*如果沒有複製完,跳轉到0標示符處的彙編語句,繼續複製,參見arm指令幫助手冊*/

建立二級中斷向量表

---在arm系統中,中斷向量表位於0x0開始的位址處,意味著無論執行什麼樣的上層軟體,一旦發生中斷,程式就得到flash儲存器中的中斷向量表裡去,降低系統的執行效率。因此在ram中建立自己的二級中斷向量表,當中斷發生後,程式直接從ram中取中斷向量進入中斷子程式。尤其是在中斷頻繁發生的系統裡,這種方法可以大大提高系統的執行效率,具體的實現**如下。

---b resethandler

---b handlerundef /*未定義模式控制代碼*/

---b handlerswi /*swi中斷控制代碼*/

---b handlerpabort /*pabort中斷控制代碼*/

---b handlerdabort /*dabort中斷控制代碼*/

---b. /*保留*/

---b handlerirq /*irq 中斷控制代碼*/

---b handlerfiq /*fiq中斷控制代碼*/

---handlerfiq handler handlefiq

---handlerirq handler handleirq

---handlerundef handler handleundef

---handlerswi handler handleswi

---handlerdabort handler handledabort

---handlerpabort handler handlepabort

---其中handler是乙個巨集,用於查詢中斷處理程式的入口位址。這些位址存放在由handle***指向的表項中,該錶定位在ram高階,基位址為_isr_startaddress。

---^ _isr_startaddress

---handlereset # 4

---handleundef # 4

---handleswi # 4

---handlepabort # 4

---handledabort # 4

---handlereserved # 4

---handleirq # 4

---handlefiq # 4

mmu的應用

---mmu是儲存器管理單元的縮寫,是用來管理虛擬記憶體系統的器件。mmu通常是cpu的一部分,本身有少量儲存空間存放從虛擬位址到實體地址的匹配表,此表稱作tlb(轉換旁置緩衝區)。所有資料請求都送往mmu,由mmu決定資料是在ram內還是在大容量外部儲存器裝置內。如果資料不在儲存空間內,mmu將產生頁面錯誤中斷。mmu儲存器系統的結構允許對儲存器系統的精細控制,大部分的控制細節由存在儲存器中的轉換表提供。這些表的入口定義了從1kb~1mb的各種儲存器區域的屬性。mmu完成的兩個主要功能是:將虛位址轉換成實體地址,控制儲存器訪問允許。mmu關掉時,虛位址直接輸出到物理位址匯流排。

---經過以上的分析可以發現,系統啟動程式主要是完成了硬體的初始化,以及克服flash或rom讀取速度慢的弱點,提高指令和資料的讀取速度,實現系統的高速執行,並且通過mmu的應用,減少ram的使用,降低系統成本。

參考文獻

1 s3c2410資料手冊

2 arm920t資料手冊

3 王京林.arm7在嵌入式應用中啟動程式

的實現

作者blog:

S3C2410讀寫Nand Flash分析

2009 01 15 16 51 321人閱讀 收藏舉報 s3c2410讀寫nand flash分析 一 結構分析 s3c2410處理器整合了8位nandflash控制器。目前市場上常見的8位nandflash有三星公司的k9f1208 k9f1g08 k9f2g08等。k9f1208 k9f1g0...

s3c2410的nand flash的驅動分析

以前都是把別人寫好的 直接拿過來用,而沒有去關心裡面到底怎麼實現的,昨晚對照著samsung 2410和k 9f1208的晶元資料把這些 讀了一遍,終於明白了對nand flash的操作一步步是怎麼實現的了。以下的這些 可以在vivi或者kernel裡面找到 對乙個nand flash的操作,總體上...

S3C2410下DMA的使用

dma優點是其進行資料傳輸時不需要cpu的干涉,可以大大提高cpu的工作效率。dma大容量資料傳輸中非常重要,比如影象資料傳輸,sd卡資料傳輸,usb資料傳輸等等。s 3c2410有四個dma,每個dma支援工作方式基本相同,但支援的source dest可能略有不同。那麼怎麼使用dma呢,s3c2...