色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          1. 基本概念(CMSIS): Cortex Micro-controller Software Interface Standard,微控制器軟件接口標(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è)訪問層,其中定義了定義了內(nèi)核中得外設(shè)幾丁質(zhì)以及一些內(nèi)核的訪問及控制函數(shù)。
          startup_.s文件是系統(tǒng)的啟動文件,其包括堆和棧的初始化配置、中斷向量表的配置以及將程序引導(dǎo)到main()函數(shù)等功能。
          system_和system_.c文件則是由ARM公司提供模版,各芯片制造商根據(jù)自己芯片的特點來編寫的。
          3. 注解startup_.s文件
          此文件主要完成三項工作:堆棧以及堆的初始化、定位中斷向量表、調(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é)對齊(ALIGN=3)
          Stack_Mem SPACE Stack_Size
          __initial_sp //此標(biāo)號有一層隱含的意思那就是在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 SPACE Heap_Size
          __heap_limit
          以上堆和棧的具體地址可以在工程編譯后產(chǎn)生的*.map文件中看到。
          b) 定位中斷向量表
          PRESERVE8
          //PRESERVE8指定了以下的代碼位8字節(jié)對齊
          THUMB
          //THUMB指定了接下來的代碼為THUMB指令集
          ; Vector Table Mapped to Address 0 at Reset
          AREA RESET, DATA, READONLY
          //此語句聲明RESET數(shù)據(jù)段
          EXPORT __Vectors
          //導(dǎo)出向量表標(biāo)號,EXPORT作用類似于C語言中的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) 調(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)程序進入__main(此__main是C_Library中的函數(shù),非main())
          d) 其他的代碼
          這段代碼是NXP公司的LPC1700系列的MCU特有的一段代碼,其他公司的Cortex-M3 MCU的啟動程序是沒有這段代碼的。
          這段代碼是指定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啟動工程詳解


          關(guān)鍵詞: ARM啟動過程Cortex-M3LPC176

          評論


          技術(shù)專區(qū)

          關(guān)閉