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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11286|回復: 0
打印 上一主題 下一主題
收起左側

ARM啟動過程(Cortex-M3 NXP LPC1768為例)

[復制鏈接]
跳轉到指定樓層
樓主
ID:50962 發表于 2014-8-12 14:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.基本概念(CMSIS): Cortex Micro-controller Software InterfaceStandard,微控制器軟件接口標準。
2.CMSIS標準的文件結構:
a) core_cm.c (stdint.h)
b) system_.c (core_cm, system_)
c) startup_.s

其中core_cm.c以及core_cm中為內核設訪問層,其中定義了定義了內核中得外設幾丁質以及一些內核的訪問及控制函數。

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

system_和system_.c文件則是由ARM公司提供模版,各芯片制造商根據自己芯片的特點來編寫的。

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中堆棧是滿遞減堆                               //棧,因為它指定了堆棧指針位于堆棧的高地址(在//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


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

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

THUMB

//THUMB指定了接下來的代碼為THUMB指令集


; Vector Table Mapped to Address 0 atReset


              AREA   RESET, DATA,READONLY
//此語句聲明RESET數據段


              EXPORT __Vectors
//導出向量表標號,EXPORT作用類似于C語言中的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) 調用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


注釋:引導程序進入__main(此__main是C_Library中的函數,非main())

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

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

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

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线视频一区二区 | 做a网站| 成人h视频在线 | 日本精品一区二区 | 男女视频在线观看免费 | 欧美男人天堂 | 亚洲精品黄色 | 日韩欧美一级精品久久 | 欧美午夜精品 | 毛片免费看的 | 国产高清精品一区二区三区 | 久久久九九 | 日本在线视频一区二区 | 一区二区三区在线 | 欧 | 成人免费视频网站在线看 | 日韩视频中文字幕 | 国产精品999| 成人午夜电影在线观看 | 国产精品亚洲视频 | 91精品在线观看入口 | 久久久国产精品入口麻豆 | 国产精品久久久久久久岛一牛影视 | 狠狠躁躁夜夜躁波多野结依 | 久久精品久久久久久 | 精品久久影院 | 国产欧美一级二级三级在线视频 | 偷拍自拍网址 | 欧美亚洲在线视频 | 欧美亚洲视频 | 久久久久久亚洲精品 | 国产亚洲成av人在线观看导航 | 九色网址| 日韩成人免费中文字幕 | 蜜月va乱码一区二区三区 | 色一情一乱一伦一区二区三区 | 久久视频精品在线 | a级片在线观看 | 精品视频一区二区三区 | 91亚洲国产 | 国产精品免费一区二区 | 国产精品久久久久久一区二区三区 |