當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]啟動(dòng)代碼是處理器上電復(fù)位后最先運(yùn)行的一段代碼。主要是用來(lái)把處理器初始化到一個(gè)確定的狀態(tài),為c運(yùn)行環(huán)境作好準(zhǔn)備。如設(shè)置異常向量表,初始化系統(tǒng)時(shí)鐘,初始化外部?jī)?nèi)存,把用戶(hù)代碼拷貝到外部?jī)?nèi)存,初始化棧,清0全

啟動(dòng)代碼是處理器上電復(fù)位后最先運(yùn)行的一段代碼。主要是用來(lái)把處理器初始化到一個(gè)確定的狀態(tài),為c運(yùn)行環(huán)境作好準(zhǔn)備。如設(shè)置異常向量表,初始化系統(tǒng)時(shí)鐘,初始化外部?jī)?nèi)存,把用戶(hù)代碼拷貝到外部?jī)?nèi)存,初始化棧,清0全局變量區(qū),靜態(tài)變量區(qū)等。與體系結(jié)構(gòu)相關(guān)的部分,只能用匯編來(lái)寫(xiě)。由于S3C2416/50/51目前在各個(gè)編譯器中都還沒(méi)有啟動(dòng)代碼文件,因此筆者在MDK下主要參考S3C2440的啟動(dòng)代碼來(lái)寫(xiě)一個(gè)S3C2416的啟動(dòng)代碼。

1. 啟動(dòng)代碼流程

啟動(dòng)代碼的內(nèi)容,順序等都沒(méi)有特定的要求,只要能達(dá)到初始化c運(yùn)行環(huán)境即可。這里筆者說(shuō)明一下,編寫(xiě)的啟動(dòng)代碼應(yīng)該是地址無(wú)關(guān)的,即鏈接到任存儲(chǔ)器地址都是可以運(yùn)行的。如S3C2416在nand boot/Norboot時(shí)用戶(hù)的第一條代碼是在0x0處執(zhí)行的,而在IROM boot時(shí),用戶(hù)的第一條代碼是在0x40000000處執(zhí)行的,啟動(dòng)代碼對(duì)不同的啟動(dòng)模式都是要能正確運(yùn)行的。此外,啟動(dòng)代碼文件內(nèi)容應(yīng)該是板級(jí)無(wú)關(guān)的,不同的開(kāi)發(fā)板,只要是同一處理器(S3C2416/50/51),啟動(dòng)代碼文件都是適用的。即板級(jí)的代碼如GPIO口的初始化不適合放在啟動(dòng)代碼中實(shí)現(xiàn)。此處筆者只以筆者的啟動(dòng)代碼思路來(lái)作講解。

1.1. 異常向量表

處理器在上電復(fù)位完成后,第一條代碼進(jìn)入的是異常向量表中對(duì)應(yīng)的復(fù)位向量地址。對(duì)于arm,這個(gè)異常向量表的地址通常是0x00000000偏移處,如發(fā)生復(fù)位,則arm進(jìn)入0x0處的復(fù)位向量地址,發(fā)生IRQ中斷則進(jìn)入0x18處的IRQ異常向量地址。異常向量表就是用來(lái)記錄各個(gè)異常進(jìn)入時(shí)的代碼處理位置。

1.2. 關(guān)看門(mén)狗

復(fù)位代碼最先做的事應(yīng)該是關(guān)看門(mén)狗,因?yàn)槿绻撮T(mén)狗打開(kāi)的話(huà),在啟動(dòng)代碼進(jìn)行初始化過(guò)程中是無(wú)法喂狗的,可能造成處理器一直不停復(fù)位。

1.3. 關(guān)閉所有中斷

啟動(dòng)代碼未完成時(shí),各個(gè)狀態(tài)都還不是確定的,如果有中斷打開(kāi)并引起中斷異常,可能造成代碼跑飛。

1.4. 初始化系統(tǒng)時(shí)鐘

一般來(lái)說(shuō),處理器復(fù)位后都是運(yùn)行在一個(gè)較低速的時(shí)鐘下,為加快啟動(dòng),通常盡可能快地設(shè)置處理器的各個(gè)時(shí)鐘。

1.5. 初始化外部?jī)?nèi)存

除了Nor flash可以直接執(zhí)行代碼外,其它的代碼存儲(chǔ)器如nand flash、sd/mmc都是不能直接執(zhí)行代碼的。因此需要初始化外部?jī)?nèi)存,用來(lái)存儲(chǔ)代碼,變量。(本章節(jié)為避免復(fù)雜化,暫時(shí)不講解,注釋掉調(diào)用DDR2的初始化及用戶(hù)代碼的搬移)

1.6. 用戶(hù)代碼拷貝到外部?jī)?nèi)存

對(duì)于代碼存儲(chǔ)在nand、sd/mmc等不能直接執(zhí)行代碼的存儲(chǔ)器,初始代碼是一定需要把用戶(hù)代碼從這些設(shè)備讀入到特定的內(nèi)存中執(zhí)行的。而對(duì)于Nor flash可直接執(zhí)行代碼的存儲(chǔ)器,通常為了提高性能,也是會(huì)把代碼從Nor flash讀出,在內(nèi)存中執(zhí)行的。

1.7. MMU初始化

MMU的初始化不總是必須的,主要是為提高性能,開(kāi)D-cache必須開(kāi)MMU。如果是IROM SD/MMC或IROM NAND方式運(yùn)行代碼,用到了中斷,則也必須開(kāi)MMU,因?yàn)镮ROM啟動(dòng)在0x0地址處為IROM固化代碼,需要對(duì)中斷向量表重新映射到RAM。(本章節(jié)為避免復(fù)雜化,暫時(shí)不講解,注釋掉MMU的初始化)

1.8. 初始化棧

不管是用匯編還是用c編寫(xiě)代碼,棧是一定要分配及初始化的。arm7/arm9有七種工作模式,每種模式的棧均應(yīng)該設(shè)置,最后是進(jìn)入用戶(hù)模式。

1.9. 跳轉(zhuǎn)到c入口

進(jìn)入c入口之前是需要初始化c環(huán)境的,如清0全局變量、靜態(tài)變量區(qū)等。此處為保持跟MDK的其它arm啟動(dòng)代碼一致,直接跳轉(zhuǎn)到__main,利用編譯器的庫(kù)函數(shù)來(lái)完成c環(huán)境的初始化,最后才是真正的用戶(hù)main函數(shù)。啟動(dòng)代碼完成后,最后是用絕對(duì)地址來(lái)跳轉(zhuǎn)到c入口__main的。

2. 啟動(dòng)代碼的實(shí)現(xiàn)

筆者對(duì)啟動(dòng)代碼都是有一定的注釋?zhuān)行┘拇嫫鞯脑O(shè)置是需要參考芯片數(shù)據(jù)手冊(cè),S3C2416數(shù)據(jù)手冊(cè),arm架構(gòu)以及匯編語(yǔ)法學(xué)習(xí)筆者在之前的文章已給出相關(guān)資料的鏈接,歡迎下載學(xué)習(xí)。只要加入了啟動(dòng)代碼,就可以任意用c語(yǔ)言來(lái)開(kāi)發(fā)S3C2416了。

;/*******************************************************/

;/* s3c2416.s: start code forsamsung s3c2416/50/51(arm9) */

;/********************************************************/

; Clock setting(External Crystal12M):

; MPLLCLK = 800M, EPLLCLK = 96M

; ARMCLK = 400M, HCLK = 133M

; DDRCLK = 266M, SSMCCLK = 66M,PCLK = 66M

; HSMMC1 = 24M

; Standard definitions of Mode bitsand Interrupt (I & F) flags in PSRs

Mode_USR EQU0x10

Mode_FIQ EQU0x11

Mode_IRQ EQU0x12

Mode_SVC EQU0x13

Mode_ABT EQU0x17

Mode_UND EQU0x1B

Mode_SYS EQU0x1F

; when I bit is set, IRQ isdisabled

I_Bit EQU 0x80

; when F bit is set, FIQ isdisabled

F_Bit EQU 0x40

; Stack Configuration

UND_Stack_Size EQU0x00000020

SVC_Stack_Size EQU0x00000020

ABT_Stack_Size EQU0x00000020

FIQ_Stack_Size EQU0x00000100

IRQ_Stack_Size EQU0x00000400

USR_Stack_Size EQU0x00001000

ISR_Stack_Size EQU(UND_Stack_Size + SVC_Stack_Size +

ABT_Stack_Size+ FIQ_Stack_Size +

IRQ_Stack_Size)

AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACEUSR_Stack_Size

__initial_sp SPACE ISR_Stack_Size

Stack_Top

; Heap Configuration

Heap_Size EQU0x00000200

AREA HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem SPACEHeap_Size

__heap_limit

; Internal Memory Base Addresses

IRAM_BASE EQU0x40000000

; Watchdog Timer Base Address

WT_BASE EQU0x53000000

; Interrupt Register Base Address

INT_BASE EQU 0x4A000000

INTMSK1_OFS EQU 0x08

INTSUBMSK_OFS EQU 0x1C

INTMSK2_OFS EQU 0x48

; Clock Base Address

CLOCK_BASE EQU 0x4C000000

LOCKCON0_OFS EQU 0x00

LOCKCON1_OFS EQU 0x04

MPLLCON_OFS EQU 0x10

EPLLCON_OFS EQU 0x18

CLKSRC_OFS EQU 0x20

CLKDIV0_OFS EQU 0x24

CLKDIV1_OFS EQU 0x28

CLKDIV2_OFS EQU 0x2C

;----------------------- CODE-------------------------------------------

PRESERVE8

;Area Definition and Entry Point

;Startup Code must be linked first at Address at which it expects to run.

AREA RESET, CODE, READONLY

; ENTRY

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

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉