我們都知道芯片在運行應用程序指令之前,首先會對芯片做一些
硬件和系統的初始化,如堆棧指針、RAM空間、變量初始化等,這部分代碼被稱為啟動代碼。啟動代碼通常在芯片上電后立即執行,對 於MCAL架構來講就是要在MCU驅動模塊初始化之前完成,啟動代 碼要求完成芯片特殊的初始化功能,這些工作不屬於任何MCAL驅動 模塊,下面列出了MCAL規范對啟動代碼完成功能的建議。
(1)啟動代碼應完成中斷向量表的初始化。
(2)啟動代碼應完成堆棧的初始化。
(3)如芯片支持Context Save操作,啟動代碼應完成用於Context Save操作的存儲器空間。
(4)啟動代碼應確保MCU內部看門狗處於關閉狀態,內部看門 狗的初始化應由MCAL Watchdog驅動部件完成。
(5)如MCU支持數據/代碼緩存,必須在啟動代碼中完成初始 化。
(6)啟動代碼應完成MCU內部存儲器相關的初始化功能,如內 存保護等。
(7)如使用外部存儲器,存儲器應在啟動代碼中初始化。
(8)啟動代碼應完成MCU默認時鍾配置的初始化。
(9)如芯片支持,啟動代碼應使能特殊功能寄存器的保護機 制。
(10)啟動代碼應初始化必要的一次只寫寄存器(Write Once Register)。
(11)啟動代碼應初始化RAM空間,以保證正確執行MCU驅 動。以上就是MCAL規范對於啟動代碼的功能建議,需要注意的是啟 動代碼依賴於ECU的功能及MCU的性能。接下來,具體看一下本章 使用的S32K144樣例工程中啟動代碼都做了哪些事情。
1.初始化內核通用寄存器
mov r0,#0 mov r1,#0 mov r2,#0 mov r3,#0 mov r4,#0 mov r5,#0 mov r6,#0 mov r7,#0
2.初始化中斷向量表的基地址
/* relocate vector table to RAM */ ldr r0,=VTOR_REG ldr r1,=VTABLE str r1,[r0]
3.初始化用戶堆棧
4.關閉Watchdog
5.系統初始化
6.RAM初始化
7.跳轉至Main函數