AURIX TC377,TC387,TC397用户启动程序流程
用户启动程序是在Boot Firmware之后运行的程序(即用户程序里的第一级Boot Loader,类似Linux的Uboot),初始化过程是CPU0完成的。用户可以根据不同的复位事件来选择不同的执行路径。
AURITX 2代芯片的主要启动过程如下(该阶段只有在Cold Power on Reset时才会执行,其他的Reset是不会执行的):
- 第一个阶段,初始化PSW寄存器,以便可以在User1模式下使用最大深度中断堆栈深度。之后会判断复位类型,看是Application Reset,还是Power On Reset还是CPU0 Reset。
- 第二阶段主要有三个部分:1)初始化EVR,同时确保寄存器内容是所需的配置值;2)执行LBIST测试,以保证系统安全;3)MONBIST检查,以便确保第二级电压监控和Alarm产生路径是好的。
- 第三阶段,设置好系统以支持函数调用。这主要包括Context Save Area的初始化和Stack Pointer(A10)的初始化。至此没有全局变量使用。
- 第四阶段是初始化时钟和Flash Wait State的值。对于ADAS的应用,在PLL初始化之前,MMIC芯片需要使能,MMIC芯片可以给CPU提供时钟。出于功能安全考虑,RAM的MBIST需要执行,会初始化所有RAM的功能安全特性。这个阶段是只有在发生Power on Reset时才会执行,对于其他类型Reset,这个阶段的动作是不需要执行的,因为Clock和Flash模块会保持复位前的状态。
- 第五阶段是可选的,主要是为了SMU Alarm处理的设置,更多的是功能安全的考虑。
- 第六阶段包含如下步骤:1)通过设置CPU_PCON,CPU_DCON寄存器使能Cache;2)设置系统支持中断和Trap的处理,通过设置BIV和BTV寄存器,同时还需要设置中断和Trap向量表;3)初始化CPU0和其他CPU共享的全局变量;4)启动其他CPU。多核CPU的启动时链式的,是通过一个CPU启动另一个CPU,然后再去启动下一个CPU;
- 下一步就是将PC的控制权交给OS。对于多核操作系统,StartCore()和StartOS()会在每个CPU里调用的。同时这些核的在启动时会同步,只有多个核都启动成功了,才继续后面程序的运行。
- 过程请参考下面两张图: