久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 11299|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:50962 發(fā)表于 2014-8-12 14:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1.基本概念(CMSIS): Cortex Micro-controller Software InterfaceStandard,微控制器軟件接口標(biāo)準(zhǔn)。
2.CMSIS標(biāo)準(zhǔn)的文件結(jié)構(gòu):
a) core_cm.c (stdint.h)
b) system_.c (core_cm, system_)
c) startup_.s

其中core_cm.c以及core_cm中為內(nèi)核設(shè)訪問(wèn)層,其中定義了定義了內(nèi)核中得外設(shè)幾丁質(zhì)以及一些內(nèi)核的訪問(wèn)及控制函數(shù)。

startup_.s文件是系統(tǒng)的啟動(dòng)文件,其包括堆和棧的初始化配置、中斷向量表的配置以及將程序引導(dǎo)到main()函數(shù)等功能。

system_和system_.c文件則是由ARM公司提供模版,各芯片制造商根據(jù)自己芯片的特點(diǎn)來(lái)編寫的。

3.注解startup_.s文件
此文件主要完成三項(xiàng)工作:堆棧以及堆的初始化、定位中斷向量表、調(diào)用Reset Handler
a) 堆棧以及堆的初始化
; Stack Configuration
;   Stack Size(in Bytes) <0x0-0xFFFFFFFF:8>
;

Stack_Size        EQU    0x00000200


                   AREA    STACK, NOINIT, READWRITE,ALIGN=3  
//指明8字節(jié)對(duì)齊(ALIGN=3)

Stack_Mem SPACE   Stack_Size
__initial_sp      //此標(biāo)號(hào)有一層隱含的意思那就是在M3中堆棧是滿遞減堆                               //棧,因?yàn)樗付硕褩V羔樜挥诙褩5母叩刂罚ㄔ?/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       SPACEHeap_Size
__heap_limit


以上堆和棧的具體地址可以在工程編譯后產(chǎn)生的*.map文件中看到。

b) 定位中斷向量表
PRESERVE8  
//PRESERVE8指定了以下的代碼位8字節(jié)對(duì)齊

THUMB

//THUMB指定了接下來(lái)的代碼為THUMB指令集


; Vector Table Mapped to Address 0 atReset


              AREA   RESET, DATA,READONLY
//此語(yǔ)句聲明RESET數(shù)據(jù)段


              EXPORT __Vectors
//導(dǎo)出向量表標(biāo)號(hào),EXPORT作用類似于C語(yǔ)言中的extern


__Vectors     
              DCD    __initial_sp                   ; Top ofStack
              DCD    Reset_Handler           ; ResetHandler
              DCD    NMI_Handler             ; NMI Handler
              DCD    HardFault_Handler        ; Hard FaultHandler
              DCD    MemManage_Handler        ; MPU FaultHandler
              DCD    BusFault_Handler         ; Bus FaultHandler
              DCD    UsageFault_Handler       ; Usage Fault Handler
              DCD    0                      ;Reserved
              DCD    0                      ;Reserved
              DCD    0                      ;Reserved
              DCD    0                      ;Reserved
              DCD    SVC_Handler             ; SVCallHandler
              DCD    DebugMon_Handler         ; Debug MonitorHandler
              DCD    0                      ;Reserved
              DCD    PendSV_Handler           ; PendSVHandler
              DCD    SysTick_Handler          ; SysTickHandler


              ; ExternalInterrupts
              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) 調(diào)用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


注釋:引導(dǎo)程序進(jìn)入__main(此__main是C_Library中的函數(shù),非main())

d) 其他的代碼
這段代碼是NXP公司的LPC1700系列的MCU特有的一段代碼,其他公司的Cortex-M3MCU的啟動(dòng)程序是沒(méi)有這段代碼的。

這段代碼是指定LPC1700的CRP加密級(jí)別的代碼段,芯片上電后會(huì)自動(dòng)讀取這一地址的值以確定加密方式,其中CRP_Key =0xffffffff為不加密(0級(jí)加密),CRP_Key = 0x12345678為1級(jí)加密,CRP_Key =0x87654321為2級(jí)加密,CRP_Key =0x43218765為3級(jí)加密(最高級(jí)加密),3級(jí)加密將會(huì)禁止所有的ISP指令,也就是說(shuō),芯片將不能讀寫、不能擦除。

              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)工程詳解

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产aⅴ成人精品无吗 综合国产在线 | 久久精品性视频 | 狠狠色综合久久婷婷 | 男女网站在线观看 | 在线观看日本网站 | 日韩有码在线播放 | 亚洲精品99 | 黄在线| www亚洲免费国内精品 | 国产人久久人人人人爽 | 国产美女视频黄 | 国产999精品久久久久久 | 精品久久99 | 91一区二区| jizjizjiz中国护士18 | 国产片侵犯亲女视频播放 | 免费在线观看成人av | 欧美男人亚洲天堂 | 综合成人在线 | 国产精品精品视频一区二区三区 | 最新中文字幕久久 | 日本精品久久 | 911精品国产 | 成人午夜免费在线视频 | 久久精品免费 | 精品国产一区二区三区免费 | 在线观看成人 | 日韩欧美黄色 | 99精品国产一区二区三区 | 天天玩天天干天天操 | 亚洲视频在线观看 | 成人欧美一区二区三区黑人孕妇 | 伊人久久免费视频 | 国产精品99一区二区 | 国产一区二区三区亚洲 | 国产亚洲精品精品国产亚洲综合 | 欧美v在线 | 九九伊人sl水蜜桃色推荐 | wwwww在线观看 | 极品在线 | 国产在线一区二区三区 |