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

正文內(nèi)容

arm處理器系統(tǒng)初始化過程(參考版)

2025-07-02 08:42本頁面
  

【正文】 ldr r。bne %F1//當(dāng)按鍵0沒有被按下的時候,就跳轉(zhuǎn)啦。tst r0,0x1//這里就是測試最后一位是否為0,為0時說明是有按鍵按下了。bic r0,r0,(0x1e1)//bic是r0與(0x1e1)的反碼按位相與。ldr r1,=GPFDATldr r1,=0xffstr r1,[r0]//對GPF設(shè)置為輸入的功能ldr r0,=GPFCON就是把內(nèi)存的數(shù)據(jù)賦給這13個存儲控制器里面的。 bne %B0這段代碼的作用就是設(shè)置存儲控制器。 str r3, [r1], 4 add r2, r0, 52 0 adrl r0, SMRDATA bne WAKEUP_SLEEP//如果是的話就跳轉(zhuǎn)。ldr r0,[r1]]Fin = , FCLK = 400MHz ldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV) nop nop nop Caution: After UPLL setting, at least 7clocks delay must be inserted for setting hardware be pleted. str r1,[r0] ldr r0,=UPLLCON//對UPLL進行配置反之,如果是這個比例關(guān)系的話,就轉(zhuǎn)成快速總線模式。 mcr p15,0,r0,c1,c0,0 bic r0,r0,0xc0000000。 | mcr p15,0,r0,c1,c0,0 orr r0,r0,0xc0000000。 //如果 Fclk:Hclk不是1:1的話執(zhí)行下面 [ CLKDIV_VAL1只要通過對CLKDIVN執(zhí)行操作就可以得到相應(yīng)需要的比率了。 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6. ldr r1,=CLKDIV_VAL對于FCLK先后不是有兩次不同時鐘作為輸入,這樣就余姚一個適應(yīng)的時間,這個時間的設(shè)定就是我們這里在LOCKTIME寄存器里 面設(shè)置的常數(shù)啦。只有當(dāng)向PLLCON寄存器設(shè)置相應(yīng)的值后,PLL就會按照軟件設(shè)置的頻率運行了。這兩個PLL我們分別稱之為MPLL和UPLL。arm9有兩個鎖相環(huán)PLL,一個用于FCLK、HCLK、HCLK。這個涉及到arm9的時鐘模塊的知識。str r1,[r0]說 到這里,大家可能不太懂。具體為什么是設(shè)定這個值,你就去問問三星公司吧,我也不太懂。ldr r0,=LOCKTIME為了減少pll的lock time,調(diào)整LOCKTIME寄存器。]通過數(shù)據(jù)手冊可以發(fā)現(xiàn),當(dāng)輸出為1時,LED滅,反之亦然。 ldr r1,=0x0 str r1,[r0]//使GPB10~GPB4為輸出口,GPB3~GPB0為輸入口 ldr r0,=GPBCON 。 0xf)4)。rGPFDAT = (rGPFDAT amp。[ {FALSE} //關(guān)閉所有子中斷l(xiāng)dr r0,=INTSUBMSK //關(guān)閉所有中斷l(xiāng)dr r0,=INTMSKldr r1,=0x0 //關(guān)閉看門狗ldr r0,=WTCONldmfd sp!,{r8r9,pc}//堆棧彈出,跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序ldr r8,[r8]//中斷向量里面存儲的中斷服務(wù)程序的入口地址賦給r8ldr r8,=HandleEINT0//向量表的入口地址賦給r8ldr r9,=INTOFFSET//把中斷偏移INTOFFSET的地址裝入r9里面 //保留pc寄存器的值sub sp,sp,4arm把所有中斷都歸為一個IRQ和一個FIRQ中斷異常,我們?yōu)榱艘谰唧w的中斷,從而才可以跳到中斷對應(yīng)的中斷服務(wù)程序。 Must be 0x20.//進入powerdown模式以上8條跳轉(zhuǎn)指令,是8個異常中斷處理向量,一定要按照順序排好,據(jù)我了解,每次出現(xiàn)異常的話,是由硬件自行查表的。0x20b HandlerFIQ 。b HandlerIRQ 。 。handler for DAborthandler for PAborthandler for SWI interrupthandler for Undefined mode b ResetHandler//程序執(zhí)行的地跳跳轉(zhuǎn)指令]DCD 0x070000ea ] 。 andeq r14,r7,r0,lsl 20 [ ENTRY_BUS_WIDTH=16//如果存儲器是16位的總線寬度DCD 0xea000007 :DEF:ENTRY_BUS_WIDTH//判斷是否定義了總線寬度 EXPORT __ENTRY//導(dǎo)出__ENTRY標號__ENTRYResetEntryASSERT :DEF:ENDIAN_CHANGE//判斷模式改變是否定義過(ASSERT是偽指令,:DEF:lable判斷l(xiāng)able是否定義過了)[ ENDIAN_CHANGE AREA RdNF2SDRAM定義arm匯編程序段,段名叫init段,為只讀段這些變量是通過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的快速總線模式和同步總線模式兩個變量IMPORT MMU_SetAsyncBusModeIMPORT MMU_SetFastBusMode我們所熟知的main函數(shù)IMPORT ZI 段結(jié)束地址加1這些標號的值是通過編譯器的設(shè)定來確定的如編譯軟件中對robase 和rwbase 的設(shè)定,例如robase=0xc000000 rwbase=0xc5f0000,在這里用IMPORT 偽指令( 和c 語言的extren 一樣) 引入|Image$$RO$$Base|,|Image$$RO$$Limit|...等比較古怪的變量是編譯器生成的。 RW 段結(jié)束地址加1|Image$$ZI$$Base| 。 RO 段結(jié)束地址加1|Image$$RW$$Base| 。編譯器使用下列段來記錄各段的起始地址和結(jié)束地址|Image$$RO$$Base| 。一個arm程序是由R0,RW,ZI三個段組成。有表的話實時性比較好。 sp!,{r0,pc}//最后把堆棧中的中斷程序入口地址彈給pc寄存器,這樣就可以執(zhí)行相應(yīng)的中斷服務(wù)程序了。ldmfd r0,[sp,4]//把中斷服務(wù)程序的入口地址按入堆棧。str r0,[r0] //這兩句的功能是把中斷程序的入口地址先放在中間變量r0處。ldrMACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelMEND在宏定義下面的handlexxx HANDLER handlexxx都會展成以下的程序段,這段程序主要把中斷服務(wù)程序的入口地址傳送給pc,在程序的用34字空間來存放中斷服務(wù)程序的入口地址,每個字空間都會有一個標號,以handlerxxx開頭的。 [ THUMBCODEMOVEQ_PC_LR//這個是帶“相等”條件的子程序返回。MEND//宏定義的結(jié)束標志。 mov pc,lr//目標程序是ARM指令集,直接把lr賦給pc就可以了。 | MACRO//這個是宏定義的關(guān)鍵字 {FALSE}THUMBCODE SETL THUMBCODE//定義THUMBCODE 這個變量GBLL 聲明一個全局邏輯變量并初始化為{FALSE}不同的工作狀態(tài),編譯方式也不一樣。0x33ff8000 ~這 一段是統(tǒng)一arm的工作狀態(tài)和對應(yīng)的軟件編譯方式()。0x33ff6000 ~IRQStack EQU (_STACK_BASEADDRESS0x1000) 。0x33ff5800 ~UndefStack EQU (_STACK_BASEADDRESS0x2400) 。 0xc0各個異常模式的堆棧UserStack EQU (_STACK_BASEADDRESS0x3800) 。 EQU EQU 0x17UNDEFMODE EQU 0x12SVCMODE EQU 0x10FIQMODEUSERMODEBIT_SELFREFRESH EQU (122)下面是對arm處理器模式寄存器對應(yīng)的常數(shù)進行賦值,arm處理器有一個CPSR寄存器,它的后五位決定了處理器處于哪個模式下。后者是在其使用過程當(dāng)中設(shè)置的。GET 分析(轉(zhuǎn)帖) 作者 doomhaha 日期 2010817 4:26:00板子上電后就會從這里開始執(zhí)行,主要完成基本初始化,還有判斷是從nor還是nand啟動,再實現(xiàn)把程序搬到SDRAM當(dāng)中,在搬運成功后再跳到main函數(shù)里面執(zhí)行。編譯器使用下列符號來記錄各段的起始和結(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這些標號的值是根據(jù)鏈接器中設(shè)置的中robase和rwbase的設(shè)置來計算的。所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從ROM到RAM的數(shù)據(jù)傳輸和內(nèi)容清零。初始化用戶執(zhí)行環(huán)境一個ARM映像文件由RO,RW和ZI三個段組成,其中RO為代碼段,RW是已初始化的全局 變量,ZI是未初始化的全局變量。堆棧地址的定義一般如下:^(_ISR_STARTADDRESS0x1400)這是一段堆棧初始化的代碼示例:mrsr0,cpsr;讀取cpsr寄存器的值bicr0,r0,MODEMASK;把模式位清零orrr1,r0,UNDEFMODE|NOINTmsrcpsr_cxsf,r1UndefModeldrsp,=UndefStack其他模式的堆棧的初始化也類似。注意:不要切換到User模式進行User模式的堆棧設(shè)置,因為進入User模式后就不能再操作CPSR回到別的模式了,可能會對接下去的程序執(zhí)行造成影響。因此,對程序中需要用到的每一種模式都要給SP定義一個堆棧地址。因為一般系統(tǒng)運行的速度瓶頸都存在于存儲器訪問,所以存儲器訪問時序應(yīng)盡可能的快;而同時又要考慮到由此帶來的穩(wěn)定性問題。?中斷向量表的程序?qū)崿F(xiàn)通常如下表示:AREABoot,CODE,READONLYENTRYB???ResetHandlerB???UndefHandlerB???SWIHandlerB???PreAbortHandlerB???DataAbortHandlerBB???IRQHandlerB???FIQHandler其中關(guān)鍵字ENTRY是指定編譯器保留這段代碼,因為編譯器可能會認為這是一段亢余代碼而加以優(yōu)化。每當(dāng)一個中斷發(fā)生以后,ARM處理器便強制把PC指針置為向量表中對應(yīng)中斷類型的地址值。設(shè)置中斷向量表初始化存儲設(shè)備初始化堆棧初始化用戶執(zhí)行環(huán)境呼叫主應(yīng)用程序大多數(shù)BootLoader都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式:啟動加載(Bootloading)模式:BootLoader從目標機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入?;贏RM7TDMIcore的CPU在復(fù)位時通常都從地址0x00000000取它的第一條指令。盡管如此,我們?nèi)匀豢梢詫ootLoader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計與實現(xiàn)。 BootLoader是嚴重地依賴于硬件而實現(xiàn)的,特別是在嵌入式世界。 ARM工作模式和BOOTLOADER簡單地說,BootLoader就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。 調(diào)用主應(yīng)用程序 當(dāng)所有的系統(tǒng)初始化工作完成之后,就需要把程序流程轉(zhuǎn)入主應(yīng)用程序。 編譯器使用下列符號來記錄各段的起始和結(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 這些標號的值是根據(jù)鏈接器中設(shè)置的中robase和rwbase的設(shè)置來計算的。映像一開始總是存儲在 ROM/Flash里面的,其RO部分即可以在ROM/Flash里面執(zhí)行,也可以轉(zhuǎn)移到速度更快的RAM中執(zhí)行;而RW和ZI這兩部分是必須轉(zhuǎn)移到可寫 的RAM里去。 堆棧地址的定義一般如下: ^ (_ISR_STARTADDRESS0x1400) User
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1