autosar mcal之启动代码

拈花ヽ惹草 提交于 2020-01-20 16:59:38

我们都知道芯片在运行应用程序指令之前,首先会对芯片做一些

硬件和系统的初始化,如堆栈指针、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函数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!