《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 飛思卡爾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。
主站蜘蛛池模板: 日本55丰满熟妇厨房伦| 国产粉嫩粉嫩的18在线播放91| 天天躁日日躁狠狠躁性色AVQ| 天天在线天天综合网色| 国产色综合久久无码有码| 成年男女免费视频网站| 日本护士handjob| 本子库全彩时间暂停| 欧美黑人巨大videos精品| 欧美日韩一区二区三区久久| 日韩午夜伦y4480私人影院| 欧美日韩一区二区三区四区| 日韩内射美女片在线观看网站| 成人久久伊人精品伊人| 把水管开水放b里是什么感觉| 女女女女BBBBBB毛片在线| 成Av免费大片黄在线观看| 国内国外精品影片无人区| 国产成人在线观看网站| 午夜精品久久久内射近拍高清| 亚洲第一综合天堂另类专| 医生好大好硬好爽好紧| 和前辈夫妇交换性3中文字幕| 国产一区二区三区欧美| 人妻18毛片a级毛片免费看| 伊人婷婷综合缴情亚洲五月| 午夜a级成人免费毛片| 亚洲免费观看视频| 亚洲午夜爱爱香蕉片| 中文字幕亚洲天堂| 中文字幕一区二区三区永久| 97视频免费在线| 91麻豆国产自产| 色橹橹欧美在线观看视频高清| 特级毛片爽www免费版| 波多野结衣办公室在线| 欧美日韩在线观看免费| 成年女人18级毛片毛片免费观看| 国产精品第一区揄拍无码| 国产精品亲子乱子伦xxxx裸| 国产精品18久久久久久麻辣|