日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]2440init.s是啟動(dòng)代碼的主文件,包括3個(gè)頭文件,option.inc,memcfg.inc,2440addr.inc。 option.inc定義了3個(gè)堆棧起始地址,總線寬度,時(shí)鐘相關(guān)參數(shù)的定義等。其中這個(gè)總線寬度將作為一個(gè)IF判斷量,決定了各Bank的位

2440init.s是啟動(dòng)代碼的主文件,包括3個(gè)頭文件,option.inc,memcfg.inc,2440addr.inc。

option.inc定義了3個(gè)堆棧起始地址,總線寬度,時(shí)鐘相關(guān)參數(shù)的定義等。其中這個(gè)總線寬度將作為一個(gè)IF判斷量,決定了各Bank的位寬設(shè)置,參見memcfg.inc文件及datasheet。

memcfg.inc是存儲(chǔ)器Bank的配置文件,定義了存儲(chǔ)器相關(guān)寄存器位的值。各bank的位寬的設(shè)置定義也是在這個(gè)文件中,注意bank0的位寬沒有相關(guān)的定義,因?yàn)樗奈粚捜Q于OM[1:0]引腳,即啟動(dòng)方式。

2440addr.inc定義了相關(guān)寄存器地址,包括存儲(chǔ)器控制寄存器,時(shí)鐘電源管理寄存器,中斷,看門狗,IO,NAND,雜項(xiàng)等相關(guān)用到的寄存器。

2440init.s是主要的啟動(dòng)代碼文件,它配置了存儲(chǔ)器,中斷服務(wù)程序,堆棧等重要內(nèi)容,并且最后開始跳到C代碼。

Init段是開始點(diǎn),跳轉(zhuǎn)到ResetHandler。然后執(zhí)行以下步驟:


禁止看門狗,禁止中斷,禁止子中斷,然后調(diào)節(jié)鎖定時(shí)間,接著設(shè)定FCLK與HCLK與PCLK的比例1:2:4,然后設(shè)置UPLL為48M,延時(shí)7個(gè)時(shí)鐘周期后設(shè)置MPLL為400M。


這時(shí)通過讀取復(fù)位狀態(tài)寄存器判斷此時(shí)的復(fù)位到底是上電復(fù)位,喚醒復(fù)位還是看門狗復(fù)位等,如果是喚醒復(fù)位則跳轉(zhuǎn)到相應(yīng)位置然后釋放SCLK,設(shè)置SDRAM,返回等。


如果不是喚醒復(fù)位則繼續(xù)向下配置SDRAM,它實(shí)際上是把一個(gè)名為SMRDATA的數(shù)據(jù)緩沖池一個(gè)一個(gè)的送入相關(guān)的控制寄存器,相關(guān)的初始化配置的定義在memcfg.inc文件中。


然后跳轉(zhuǎn)到初始化堆棧,具體以后再看。


接著讀取BWSCON寄存器的相關(guān)位判斷是從NOR還是NAND引導(dǎo)的,如果是NOR引導(dǎo),則跳轉(zhuǎn)到copy_proc_beg。


這部分主要是把RW區(qū)在ROM中的地址開始處搬移到RAM區(qū),然后接著在這后面ZI區(qū)清0。


如果是NAND引導(dǎo),則跳轉(zhuǎn)到nand_boot_beg。


先配置NAND的時(shí)序參數(shù)和相關(guān)控制功能,然后跳轉(zhuǎn)到ReadNandID等等,最后還是類似上面的完成RAM的復(fù)制,相關(guān)內(nèi)容以后再學(xué)。


接著將IsrIRQ的地址放到HandleIRQ地址中。這樣當(dāng)中斷發(fā)生后便能找到中斷服務(wù)程序。


最后跳轉(zhuǎn)到MAIN函數(shù)中,匯編部分的啟動(dòng)代碼結(jié)束。

中斷的內(nèi)容詳細(xì)解說如下:


首先,定義了一個(gè)宏,宏名為“$HandlerLabel HANDLER $HandleLabel”,這個(gè)宏展開后是一個(gè)以$HandlerLabel為入口名的代碼段,例如“比如“HandlerIRQ HANDLER HandleIRQ”,宏執(zhí)行以后將執(zhí)行$HandleLabel地址中的內(nèi)容,例如上則執(zhí)行HandleIRQ地址中的內(nèi)容。

當(dāng)中斷發(fā)生以后,ARM將從地址0x18處執(zhí)行指令,即是一條跳轉(zhuǎn)指令“bHandlerIRQ”,然后即是執(zhí)行上面的宏,宏執(zhí)行完以后則執(zhí)行 HandleIRQ地址中的內(nèi)容,而這正是入口名為IsrIRQ的代碼部分。而IsrIRQ代碼段的執(zhí)行作用是首先讀取INTOFFSET寄存器判斷中斷 源是哪個(gè),記錄其中斷服務(wù)子程序的地址偏移量,然后將這個(gè)偏移量加上基地址,即EINT0中斷服務(wù)子程序的入口地址所在的地址,最后從這個(gè)地址開始執(zhí)行。

而所有的各個(gè)中斷源觸發(fā)的中斷的中斷服務(wù)子程序的入口地址都是固定的,所以在啟動(dòng)代碼的后面有一個(gè)以_ISR_STARTADDRESS為開始的數(shù)據(jù)段,所有的地址名都是以Handle為開頭的定義,如HandleTIMER0等。

當(dāng)IsrIRQ執(zhí)行后即從固定的中斷服務(wù)子程序地址所在的地址處找到真正的中斷服務(wù)子程序的地址,并執(zhí)行之。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式裸機(jī)編程中,堆棧初始化是系統(tǒng)啟動(dòng)過程中最關(guān)鍵的環(huán)節(jié)之一。它直接決定了程序能否從異常向量表正確跳轉(zhuǎn)到main()函數(shù),并確保后續(xù)函數(shù)調(diào)用和中斷處理的可靠性。本文以ARM Cortex-M系列處理器為例,詳細(xì)解析堆棧...

關(guān)鍵字: 裸機(jī)編程 啟動(dòng)代碼

在我們使用keic51創(chuàng)建一個(gè)51單片機(jī)項(xiàng)目時(shí),會(huì)有如下圖所示的提示:keil創(chuàng)建新項(xiàng)目時(shí),提示是否添加啟動(dòng)文件一般情況下,需要選擇“是”。當(dāng)然,也可以選擇不加。那么,這個(gè)啟動(dòng)文件的作用是什么?什么情況下需要加,什么情況...

關(guān)鍵字: 51單片機(jī) 啟動(dòng)代碼

ASSERT :DEF:ENDIAN_CHANGEASSERT :DEF:ENDIAN_CHANGE[ ENDIAN_CHANGEASSERT :DEF:ENTRY_BUS_WIDTH[ ENTRY_BUS_WIDTH=...

關(guān)鍵字: ARM 偽指令 啟動(dòng)代碼 assert

1.1 啟動(dòng)代碼內(nèi)容1) 硬件初始化:最起碼的是要初始化堆棧指針。2) C語言環(huán)境 :在main函數(shù)調(diào)用之前要完成對(duì)一些變量的初始化。3) 應(yīng)用初始化: 這主要取決于你的應(yīng)用。比如設(shè)置系統(tǒng)的晶振、時(shí)鐘。1.2 圖解M3啟...

關(guān)鍵字: cortex-m3 啟動(dòng)代碼

;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************;* File Name: startup_stm32f10...

關(guān)鍵字: stm32f10x 啟動(dòng)代碼

對(duì)于keil的啟動(dòng)代碼(針對(duì)STM32F042),添加 備注 和 自己的理解;******************** (C) COPYRIGHT 2014 STMicroelectronics ************...

關(guān)鍵字: STM32 啟動(dòng)代碼

●小容量產(chǎn)品是指閃存存儲(chǔ)器容量在16K 至32K 字節(jié)之間的STM32F101xx、STM32F102xx和STM32F103xx微控制器。 對(duì)應(yīng)后綴ld● 中容量產(chǎn)品是指閃存存儲(chǔ)器容量在64K 至128K字節(jié)之間的ST...

關(guān)鍵字: STM32 啟動(dòng)代碼 字節(jié)數(shù)

由于CPU和程序啟動(dòng)代碼文件STARTUP.a51的重要性,一些8051派生的CPU產(chǎn)品要求初始化CPU來滿足設(shè)計(jì)中的相應(yīng)的硬件,因此,有時(shí)候用戶需要對(duì)STARTUP.a51進(jìn)行修改,所以進(jìn)行注釋一下:;--------...

關(guān)鍵字: C51 keil 啟動(dòng)代碼

筆者前面章節(jié)簡單介紹了s3c2416啟動(dòng)代碼的實(shí)現(xiàn)過程,啟動(dòng)代碼就是用來處理cpu體系結(jié)構(gòu)中一些底層內(nèi)容,一個(gè)功能強(qiáng)大的啟動(dòng)代碼是可以當(dāng)作bootloader(如uboot)來用的。有了啟動(dòng)代碼,用戶就可以專注于用c來作...

關(guān)鍵字: mdk s3c2416 啟動(dòng)代碼 裸機(jī)開發(fā)

啟動(dòng)代碼是處理器上電復(fù)位后最先運(yùn)行的一段代碼。主要是用來把處理器初始化到一個(gè)確定的狀態(tài),為c運(yùn)行環(huán)境作好準(zhǔn)備。如設(shè)置異常向量表,初始化系統(tǒng)時(shí)鐘,初始化外部內(nèi)存,把用戶代碼拷貝到外部內(nèi)存,初始化棧,清0全

關(guān)鍵字: s3c2416 啟動(dòng)代碼 流水燈 裸機(jī)開發(fā)
關(guān)閉