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

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式分享
[導(dǎo)讀]基于ARM的芯片多數(shù)為復(fù)雜的片上系統(tǒng)。這種復(fù)雜系統(tǒng)里的多數(shù)硬件模塊都是可配置的。需要由軟件來(lái)設(shè)置其需要的工作狀態(tài)。因此在用戶(hù)的應(yīng)用程序之前,需要由專(zhuān)門(mén)的一段代碼來(lái)完成對(duì)系統(tǒng)的初始化。由于這類(lèi)代碼直接面對(duì)處理器內(nèi)核和硬件控制器進(jìn)行編程,一般都是用匯編語(yǔ)言。

基于ARM的芯片多數(shù)為復(fù)雜的片上系統(tǒng)。這種復(fù)雜系統(tǒng)里的多數(shù)硬件模塊都是可配置的。需要由軟件來(lái)設(shè)置其需要的工作狀態(tài)。因此在用戶(hù)的應(yīng)用程序之前,需要由專(zhuān)門(mén)的一段代碼來(lái)完成對(duì)系統(tǒng)的初始化。由于這類(lèi)代碼直接面對(duì)處理器內(nèi)核和硬件控制器進(jìn)行編程,一般都是用匯編語(yǔ)言。

啟動(dòng)代碼是芯片復(fù)位后進(jìn)入C語(yǔ)言的main()函數(shù)前執(zhí)行的一段代碼,主要是為運(yùn)行C語(yǔ)言程序提供基本運(yùn)行環(huán)境,如初始化存儲(chǔ)器系統(tǒng)等。ARM公司只設(shè)計(jì)內(nèi)核,不自己生產(chǎn)芯片,只是把內(nèi)核授權(quán)給其它廠商,其它廠商購(gòu)買(mǎi)了授權(quán)且加入自己的外設(shè)后生產(chǎn)出各具特色的芯片。這樣就促進(jìn)了基于ARM處理器核的芯片多元化,但也使得每一種芯片的啟動(dòng)代碼差別很大,不易編寫(xiě)出統(tǒng)一的啟動(dòng)代碼。ADS(針對(duì)ARM處理器核的C語(yǔ)言編譯器)的策略是不提供完整的啟動(dòng)代碼,啟動(dòng)代碼不足部分或者由廠商提供,或者自己編寫(xiě)。

ARM的啟動(dòng)代碼類(lèi)似于電腦中的BIOS,它從系統(tǒng)上電開(kāi)始接管CPU,依次需要負(fù)責(zé)初始化 CPU在各種模式下的堆棧空間、設(shè)定CPU的內(nèi)存映射、對(duì)系統(tǒng)的各種控制寄存器做初始化、對(duì)CPU的外部存儲(chǔ)器進(jìn)行初始化、設(shè)定各外圍設(shè)備的基地址、創(chuàng)建正確的中斷向量表、為C代碼執(zhí)行創(chuàng)建ZI(零創(chuàng)建)區(qū),然后進(jìn)入到C代碼。 在C代碼中繼續(xù)對(duì)時(shí)鐘、RS232端口進(jìn)行初始化,然后打開(kāi)系統(tǒng)中斷允許位。最后進(jìn)入到應(yīng)用代碼中執(zhí)行,執(zhí)行期間響應(yīng)各種不同的中斷信號(hào)并調(diào)用預(yù)先設(shè)置好的中斷服務(wù)程序處理這些中斷。

一般ARM的啟動(dòng)代碼中通用的內(nèi)容包括:

中斷向量表

初始化存儲(chǔ)器系統(tǒng)

初始化堆棧

初始化有特殊要求的端口,設(shè)備

初始化用戶(hù)程序執(zhí)行環(huán)境

改變處理器模式

呼叫主應(yīng)用程序

以stm32的啟動(dòng)文件為例,stm32的啟動(dòng)文件一般都是包含在具體單片機(jī)型號(hào)的匯編文件中(.s文件),下圖為啟動(dòng)文件的簡(jiǎn)述(description)

和我們預(yù)想的差不多,該啟動(dòng)文件主要包含了初始化主堆棧指針(MSP)、初始化程序指針(PC)、初始化中斷向量表、配置系統(tǒng)時(shí)鐘和外部Sram(可選)、跳轉(zhuǎn)到main函數(shù)

第一部分配置堆和棧的大小(Stack_size Heap_size)

Stack_Size EQU 0x400

AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACE Stack_Size

__initial_sp

AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定義棧,可初始為0,8字節(jié)對(duì)齊 (堆代碼類(lèi)似相同功能)

Stack_Mem SPACE Stack_Size ;分配0x400個(gè)連續(xù)字節(jié),并初始化為0 (堆代碼類(lèi)似相同功能)

__initial_sp ;匯編代碼地址標(biāo)號(hào) (堆代碼類(lèi)似相同功能)

PRESERVE8 ;指定當(dāng)前文件堆棧8字節(jié)對(duì)齊

THUMB ;告訴匯編器下面是32為的Thumb指令,如果需要匯編器將插入位以保證對(duì)齊

第二部分定義中斷向量表

; Vector Table Mapped to Address 0 at Reset

AREA RESET, DATA, READONLY

EXPORT __Vectors

EXPORT __Vectors_End

EXPORT __Vectors_Size

__Vectors DCD __initial_sp ; Top of Stack

DCD Reset_Handler ; Reset Handler

DCD NMI_Handler ; NMI Handler

DCD HardFault_Handler ; Hard Fault Handler

DCD MemManage_Handler ; MPU Fault Handler

DCD BusFault_Handler ; Bus Fault Handler

DCD UsageFault_Handler ; Usage Fault Handler

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD 0 ; Reserved

DCD SVC_Handler ; SVCall Handler

DCD DebugMon_Handler ; Debug Monitor Handler

DCD 0 ; Reserved

DCD PendSV_Handler ; PendSV Handler

DCD SysTick_Handler ; SysTick Handler

AREA RESET, DATA, READONLY ;定義復(fù)位向量段,只讀

EXPORT __Vectors ;定義一個(gè)可以在其他文件中使用的全局標(biāo)號(hào)。此處表示中斷地址

__Vectors DCD __initial_sp ; 給__initial_sp分配4字節(jié)32位的地址0x0

DCD Reset_Handler ; 給標(biāo)號(hào)Reset Handler分配地址為0x00000004

DCD NMI_Handler ; 給標(biāo)號(hào)NMI Handler分配地址0x00000008

DCD HardFault_Handler ; Hard Fault Handler

DCD ……

__Vectors_End

第三部分Reset_Handler 及假異常處理程序的定義

AREA |.text|, CODE, READONLY ;代碼段定義為只讀

Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT SystemInit

IMPORT __main

LDR R0, =SystemInit //把SystemInit 的地址加載到寄存器R0。

BLX R0 //程序跳轉(zhuǎn)到R0 中的地址執(zhí)行程序

LDR R0, =__main //把_main 的地址加載到寄存器R0

BX R0 //程序跳轉(zhuǎn)到R0 中的地址執(zhí)行程序,執(zhí)行完畢之后就去到我們熟知的C 世界。

ENDP //表示子程序的結(jié)束


聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

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

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

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

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

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

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

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

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

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

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

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

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

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

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

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

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

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

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

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

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