關(guān)于ARM處理器Remap的理解
什么是Remap ?
我的理解是:在ROM從0x0用幾句指令引導(dǎo)系統(tǒng)之后,把RAM映射到0x0就是Remap。
1.Remap的作用
當(dāng)ARM處理器上電或者Reset之后,處理器從0x0取指。因此,必須保證系統(tǒng)上電時(shí),0x0處有指令可以執(zhí)行。所以,上電的時(shí)候,0x0地址處必定是ROM或者Flash(NOR)。但是,為了加快啟動(dòng)的速度,也方便可以更改異常向量表,加快中斷響應(yīng)速度,往往把異常向量表映射到更快、更寬(32bit/16bit)的RAM中。但是異常向量表的開(kāi)始地址是由ARM架構(gòu)決定的,必須位于0x0處,因此,必須把RAM映射到0x0。
2.Remap的配置
Remap的實(shí)現(xiàn)和ARM處理器的實(shí)現(xiàn)相關(guān)。
1)如果處理器有專(zhuān)門(mén)的寄存器可以完成Remap。那么Remap是通過(guò)Remap寄存器的相應(yīng)bit置1完成的。如Atmel AT91xx
2)如果處理器沒(méi)有專(zhuān)門(mén)的寄存器,但是memory的bank控制寄存器可以用來(lái)配置bank的起始地址,那么只要把RAM的起始地址編程為0x0,也可以完成remap。如samsung s3c4510
3)如果上面兩種機(jī)制都沒(méi)有,那么Remap就不要做了。因?yàn)樘幚砥鲗?shí)現(xiàn)決定了SDRAM對(duì)應(yīng)的bank地址是不能改變的。如Samsung S3c2410.
3.Remap配置前后要做的工作
Remap前后,不同之處就是RAM的位置變了。為了達(dá)到Remap的目的,就是加快啟動(dòng)的速度和異常處理速度,一定要初始化異常堆棧和建立異常向量表的。
4.如果象2410那樣不能Remap的話怎么辦?
2410不是不能Remap嗎?為了加快啟動(dòng)速度,可以這樣做
1)使用它的NAND boot模式。為什么NAND boot會(huì)比較快,那是因?yàn)?410里面有塊小石頭——“SteppingStONe”,一塊4KB SRAM,它是映射在0x0的。啟動(dòng)程序會(huì)自動(dòng)被copy到這個(gè)石頭里面。自然異常向量的入口放到這個(gè)地方,一樣可以達(dá)到比NOR boot快的啟動(dòng)、異常響應(yīng)速度。
2)如果你對(duì)NOR Boot情有獨(dú)衷,那么你只好把你的異常向量的入口copy到SDRAM里面,實(shí)現(xiàn)所謂的High Vector