国产在线中文字幕亚洲,一区视频国产精品观看,欧美日韩国产高清片,久久久久久AV无码免费网站,亚洲无码一二三四五区,日韩无码www.,sese444

您好,歡迎來到維�(kù)電子市場(chǎng)�(wǎng) 登錄 | 免費(fèi)注冊(cè)

ARM啟動(dòng)代碼
閱讀�9208�(shí)間:2011-01-19 14:56:19

  ARM啟動(dòng)代碼從系�(tǒng)上電開始接管CPU,依次需要負(fù)�(zé)初始� CPU在各種模式下的堆??臻g、設(shè)定CPU��(nèi)�映射、對(duì)系統(tǒng)的各種控�寄存�做初始化、對(duì)CPU的外�存儲(chǔ)��(jìn)行初始化、設(shè)定各外圍�(shè)備的基地址、創(chuàng)建正確的中斷向量表、為C代碼�(zhí)行創(chuàng)建ZI(零創(chuàng)�)區(qū),然后�(jìn)入到C代碼� 在C代碼中繼�(xù)�(duì)�(shí)�、RS232端口�(jìn)行初始化,然后打開系�(tǒng)中斷允許�。�(jìn)入到�(yīng)用代碼中�(zhí)�,執(zhí)行期間響�(yīng)各種不同的中斷信�(hào)并調(diào)用預(yù)先設(shè)置好的中斷服�(wù)程序處理這些中斷�

ARM體系�(jié)�(gòu)

  目前,ARM系列的通用32位RISC微處理器有ARM7、ARM9、ARM9E、ARM10等多�(gè)�(chǎn)�,這些處理器可以工作于7種模式下。除User模式以外的其它模式都叫做特權(quán)模式,除User和System以外的其�5種模式叫做異常模式。大部分�(yīng)用程序都在User模式下運(yùn)�,當(dāng)處理器處于User模式下時(shí),執(zhí)行的程序無法訪問一些被保護(hù)的系�(tǒng)資源,以利于操作系統(tǒng)控制系統(tǒng)資源的使�,也不能改變模式,否則就�(huì)�(dǎo)致一次異�。對(duì)于System模式,任何異常都不會(huì)�(dǎo)致�(jìn)入這一模式,而且它使用的寄存器和User模式下基本相同,主要是用于有訪問系統(tǒng)資源�(qǐng)求而又避免使用額外的寄存器的操作系�(tǒng)任務(wù)。在特權(quán)模式下,它們可以完全訪問系�(tǒng)資源,可以自由地改變模式。在處理特定的異常時(shí),系�(tǒng)�(jìn)入對(duì)�(yīng)的異常模式下。�5種異常模式都有各自額外的寄存�,用于避免在�(fā)生異常的�(shí)候與用戶模式下的程序�(fā)生沖��

  在任意一種處理器模式�,都使用同一�(gè)寄存器來�(biāo)�(shí)�(dāng)前處理器的工作模�,這�(gè)寄存器叫做CPSR(�(dāng)前程序狀�(tài)寄存�),它的0~4位用來表示CPU模式,而且在每一種處理器異常模式�,都有一�(gè)�(duì)�(yīng)的SPSR(緩存程序狀�(tài)寄存�),用來保存�(jìn)入異常模式前的CPSR的值。SPSR的作用就是當(dāng)CPU從異常模式退出時(shí),通過一條簡(jiǎn)單的匯編指令就能夠恢�(fù)�(jìn)入異常模式前的CPSR,該值保存在�(dāng)前異常模式的SPSR中�

堆棧初始�

  堆棧的初始化要處理的事情是為處理器的7�(gè)處理器模式分配堆??臻g。以下以FIQ模式下的堆棧�(shè)置為例說明:

  ORR r1, r0, #LOCKOUT | FIQ_MODE;把模式放在r1�,LOCKOUT用來屏蔽中斷�;

  MSR cpsr, r1 ;改變CPU的CPSR寄存器,�(jìn)入到指定的FIQ模式;

  MSR spsr, r2 ;保存前一模式;

  LDR sp, =FIQ_STACK ;把FIQ模式下的堆棧起始值賦給當(dāng)前的SP,F(xiàn)IQ_STACK是分配給FIQ模式堆棧空間(比如�1K字節(jié))的起始地址。按這種方式�(shè)置其它模式下的堆��

  DRAM的初始化根據(jù)系統(tǒng)配置信息來決�,因?yàn)橄到y(tǒng)不一定會(huì)用到DRAM,但是一定要做SDRAM的初始化。主要的處理�(nèi)容是ROM和RAM基址的設(shè)�、數(shù)�(jù)總線的寬�、SDRAM的刷新時(shí)間等�,這些可以參照S3C4510B芯片的用戶手�(cè)。特殊寄存器的設(shè)置主要是針對(duì)I/O口,比方說設(shè)定幾�(gè)I/O位用做系�(tǒng)狀�(tài)指示燈LED。寄存器的設(shè)定主要根�(jù)硬件的配置情況而定,值得注意的是由于這段啟動(dòng)代碼是燒錄到ROM中的,而中斷向量必須位于零地址,所以在存儲(chǔ)單元沒有重新映射之前ROM基址的設(shè)定應(yīng)該為零地址�

  拷貝(image)主要是為了提高運(yùn)行速度,編譯生成的映像文件代碼從ROM�(nèi)拷貝到RAM中去,而程序的�(zhí)行也就在RAM�。當(dāng)�,啟�(dòng)代碼�(duì)�(yùn)行速度的要求不是很�(yán)�,所以這�(gè)拷貝�(dòng)作可以不用做,讓代碼存放在ROM中,代碼的執(zhí)行也在ROM�,而運(yùn)行中所需要的�(shù)�(jù)在RAM中�

  �(nèi)存的初始化是為C代碼的運(yùn)行開辟內(nèi)存區(qū),代碼編譯后�(huì)分為三�(gè)區(qū):只讀區(qū)、可讀可寫區(qū)�

  零初始化區(qū)。內(nèi)存的初始化處理的�(nèi)容是:當(dāng)只讀區(qū)截止地址等于可讀可寫區(qū)基址�(shí),把零初始化區(qū)各字節(jié)清零;�(dāng)只讀區(qū)截止地址不等于可讀可寫區(qū)基址�(shí),如果可讀可寫區(qū)基址小于零初始化基址,就從只讀區(qū)截止地址處開始把�(shù)�(jù)拷貝到可讀可寫區(qū)基址處,直到到達(dá)零初始化基址,然后把零初始化區(qū)各字節(jié)清零,否則也只用把零初始化區(qū)各字節(jié)清零�

  中斷向量表是用于處理異常情況�,當(dāng)�(fā)生異常時(shí),首先要保存�(dāng)前程序的返回地址和CPSR寄存器的值,然后�(jìn)入到相應(yīng)的異常向量地址,一般來說在異常向量地址是一�(gè)跳轉(zhuǎn)指令,使程序�(jìn)入相�(yīng)的異常處理過�。由于中斷向量表要位于系�(tǒng)的零地址,當(dāng)把啟�(dòng)代碼燒錄到EEPROM中運(yùn)行時(shí)就需要把ROM的地址定義到零地址,所以程序的入口處如下:

圖例

系統(tǒng)流程�(diào)�

  系統(tǒng)重新映射�(dāng)你為了提高運(yùn)行速度而把ROM的Image拷貝到RAM�,中斷向量表就不是在零地址�,因此要重新映射存儲(chǔ)單元,把RAM的地址重新�(shè)定為零地址。映射就是把啟動(dòng)代碼從ROM(EEPROM或者Flash)拷貝到SDRAM�(yùn)行,同時(shí)再拷貝完畢以后�(jìn)行內(nèi)存的重新映射,把SDRAM映射到原來的ROM地址(0x0000)�,這樣就可以用SDRAM中的代碼寫Flash,使得程序代碼得以更�。但是需要注意的是,如果程序�(jìn)行了映射,這樣就對(duì)在線�(diào)試帶來了困難,使得在線調(diào)試不可以在RAM中�(jìn)�(如果寫入EEPROM的代碼是映射了的,則在調(diào)試器啟動(dòng)的時(shí)候必然也�(huì)�(duì)程序�(jìn)行映�,使得程序在�(diào)試器中不可以定位到原來的地方,使得�(diào)試失�)。一�(gè)折中的方法是,不�(jìn)行映�,就是說在調(diào)試的代碼中不可以使用下載,這樣就可以像普通的代碼一樣�(jìn)行調(diào)試了�

  做完這些初始化后,讓CPU切換到用戶模式下,并把堆棧指針SP指定到用戶堆棧區(qū),就可以�(jìn)入到C代碼區(qū)�(yùn)�。在C代碼中繼�(xù)�(duì)�(shí)�、RS232端口�(jìn)行初始化,然后打開系�(tǒng)中斷允許�,�(jìn)入到�(yīng)用代碼中�(zhí)�。此程序加載到處理器S3C4510B中經(jīng)過調(diào)�,CPU可以正常啟動(dòng),能�?qū)χ袛嗾?qǐng)求做出及�(shí)的響�(yīng),上層應(yīng)用的主代碼可以加載到Flash�,移植實(shí)�(shí)操作系統(tǒng)RTXC后對(duì)多任�(wù)的調(diào)度控制正常�

ARM啟動(dòng)代碼相關(guān)技�(shù)資料更多>>

維庫(kù)電子�,電子知�(shí),一查百通!

已收錄詞�168594�(gè)