顯示廣告
隱藏 ✕
看板 uefacool
作者 uefangsmith (唉呦!不錯哦~)
標題 [Embe] ARM啟動方式 特別是關於中斷向量的講解解決了我的迷惑
時間 2011年09月03日 Sat. PM 04:17:24


http://blog.csdn.net/fengtao612/article/details/5955173
ARM啟動方式 特別是關於中斷向量的講解解決了我的迷惑 reset vector的重定向
2010-10-20 21:39


        嚴格的說,ARM內核真正支援的啟動方式只有一個:通過操作CP15來實現對reset vector的重定向,比如:硬體重定時指向ROM區域0xffff0000,而在啟動代碼中再重定向到RAM區域0x00000000。

另一個方法更常用,就是memory remap:reset vector始終不變固定在0x00000000,ROM還是在0xffff0000,RAM還是0x00000000,重定後硬體在邏輯上複製ROM的 映射到0x00000000,原來的RAM則被覆蓋看不見了,等軟體完成初始化之後再通過寄存器設置取消memory remap,將RAM重新顯現出來。這一機制並非ARM內核本身所支持的,而是在SoC的時候人為修改memory的訪問邏輯而實現的。

對ARM內核而 言,所有4GB訪問空間全部是記憶體,不是代碼便是資料,讀寫這4GB空間並不會影響ARM自身的狀態,只是有時我們人為地將某些位址實現為寄存器(如 FIQ寄存器),當資料被寫入這些特定位址之後(中斷bit置位元),其硬體邏輯便會向ARM發送各類硬體信號(FIQ電平有效),改變ARM的運行狀態 (進入FIQ中斷模式)。

ARM和大多數CPU內核一樣,上電復位之後就立刻從某個固定位址(一般是0x00000000)開始取指執行,在這之前。硬體僅負責諸如【禁止全 局FIQ IRQ,進入SVC模式】之類的非常有限的初始化工作,軟體需要完成絕大多數的初始化工作之後才能為之後的主程序建立足夠的運行環境。直觀上我們覺得將 ROM放在ARM的復位地址處,並且在ROM中固化好我們的啟動代碼是一個好主意,但是實際情況卻不是如此,原因有以下幾個:

1. ARM人都知道,所有的異常中斷入口組成了reset vector,其第一個入口(偏移0處)就是reset位址,如果將reset vector放在ROM中,FIQ、IRQ等異常入口也跟著被放在了ROM中,如果我們希望在程式運行時改變FIQ、IRQ的中斷入口,ROM就顯得不方便了。
(雖然也有間接的辦法)

2. 有時硬體設計上code並不存放在一個NAND ROM中,可能是串列FLASH,甚至根本沒有ROM(如從UART下載)。這時,ARM重定後就不得不指向RAM區域



--
※ 作者: uefangsmith 時間: 2011-09-03 16:17:24
※ 看板: uefacool 文章推薦值: 0 目前人氣: 0 累積人氣: 36 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇