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

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

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

1. 啟動代碼流程

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

1.1. 異常向量表

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

1.2. 關(guān)看門狗

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

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

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

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

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

1.5. 初始化外部內(nèi)存

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

1.6. 用戶代碼拷貝到外部內(nèi)存

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

1.7. MMU初始化

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

1.8. 初始化棧

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

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

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

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

筆者對啟動代碼都是有一定的注釋,有些寄存器的設(shè)置是需要參考芯片數(shù)據(jù)手冊,S3C2416數(shù)據(jù)手冊,arm架構(gòu)以及匯編語法學(xué)習(xí)筆者在之前的文章已給出相關(guān)資料的鏈接,歡迎下載學(xué)習(xí)。只要加入了啟動代碼,就可以任意用c語言來開發(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ā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉