freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm處理器系統(tǒng)初始化過程(存儲(chǔ)版)

2025-07-29 08:42上一頁面

下一頁面
  

【正文】 確保這段代碼被鏈接在0地址處,并且作為整個(gè)程序的入口。 這是一段堆棧初始化的代碼示例: mrs r0,cpsr ;讀取cpsr寄存器的值 bic r0,r0,MODEMASK ;把模式位清零 orr r1,r0,UNDEFMODE|NOINT msr cpsr_cxsf,r1 。 調(diào)用主應(yīng)用程序 當(dāng)所有的系統(tǒng)初始化工作完成之后,就需要把程序流程轉(zhuǎn)入主應(yīng)用程序?;贏RM7TDMIcore的CPU在復(fù)位時(shí)通常都從地址0x00000000取它的第一條指令。每當(dāng)一個(gè)中斷發(fā)生以后,ARM處理器便強(qiáng)制把PC指針置為向量表中對應(yīng)中斷類型的地址值。堆棧地址的定義一般如下:^(_ISR_STARTADDRESS0x1400)分析(轉(zhuǎn)帖) 作者 doomhaha 日期 2010817 4:26:00板子上電后就會(huì)從這里開始執(zhí)行,主要完成基本初始化,還有判斷是從nor還是nand啟動(dòng),再實(shí)現(xiàn)把程序搬到SDRAM當(dāng)中,在搬運(yùn)成功后再跳到main函數(shù)里面執(zhí)行。BIT_SELFREFRESH EQU (122)下面是對arm處理器模式寄存器對應(yīng)的常數(shù)進(jìn)行賦值,arm處理器有一個(gè)CPSR寄存器,它的后五位決定了處理器處于哪個(gè)模式下。 0x12SVCMODE 0x17UNDEFMODE0x33ff5800 ~UndefStack EQU (_STACK_BASEADDRESS0x2400) 。MACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelstr RO 段結(jié)束地址加1|Image$$RW$$Base| 。 RdNF2SDRAM定義arm匯編程序段,段名叫init段,為只讀段 :DEF:ENTRY_BUS_WIDTH//判斷是否定義了總線寬度DCD 0xea000007 ]handler for Undefined mode 。 Must be 0x20.//進(jìn)入powerdown模式以上8條跳轉(zhuǎn)指令,是8個(gè)異常中斷處理向量,一定要按照順序排好,據(jù)我了解,每次出現(xiàn)異常的話,是由硬件自行查表的。ldr r8,[r8]//中斷向量里面存儲(chǔ)的中斷服務(wù)程序的入口地址賦給r8 //關(guān)閉看門狗ldr r0,=INTSUBMSK 0xf)4)。 ldr r1,=0x0具體為什么是設(shè)定這個(gè)值,你就去問問三星公司吧,我也不太懂。這兩個(gè)PLL我們分別稱之為MPLL和UPLL。 ldr r1,=CLKDIV_VAL //如果 Fclk:Hclk不是1:1的話執(zhí)行下面反之,如果是這個(gè)比例關(guān)系的話,就轉(zhuǎn)成快速總線模式。 nopbne WAKEUP_SLEEP//如果是的話就跳轉(zhuǎn)。 str r3, [r1], 4就是把內(nèi)存的數(shù)據(jù)賦給這13個(gè)存儲(chǔ)控制器里面的。ldr r1,=GPFDATbne %F1//當(dāng)按鍵0沒有被按下的時(shí)候,就跳轉(zhuǎn)啦。ldr r1,=0xff bne %B0這段代碼的作用就是設(shè)置存儲(chǔ)控制器。ldr r0,[r1] ldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV) Caution: After UPLL setting, at least 7clocks delay must be inserted for setting hardware be pleted. mcr p15,0,r0,c1,c0,0 orr r0,r0,0xc0000000。 [ CLKDIV_VAL1arm9有兩個(gè)鎖相環(huán)PLL,一個(gè)用于FCLK、HCLK、HCLK。ldr r0,=LOCKTIME str r1,[r0]//使GPB10~GPB4為輸出口,GPB3~GPB0為輸入口rGPFDAT = (rGPFDAT amp。 //關(guān)閉所有中斷l(xiāng)dr r8,=HandleEINT0//向量表的入口地址賦給r80x20handler for DAbort b ResetHandler//程序執(zhí)行的地跳跳轉(zhuǎn)指令] 。 EXPORT __ENTRY//導(dǎo)出__ENTRY標(biāo)號__ENTRYResetEntryASSERT :DEF:ENDIAN_CHANGE//判斷模式改變是否定義過(ASSERT是偽指令,:DEF:lable判斷l(xiāng)able是否定義過了)[ ENDIAN_CHANGE AREA這些變量是通過ADS 的工程設(shè)置里面設(shè)定的RO Base 和RW Base 設(shè)定的,最終由編譯腳本和連接程序?qū)氤绦?IMPORT |Image$$RO$$Base|IMPORT |Image$$RO$$Limit|IMPORT |Image$$RW$$Base|IMPORT |Image$$ZI$$Base|IMPORT |Image$$ZI$$Limit|引入外部變量mmu的快速總線模式和同步總線模式兩個(gè)變量IMPORT MMU_SetAsyncBusModeIMPORT MMU_SetFastBusMode我們所熟知的main函數(shù)IMPORT編譯器使用下列段來記錄各段的起始地址和結(jié)束地址|Image$$RO$$Base| 。 r0,[r0] //這兩句的功能是把中斷程序的入口地址先放在中間變量r0處。MEND在宏定義下面的handlexxx HANDLER handlexxx都會(huì)展成以下的程序段,這段程序主要把中斷服務(wù)程序的入口地址傳送給pc,在程序的用34字空間來存放中斷服務(wù)程序的入口地址,每個(gè)字空間都會(huì)有一個(gè)標(biāo)號,以handlerxxx開頭的。 [ THUMBCODEMEND//宏定義的結(jié)束標(biāo)志。 | {FALSE}THUMBCODE SETL不同的工作狀態(tài),編譯方式也不一樣。 0xc0各個(gè)異常模式的堆棧UserStack EQU (_STACK_BASEADDRESS0x3800) 。 EQU 0x10FIQMODE后者是在其使用過程當(dāng)中設(shè)置的。編譯器使用下列符號來記錄各段的起始和結(jié)束地址:|Image$$RO$$Base|:RO段起始地址|Image$$RO$$Limit|:RO段結(jié)束地址加1|Image$$RW$$Base|:RW段起始地址|Image$$RW$$Limit|:ZI段結(jié)束地址加1|Image$$ZI$$Base|:ZI段起始地址|Image$$ZI$$Limit|:ZI段結(jié)束地址加1這些標(biāo)號的值是根據(jù)鏈接器中設(shè)置的中robase和rwbase的設(shè)置來計(jì)算的。這是一段堆棧初始化的代碼示例:mrsr0,cpsr;讀取cpsr寄存器的值bicr0,r0,MODEMASK;把模式位清零orrr1,r0,UNDEFMODE|NOINTmsrcpsr_cxsf,r1UndefModeldrsp,=UndefStack其他模式的堆棧的初始化也類似。因?yàn)橐话阆到y(tǒng)運(yùn)行的速度瓶頸都存在于存儲(chǔ)器訪問,所以存儲(chǔ)器訪問時(shí)序應(yīng)盡可能的快;而同時(shí)又要考慮到由此帶來的穩(wěn)定性問題。設(shè)置中斷向量表初始化存儲(chǔ)設(shè)備初始化堆棧初始化用戶執(zhí)行環(huán)境呼叫主應(yīng)用程序盡管如此,我們?nèi)匀豢梢詫ootLoader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計(jì)與實(shí)現(xiàn)。 編譯器使用下列符號來記錄各段的起始和結(jié)束地址: |Image$$RO$$Base| :RO段起始地址 |Image$$RO$$Limit| :RO段結(jié)束地址加1 |Image$$RW$$Base| :RW段起始地址 |Image$$RW$$Limit| :ZI段結(jié)束地址加1 |Image$$ZI$$Base| :ZI段起始地址 |Image$$ZI$$Limit| :ZI段結(jié)束地址加1 這些標(biāo)號的值是根據(jù)鏈接器中設(shè)置的中robase和rwbase的設(shè)置來計(jì)算的。方法是改變 狀態(tài)寄存器內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給SP賦值。因?yàn)槊總€(gè)中斷只占據(jù)向量表中1個(gè)字的存儲(chǔ)空間,只能放置一條ARM指令,使程序跳轉(zhuǎn)到存儲(chǔ)器的其他地方,再執(zhí)行中斷處理。因此,在嵌入式世界里建立一個(gè)通用的 Boot Loader 幾乎是不可能的。第二:合理初始化堆棧。2 裝載的代碼與實(shí)踐程序不一樣 原因是由于程序沒有裝載到AT91SAM7S64的 FLASH ROM里,在調(diào)試器中顯示的是FLASH ROM中原先就有的程序。 while (1)。IMPORT B 。 B 。CPSR中的中斷禁止位 F_Bit AREA init,CODE,READONLY 因?yàn)樵贏T91SAM7S64中FLASH存儲(chǔ)器的地址是以0x0開始,而SRAM的地址是以0x00200000開始,所以我將下圖中的RO Base和RW Base分別設(shè)置成了0x0和0x00200000。 * (+RW,+ZI) { 這就是在匯編啟動(dòng)代碼的最后跳轉(zhuǎn)到__main() 而不是跳向main()的原因之一。一個(gè)典型的例子是:若用戶并未顯示完成加載映像執(zhí)行映像的數(shù)據(jù)初始化而直接B XXXX,則應(yīng)用程序中所有的全局變量并不會(huì)被預(yù)期的初始化,而所有的ZI變量也不會(huì)被預(yù)期的清零;接著_main跳進(jìn)_rt_entry,進(jìn)行STACK和HEAP等的初始化。但在初始化過程中,由于堆?;蚱渌?因造成程序出錯(cuò)。__main B改變處理器模式 因?yàn)樵诔跏蓟^程中,許多操作需要在特權(quán)模式下才能進(jìn)行(比如對CPSR的修改),所以要特別注意不能過早的進(jìn)入用戶模式。%B0 1所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從ROM到RAM的數(shù)據(jù)傳輸和內(nèi)容清零。CPSR_cxfs,R1 LDRR0,R0,MODEMASK注意:不要切換到User模式進(jìn)行User模式的堆棧設(shè) 置,因?yàn)檫M(jìn)入U(xiǎn)ser模式后就不能再操作CPSR回到別的模式了,可能會(huì)對接下去的程序執(zhí)行造成影響。 存儲(chǔ)器端口的接口時(shí)序優(yōu)化是非常重要的,這會(huì)影響到整個(gè)系統(tǒng)的性能。 1.ARM各系列的處理器上的cache設(shè)計(jì)有所不同,所以有的cache只有write through策略,有的cache只有write back策略,還有的cache是write back策略但允許一定的write through行為,因此C和B位的四種組合對這三種cache而言有不同的含義。1。 強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。以及6個(gè)32位狀態(tài)寄存器。 系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。此外,當(dāng)處理器處 于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時(shí),自動(dòng)切換到Thumb狀態(tài)。呼叫主應(yīng)用程序當(dāng)所有的系統(tǒng)初始化工作完成之后,就需要把程序流程轉(zhuǎn)入主應(yīng)用程序。這是一段堆棧初始化的代碼示例,其中只定義了三種模式的SP指針:MRS R0,CPSRBIC R0,R0,MODEMASK 安全起見,屏蔽模式位以外的其他位ORR R1,R0,IRQMODEMSR CPSR_cxfs,R1LDR SP,=UndefStackORR R1,R0,FIQMODEMSR CPSR_cxsf,R1LDR SP,=FIQStackORR R1,R0,SVCMODEMSR CPSR_cxsf,R1LDR SP,=SVCStack初始化應(yīng)用程序執(zhí)行環(huán)境如果使用分散加載描述文件調(diào)整堆棧和堆放置,則鏈接器創(chuàng)建 __user_initial_stackheap() 函數(shù),并使用鏈接器定義的符號作為這些區(qū)域的名稱。 存儲(chǔ)器地址重映射就是可以通過軟件配置來改變一塊存儲(chǔ)器物理地址的方法,是當(dāng)前許多先進(jìn)控制器所具有的功能。(3)總線寬度由于運(yùn)算能力和尋址能力的強(qiáng)大,基于ARM內(nèi)核的微處理器系統(tǒng)一般都需要外擴(kuò)展各種類型的存儲(chǔ)器。 User FLASH模式10R1, 3 LDR Memory Mapping Control EQU MEMMAP=1:中斷向量表就在片內(nèi)flash中,地址就是0x000000000x0000003c,相當(dāng)于沒有映射;因?yàn)槊總€(gè)中斷只占據(jù)向量表中1個(gè)字的存儲(chǔ)空間,只能放置一條ARM指令,使程序跳轉(zhuǎn)到存儲(chǔ)器的其他地方,再執(zhí)行中斷處理。bic r0,r0,0xC0orr r0,r0,0xC0像不可剝奪的資源,就一定要關(guān)閉中斷,讓它占有這個(gè)資源。3 根據(jù)系統(tǒng)中所用的flash和DRAM芯片容量和電氣參數(shù)設(shè)置它們的起始地址、容量、刷新頻率等;4 將固化在flash芯片中的程序搬移到DRAM內(nèi)存中;5 使能cache,使能MMU,跳轉(zhuǎn)到DRAM內(nèi)存中運(yùn)行繼續(xù)初始化,包括根據(jù)具體應(yīng)用以及系統(tǒng)中的硬件配置初始化各個(gè)功能模塊、安裝好異void Lock(void){void UnLock(void){如果在多個(gè)任務(wù)之間進(jìn)行共享數(shù)據(jù),一般是需要使用關(guān)中斷和開中斷實(shí)現(xiàn)數(shù)據(jù)同步的,其實(shí)中這種關(guān)中斷和開中斷,就是進(jìn)入臨界區(qū)和退出臨界區(qū)。 基于ARM微處理系統(tǒng)的存儲(chǔ)器一般有如下幾類:SARM,DRAM,Flah,同時(shí),即使同類存儲(chǔ)器也有訪問速度上的不同。(4)存儲(chǔ)器地址的配置有的ARM處理器不具有地址重映射的功能,可以采樣代碼搬移
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1