《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 解决方案 > 飞思卡尔Kinetis L 汇编语言启动文件startup_MK25Z4简单分析

飞思卡尔Kinetis L 汇编语言启动文件startup_MK25Z4简单分析

2017-07-23
關鍵詞: 汇编语言

打開Freedom KL25的例程包,任意找一個code example,以lower_power_dma_uart_demo為例,分析一下啟動匯編文件的代碼。

代碼主要分三部分:堆棧等的配置、向量表、初始啟動跳轉。

1. 堆棧配置


; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x00000800

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp    EQU     0x20002ff8


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

注:AREA關鍵字的作用是告訴匯編器,該section是獨立的一段,應該重新開始解析。AREA后面的一系列表示該段的屬性。

SPACE關鍵字告訴其后的一段memory存儲空間,不被初始化為某些特定值,與FILL相對。

EQU可以理解為等于。

 

2. 向量表

; 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     0  ; Reserved
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     SVC_Handler  ; SVCall Handler
                DCD     0  ; Reserved
                DCD     0  ; Reserved
                DCD     PendSV_Handler  ; PendSV Handler
                DCD     SysTick_Handler  ; SysTick Handler

                ; External Interrupts
                DCD     DMA0_IRQHandler  ; DMA channel 0 transfer complete interrupt
                DCD     DMA1_IRQHandler  ; DMA channel 1 transfer complete interrupt
                DCD     DMA2_IRQHandler  ; DMA channel 2 transfer complete interrupt
                DCD     DMA3_IRQHandler  ; DMA channel 3 transfer complete interrupt
                DCD     Reserved20_IRQHandler  ; Reserved interrupt 20
                DCD     FTFA_IRQHandler  ; FTFA interrupt
                DCD     LVD_LVW_IRQHandler  ; Low Voltage Detect, Low Voltage Warning
                DCD     LLW_IRQHandler  ; Low Leakage Wakeup
                DCD     I2C0_IRQHandler  ; I2C0 interrupt
                DCD     I2C1_IRQHandler  ; I2C0 interrupt 25
                DCD     SPI0_IRQHandler  ; SPI0 interrupt
                DCD     SPI1_IRQHandler  ; SPI1 interrupt
                DCD     UART0_IRQHandler  ; UART0 status/error interrupt
                DCD     UART1_IRQHandler  ; UART1 status/error interrupt
                DCD     UART2_IRQHandler  ; UART2 status/error interrupt
                DCD     ADC0_IRQHandler  ; ADC0 interrupt
                DCD     CMP0_IRQHandler  ; CMP0 interrupt
                DCD     TPM0_IRQHandler  ; TPM0 fault, overflow and channels interrupt
                DCD     TPM1_IRQHandler  ; TPM1 fault, overflow and channels interrupt
                DCD     TPM2_IRQHandler  ; TPM2 fault, overflow and channels interrupt
                DCD     RTC_IRQHandler  ; RTC interrupt
                DCD     RTC_Seconds_IRQHandler  ; RTC seconds interrupt
                DCD     PIT_IRQHandler  ; PIT timer interrupt
                DCD     Reserved39_IRQHandler  ; Reserved interrupt 39
                DCD     USB0_IRQHandler  ; USB0 interrupt
                DCD     DAC0_IRQHandler  ; DAC interrupt
                DCD     TSI0_IRQHandler  ; TSI0 interrupt
                DCD     MCG_IRQHandler  ; MCG interrupt
                DCD     LPTimer_IRQHandler  ; LPTimer interrupt
                DCD     Reserved45_IRQHandler  ; Reserved interrupt 45
                DCD     PORTA_IRQHandler  ; Port A interrupt
                DCD     PORTD_IRQHandler  ; Port D interrupt

向量表很長,此處只截取一部分,這些向量表中的向量的默認名字就在這里指定了。開發人員只需將中斷向量函數的具體功能實現即可。當然,有一些默認的dummy 異常handler已經有了,都是死循環:

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler     PROC
                EXPORT  NMI_Handler               [WEAK]
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP
SVC_Handler     PROC
                EXPORT  SVC_Handler               [WEAK]
                B       .
                ENDP
PendSV_Handler  PROC
                EXPORT  PendSV_Handler            [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler           [WEAK]
                B       .
                ENDP

3. 啟動代碼

啟動代碼就放在Reset復位向量里面,因為Reset向量是MCU啟動時候第一個進入到PC寄存器并開始執行的地方。

; Reset Handler

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

啟動代碼首先將SystemInit的地址load到R0寄存器中,然后使用BLX跳轉指令跳到SystemInit函數開始處去執行,執行完畢以后再執行main函數的執行。

接下去需要找SystemInit的代碼查看。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 91免费欧美精品| 99久久99| 国产精品专区在线 | 中文视频一区视频二区视频三区| 国产精品人人做人人爽| 欧美日韩日本网| 欧美日韩一区在线观看视频| 国产区精品在线观看| 国产日韩亚洲精品| 国产精品视频地址| 国产日韩欧美中文| 国产欧美亚洲精品| 欧洲国产精品| 日韩a∨精品日韩在线观看| 久久久久久国产精品美女| 亚洲免费在线精品一区| 国产精品福利观看| 久久久99免费视频| 久久久久免费视频| 五月婷婷一区| 天天爱天天做天天操| 日韩中文字幕在线不卡| 国产精品免费久久久久影院| 亚洲一区精品电影| 国产精品一区二区在线观看| 亚洲v国产v| 日韩亚洲在线视频| 天天操天天干天天玩| 国产麻豆日韩| 国产精品美女www爽爽爽视频| 亚洲日本无吗高清不卡| 国产精品视频免费观看| 久久精品第九区免费观看| 国产精品一区专区欧美日韩| 久久99精品久久久久久久久久| 日韩av不卡播放| 国产精品美腿一区在线看| 精品国内产的精品视频在线观看| 91精品在线影院| 日韩亚洲在线视频| 免费看成人午夜电影|