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

正文內(nèi)容

arm處理器系統(tǒng)初始化過程-資料下載頁

2025-06-29 08:42本頁面
  

【正文】 MACROMOVEQ_PC_LR//這個是帶“相等”條件的子程序返回。和上面說的類似。 [ THUMBCODE bxeq lr | moveq pc,lr ]MEND在宏定義下面的handlexxx HANDLER handlexxx都會展成以下的程序段,這段程序主要把中斷服務(wù)程序的入口地址傳送給pc,在程序的用34字空間來存放中斷服務(wù)程序的入口地址,每個字空間都會有一個標(biāo)號,以handlerxxx開頭的。MACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,4 //先預(yù)留空間,為了存儲跳轉(zhuǎn)地址。stmfd sp!,{r0} //把工作寄存器按入堆棧。ldr r0,=$HandleLabelldr r0,[r0] //這兩句的功能是把中斷程序的入口地址先放在中間變量r0處。str r0,[sp,4]//把中斷服務(wù)程序的入口地址按入堆棧。 ldmfd sp!,{r0,pc}//最后把堆棧中的中斷程序入口地址彈給pc寄存器,這樣就可以執(zhí)行相應(yīng)的中斷服務(wù)程序了。 MENDS3C2440有兩種中斷模式:一種有中斷向量表的,一種則沒有。有表的話實時性比較好。當(dāng)一個外部中斷0發(fā)生后,程序自動跳轉(zhuǎn)到地址0x20 處,0x20地址單元的指令為“l(fā)dr pc, = HandlerEINT0”,因此程序跳轉(zhuǎn)到HandlerEINT0處執(zhí)行這個宏操作,就是把外部中斷地址賦給PC。一個arm程序是由R0,RW,ZI三個段組成。其中R0為代碼段,RW是已經(jīng)初始化的全局變量,ZI是未初始化的全局變量,BOOTLOADER要將RW段復(fù)制到RAM中并將ZI段清零。編譯器使用下列段來記錄各段的起始地址和結(jié)束地址|Image$$RO$$Base| 。 RO 段起始地址|Image$$RO$$Limit| 。 RO 段結(jié)束地址加1|Image$$RW$$Base| 。 RW 段起始地址|Image$$RW$$Limit| 。 RW 段結(jié)束地址加1|Image$$ZI$$Base| 。 ZI 段起始地址|Image$$ZI$$Limit| 。 ZI 段結(jié)束地址加1這些標(biāo)號的值是通過編譯器的設(shè)定來確定的如編譯軟件中對robase 和rwbase 的設(shè)定,例如robase=0xc000000 rwbase=0xc5f0000,在這里用IMPORT 偽指令( 和c 語言的extren 一樣) 引入|Image$$RO$$Base|,|Image$$RO$$Limit|...等比較古怪的變量是編譯器生成的。RO, RW, ZI 這三個段都保存在Flash 中,但RW,ZI 在Flash 中的地址肯定不是程序運行時變量所存儲的位置,因此我們的程序在初始化時應(yīng)該把Flash 中的RW,ZI 拷貝到RAM 的對應(yīng)位置。這些變量是通過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 Main把鏡像從Nandflash拷貝到SDRAM的函數(shù)IMPORT RdNF2SDRAM定義arm匯編程序段,段名叫init段,為只讀段 AREA Init,CODE,READONLY ENTRY EXPORT __ENTRY//導(dǎo)出__ENTRY標(biāo)號__ENTRYResetEntryASSERT :DEF:ENDIAN_CHANGE//判斷模式改變是否定義過(ASSERT是偽指令,:DEF:lable判斷l(xiāng)able是否定義過了)[ ENDIAN_CHANGE ASSERT :DEF:ENTRY_BUS_WIDTH//判斷是否定義了總線寬度 [ ENTRY_BUS_WIDTH=32//如果存儲器是32位的總線寬度 b ChangeBigEndian 。DCD 0xea000007 ] [ ENTRY_BUS_WIDTH=16//如果存儲器是16位的總線寬度 andeq r14,r7,r0,lsl 20 。DCD 0x0007ea00 ] [ ENTRY_BUS_WIDTH=8//如果是存儲器是8位總線寬度 streq r0,[r0,r10,ror 1] 。DCD 0x070000ea ]|//如果總線寬度沒有定義的話,就直接跳轉(zhuǎn)到復(fù)位中斷 b ResetHandler//程序執(zhí)行的地跳跳轉(zhuǎn)指令]b HandlerUndef 。handler for Undefined modeb HandlerSWI 。handler for SWI interruptb HandlerPabort 。handler for PAbortb HandlerDabort 。handler for DAbortb . 。reservedb HandlerIRQ 。handler for IRQ interruptb HandlerFIQ 。handler for FIQ interrupt。@0x20b EnterPWDN 。 Must be @0x20.//進(jìn)入powerdown模式以上8條跳轉(zhuǎn)指令,是8個異常中斷處理向量,一定要按照順序排好,據(jù)我了解,每次出現(xiàn)異常的話,是由硬件自行查表的。HandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabort下面這段程序很重要,他是實現(xiàn)第二次查表的程序。arm把所有中斷都?xì)w為一個IRQ和一個FIRQ中斷異常,我們?yōu)榱艘谰唧w的中斷,從而才可以跳到中斷對應(yīng)的中斷服務(wù)程序。IsrIRQsub sp,sp,4 //保留pc寄存器的值stmfd sp!,{r8r9}//把r8 r9按入堆棧ldr r9,=INTOFFSET//把中斷偏移INTOFFSET的地址裝入r9里面ldr r9,[r9]//取出INTOFFSET單元里面的值給r9ldr r8,=HandleEINT0//向量表的入口地址賦給r8add r8,r8,r9,lsl 2//求出具體中斷向量的地址ldr r8,[r8]//中斷向量里面存儲的中斷服務(wù)程序的入口地址賦給r8str r8,[sp,8]//按入堆棧ldmfd sp!,{r8r9,pc}//堆棧彈出,跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序LTORG//聲明文字池板子上電后就,程序就執(zhí)行0x00處的b ResetHandlerResetHandlerldr r0,=WTCON //關(guān)閉看門狗 ldr r1,=0x0str r1,[r0]ldr r0,=INTMSKldr r1,=0xffffffff //關(guān)閉所有中斷str r1,[r0]ldr r0,=INTSUBMSKldr r1,=0x7fff //關(guān)閉所有子中斷str r1,[r0][ {FALSE} 。rGPFDAT = (rGPFDAT amp。 ~(0xf4)) | ((~data amp。 0xf)4)。 。 Led_Display ldr r0,=GPBCON ldr r1,=0x155500 str r1,[r0]//使GPB10~GPB4為輸出口,GPB3~GPB0為輸入口 ldr r0,=GPBDAT ldr r1,=0x0 str r1,[r0]//使GPB10~GPB4輸出為低電平,GPB3~GPB0輸入為低電平]通過數(shù)據(jù)手冊可以發(fā)現(xiàn),當(dāng)輸出為1時,LED滅,反之亦然。LOCKTIME是pll的lock time計數(shù)器。為了減少pll的lock time,調(diào)整LOCKTIME寄存器。ldr r0,=LOCKTIMEldr r1,=0xffffff//賦給這個值后,UPLL和MPLL的locktime的值都會設(shè)定好了。具體為什么是設(shè)定這個值,你就去問問三星公司吧,我也不太懂。str r1,[r0]說 到這里,大家可能不太懂。我就在這里細(xì)說一下吧。這個涉及到arm9的時鐘模塊的知識。arm9有個時鐘控制邏輯,它可以產(chǎn)生cpu的FCLK時鐘、 AHB總線外圍接口器件的HCLK時鐘以及APB總線外圍接口器件的PCLK時鐘。arm9有兩個鎖相環(huán)PLL,一個用于FCLK、HCLK、HCLK。 一個用于USB模塊。這兩個PLL我們分別稱之為MPLL和UPLL。在系統(tǒng)復(fù)位之后,PLL按照默認(rèn)的配置進(jìn)行操作,由于認(rèn)為它這時是一個不穩(wěn)定的狀 態(tài),所以這時用外部時鐘作為FCLK時鐘的輸出。只有當(dāng)向PLLCON寄存器設(shè)置相應(yīng)的值后,PLL就會按照軟件設(shè)置的頻率運行了。這時就換成使用PLL 的輸出作為FCLK了。對于FCLK先后不是有兩次不同時鐘作為輸入,這樣就余姚一個適應(yīng)的時間,這個時間的設(shè)定就是我們這里在LOCKTIME寄存器里 面設(shè)置的常數(shù)啦。[ PLL_ON_START//設(shè)置CLKDIVN的值在PLL鎖存時間之后有效。 ldr r0,=CLKDIVN ldr r1,=CLKDIV_VAL 。 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. str r1,[r0]可以看出是對FCLK、PCLK以及HCLK三者的比率設(shè)置。只要通過對CLKDIVN執(zhí)行操作就可以得到相應(yīng)需要的比率了。 [ CLKDIV_VAL1 //如果 Fclk:Hclk不是1:1的話執(zhí)行下面 mrc p15,0,r0,c1,c0,0 orr r0,r0,0xc0000000。R1_nF:OR:R1_iA mcr p15,0,r0,c1,c0,0 | mrc p15,0,r0,c1,c0,0 bic r0,r0,0xc0000000。R1_iA:OR:R1_nF mcr p15,0,r0,c1,c0,0 ] 這里可以看出,如果FCLK:HCLK不是1:1的關(guān)系的話,就要轉(zhuǎn)成異步總線模式。反之,如果是這個比例關(guān)系的話,就轉(zhuǎn)成快速總線模式。 ldr r0,=UPLLCON//對UPLL進(jìn)行配置 ldr r1,=((U_MDIV12)+(U_PDIV4)+U_SDIV)//這里就是非常熟悉的PMS啦,F(xiàn)in = , UCLK = 48MHz str r1,[r0] nop 。 Caution: After UPLL setting, at least 7clocks delay must be inserted for setting hardware be pleted. nop nop nop nop nop nop ldr r0,=MPLLCON//對MPLL進(jìn)行配置 ldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV) 。Fin = , FCLK = 400MHz str r1,[r0]]ldr r1,=GSTATUS2ldr r0,[r1]tst r0,0x2判斷是否是從休眠模式喚醒的,對GSTATUS2[2]的檢測就可以判斷出是否從休眠模式喚醒的。bne WAKEUP_SLEEP//如果是的話就跳轉(zhuǎn)。EXPORT StartPointAfterSleepWakeUp//定義一個外部的StartPointAfterSleepWakeUpStartPointAfterSleepWakeUp adrl r0, SMRDATA ldr r1,=BWSCON add r2, r0, 52 0 ldr r3, [r0], 4 str r3, [r1], 4 cmp r2, r0 bne %B0這段代碼的作用就是設(shè)置存儲控制器。在代碼的后面有一個SMRDATA的數(shù)據(jù)區(qū),用r0來定義它的起始地址,用r2來定義它的結(jié)束地址。,就是把內(nèi)存的數(shù)據(jù)賦給這13個存儲控制器里面的。ldr r0,=GPFCONldr r1,=0x0str r1,[r0]//對GPF設(shè)置為輸入的功能ldr r0,=GPFUPldr r1,=0xffstr r1,[r0]//禁止上拉電阻ldr r1,=GPFDATldr r0,[r1]bic r0,r0,(0x1e1)//bic是r0與(0x1e1)的反碼按位相與。tst r0,0x1//這里就是測試最后一位是否為0,為0時說明是有按鍵按下了。bne %F1//當(dāng)按鍵0沒有被按下的時候,就跳轉(zhuǎn)啦。這段代碼是檢測EINT0是否被按下了。ldr r0,=GPFCONldr
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1