创建网站怎么收费,申请网站官网,最近有哪些新闻,宿州网站制作建设目录
前言
正文
1. 什么是Reset Vector
1.1 S32K144芯片的Reset Vector
1.2 RH850芯片的Reset Vector
2. 什么是Interrupt Vector
2.1 S32K144芯片的Interrupt Vector
2.2 RH850芯片的Interrupt Vector
3. Reset Vector等价于Interrupt Vector吗
4. 总结 前言
最近在…目录
前言
正文
1. 什么是Reset Vector
1.1 S32K144芯片的Reset Vector
1.2 RH850芯片的Reset Vector
2. 什么是Interrupt Vector
2.1 S32K144芯片的Interrupt Vector
2.2 RH850芯片的Interrupt Vector
3. Reset Vector等价于Interrupt Vector吗
4. 总结 前言
最近在研究符合AUTOSAR架构的OS代码级别系统在EcuM_Init调用OS标准接口StartOS之前还做了非常多的准备工作感觉不把这些地方搞明白就去研究OS有点基础不牢呀而且后面还发现OS在开始任务调度之前还完成了中断向量表Interrupt Vector的重映射然后ECU第一次上电后还会有一个Reset Vector的概念二者有什么联系了本文讲基于NXP的S32K144芯片和Renesas的RH850-U2A芯片谈谈自己对Reset Vector和Interrupt Vector的理解。 ECU系统从上电到运行到main函数之前一般经历了初始化堆栈初始化RAM系统初始化等操作具体可以参考
S32K平台学习1-S32K144启动流程分析
本文参考文档
1.RH850/U2A-EVA GroupUser’s Manual: Hardware
瑞萨电子 (Renesas Electronics Corporation)
2.Cortex-M4 Devices Generic User Guide
3.ARM Cortex-M4 Processor Technical reference manal
3.ARMv7-M Architecture
4.S32K1xx Series Reference Manual 正文
1. 什么是Reset Vector
Reset Vector也就是系统上电后存放第一个PC指针程序地址的存储空间的首地址值。 1.1 S32K144芯片的Reset Vector
S32K144芯片采用Cotex-M4内核ARMV7架构对于系统复位重启后上电的默认操作需要查看ARM相关的的手册如下图所示 R13是堆栈寄存器stack Pointer在Thread mode下COTROL寄存器的bit[1]控制stack pointer作为Main Stack PointerMSP 这个是reset 值还是Process Stack PointerPSP
系统复位Reset后处理器装载0x00000000地址处的四字节值到MSP寄存器。也就是说系统启动的时候0地址处存放的是MSP寄存器的值。 R15是程序计数器Program Counter PC。存储当前程序地址。Reset重启的时候处理器装载0x00000004地址处的值到PC指针也就是装载Reset handler的地址到PC指针PC指针跳转到Reset Handler标号/地址处开始执行Reset Hander标号下的操作。 也就是说对于S32K144芯片Reset Vector也就是Reset Handler也就是以0x0000_0004为首地址的四字节.long存储的Reset Handler标号的地址。 Reset Vector/Handler下的具体操作就是跳入到main函数之前的一些系统级操作如初始化堆栈初始化RAM系统初始化等。具体参考前言部分关于S32K启动流程的参考文章。 1.2 RH850芯片的Reset Vector
RH850芯片采用瑞萨公司自定义的内核IP架构不是ARM,PowerPc,X86等常见嵌入式芯片架构有自己一套独立的指令集。 但是关键核寄存器SPPCLR等和ARMV7架构的核寄存差不多。 RH850-U2A有四个核每个核的Reset Vector地址可以通过Option ByteRH850特有的配置字可以配置系统时钟Reset Vector地址等很多关键信息配置核0PE0和核1PE1的默认defaultReset Vector地址是0x0000_0000也就是说系统上电后PC指针把0x0000_0000起始地址处存放的程序所在地址装载到PC指针核2PE2和核3PE3的默认defaultReset Vector地址是0x0080_0000也就是说系统上电后PC指针把0x0080_0000起始地址处存放的程序所在地址装载到PC指针。 也就是说对于RH850芯片Reset Vector也就是以0x0000_0000/0x0080_0000为首地址的四字节.long存储的Reset Handler标号的地址。 2. 什么是Interrupt Vector
中断向量表就是一片地址空间这段地址空间里面存放了系统所有的中断处理函数的入口地址包括异常中断处理函数。通常我们在讲中断向量表的时候都是说中断向量表的入口地址。每个系统有自己的中断控制器及对应的中断控制寄存器我们可以通过改变中断控制寄存器中保存的中断向量表的基地址来对中断向量表进行重映射也就是在不同地地址空间存放中断向量表然后在合适的时候把中断向量表地地址赋值给中断向量表寄存器。 2.1 S32K144芯片的Interrupt Vector
S32K144芯片是ARM-Cotex M4内核ARMV7架构的芯片核寄存器VTOR中断向量表寄存器中存放的就算Interrupt Vector的起始地址。 也就是说赋值给VTOR寄存器的地址就是Interrupt Vector的起始地址在系统启动启动阶段我们把isr_vector的地址赋值给了VTOR寄存器也就是说Interrupt Vector地起始地址就是isr_vector所在的地址。 2.2 RH850芯片的Interrupt Vector
RH850芯片有两个中断向量表基址寄存器EBASE存放的是异常中断向量表基地址INTBP存放的中断向量表的基地址。 也就是说对于RH850芯片有两个中断向量表寄存器EBASE存放的是异常中断向量表的基地址INTBP存放的是正常中断向量表的基地址。 3. Reset Vector等价于Interrupt Vector吗
以RH850芯片为例PE0的Reset Vector的基地址是0x0000_0000如果我们赋值0x0000_0000给EBASE这个时候Exception Handler地基地址从0x0000_00010开始这个时候我们可以理解为Reset Vector的基地址值等于Exception Interrupt Vector基地址值。 但是如果我们重映射EBASE 0x0000_0100这个时候Reset Vector的基地址值不等于Exception Interrupt Vector基地址值。 也就是说Reset Vector和Interrupt Vector是两个概念二者的值可能相同。 4. 总结
1. Reset Vector和Interrupt Vector是两个概念二者的基地址的值可能相同。
2. S32K144的Reset Vector的地址是0x0000_0004RH850-U2A PE0的Default Reset Vector是0x0000_0000。
3. 中断向量表控制寄存器中存储的值就说中断向量表的基地址我们在系统开发的不同阶段BootLoader和APP会对其进行重映射也就是BooLoader和APP中中断向量表的基地址是不一样。
4. 异常中断处理函数需要明确定义好防止系统产生异常中断后找不到异常中断处理函数程序跑飞。