【RH850U2A芯片】Reset Vector和Interrupt Vector介绍

2024-01-28 05:04

本文主要是介绍【RH850U2A芯片】Reset Vector和Interrupt Vector介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

正文

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 Pointer(MSP 这个是reset 值)还是Process Stack Pointer(PSP)

系统复位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等常见嵌入式芯片架构),有自己一套独立的指令集。

但是,关键核寄存器(SP,PC,LR等)和ARMV7架构的核寄存差不多。

RH850-U2A有四个核,每个核的Reset Vector地址可以通过Option Byte(RH850特有的配置字,可以配置系统时钟,Reset Vector地址等很多关键信息)配置,核0(PE0)和核1(PE1)的默认(default)Reset Vector地址是0x0000_0000(也就是说,系统上电后PC指针把0x0000_0000起始地址处存放的程序所在地址装载到PC指针),核2(PE2)和核3(PE3)的默认(default)Reset 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_0004,RH850-U2A PE0的Default Reset Vector是0x0000_0000。

3. 中断向量表控制寄存器中存储的值就说中断向量表的基地址,我们在系统开发的不同阶段(BootLoader和APP)会对其进行重映射,也就是BooLoader和APP中中断向量表的基地址是不一样。

4. 异常中断处理函数需要明确定义好,防止系统产生异常中断后找不到异常中断处理函数程序跑飞。

这篇关于【RH850U2A芯片】Reset Vector和Interrupt Vector介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652542

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe