<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM啟動(dòng)過(guò)程(Cortex-M3 NXP LPC1768為例)

ARM啟動(dòng)過(guò)程(Cortex-M3 NXP LPC1768為例)

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
1. 基本概念(CMSIS): Cortex Micro-controller Software Interface Standard,微控制器軟件接口標準。
2. CMSIS標準的文件結構:
a) core_cm.c (stdint.h)
b) system_.c (core_cm, system_)
c) startup_.s
其中core_cm.c以及core_cm中為內核設訪(fǎng)問(wèn)層,其中定義了定義了內核中得外設幾丁質(zhì)以及一些內核的訪(fǎng)問(wèn)及控制函數。
startup_.s文件是系統的啟動(dòng)文件,其包括堆和棧的初始化配置、中斷向量表的配置以及將程序引導到main()函數等功能。
system_和system_.c文件則是由ARM公司提供模版,各芯片制造商根據自己芯片的特點(diǎn)來(lái)編寫(xiě)的。
3. 注解startup_.s文件
此文件主要完成三項工作:堆棧以及堆的初始化、定位中斷向量表、調用Reset Handler
a) 堆棧以及堆的初始化
; Stack Configuration
; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
Stack_Size EQU 0x00000200
AREA STACK, NOINIT, READWRITE, ALIGN=3
//指明8字節對齊(ALIGN=3)
Stack_Mem SPACE Stack_Size
__initial_sp //此標號有一層隱含的意思那就是在M3中堆棧是滿(mǎn)遞減堆 //棧,因為它指定了堆棧指針位于堆棧的高地址(在 //Stack_Mem之后)
; Heap Configuration
; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
Heap_Size EQU 0x00000000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
以上堆和棧的具體地址可以在工程編譯后產(chǎn)生的*.map文件中看到。
b) 定位中斷向量表
PRESERVE8
//PRESERVE8指定了以下的代碼位8字節對齊
THUMB
//THUMB指定了接下來(lái)的代碼為T(mén)HUMB指令集
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
//此語(yǔ)句聲明RESET數據段
EXPORT __Vectors
//導出向量表標號,EXPORT作用類(lèi)似于C語(yǔ)言中的extern
__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
; External Interrupts
DCD WDT_IRQHandler ; 16: Watchdog Timer
DCD TIMER0_IRQHandler ; 17: Timer0
DCD TIMER1_IRQHandler ; 18: Timer1
DCD TIMER2_IRQHandler ; 19: Timer2
DCD TIMER3_IRQHandler ; 20: Timer3
DCD UART0_IRQHandler ; 21: UART0
(……省略)
c) 調用Reset Handler
; Reset Handler
Reset_Handler
PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
注釋?zhuān)阂龑С绦蜻M(jìn)入__main(此__main是C_Library中的函數,非main())
d) 其他的代碼
這段代碼是NXP公司的LPC1700系列的MCU特有的一段代碼,其他公司的Cortex-M3 MCU的啟動(dòng)程序是沒(méi)有這段代碼的。
這段代碼是指定LPC1700的CRP加密級別的代碼段,芯片上電后會(huì )自動(dòng)讀取這一地址的值以確定加密方式,其中CRP_Key = 0xffffffff為不加密(0級加密),CRP_Key = 0x12345678為1級加密,CRP_Key = 0x87654321為2級加密,CRP_Key = 0x43218765為3級加密(最高級加密),3級加密將會(huì )禁止所有的ISP指令,也就是說(shuō),芯片將不能讀寫(xiě)、不能擦除。
IF :LNOT::DEF:NO_CRP
AREA |.ARM.__at_0x02FC|, CODE, READONLY
CRP_Key
DCD 0xFFFFFFFF
ENDIF
AREA |.text|, CODE, READONLY
e)堆棧以及堆的初始化行為
; User Initial Stack & Heap
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, = (Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
4. ARM啟動(dòng)工程詳解


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>