ARM M3中的VTOR使用

时间:2017-04-23 22:20:28

标签: arm embedded cortex-m3

我想知道在基于ARM M3的MCU上,使用VTOR寄存器重定位向量表有什么好处?我理解的原因是:

  1. 需要在运行时更改向量表,并且默认地址(0x0是只读)
  2. 从SRAM中读取(说它重新定位到SRAM区域的开头)可能比闪存区域更快?
  3. 这是否意味着如果在编译期间定义并知道所有中断处理程序,则根本不需要使用VTOR?

3 个答案:

答案 0 :(得分:6)

原因很多。不过我认为可能有三个主要原因。

  1. 您正在使用一个基于0x00000000的引导加载程序。当引导程序完成其内容时,它会跳转到应用程序。应用程序可能希望拥有自己的向量表,以便引导加载程序可以在启动应用程序之前设置地址。

  2. 您需要一个基于RAM的向量表,以便您可以在运行时安装不同的处理程序。

  3. 在运行之前,应用程序可能会从某些外部ROM加载到RAM中。

答案 1 :(得分:1)

此类功能的目的是引导程序。例如,当引导加载程序对用户定义的向量表所在的闪存进行编程时,MCU将不得不使用位于其他地方的向量表。

答案 2 :(得分:0)

每次重置ARM M3时,默认情况下它将值从地址0x00000000取到SP寄存器中,并将值从地址0x00000004送到PC。这是引导代码执行的起点。 发生这种情况是因为VTOR寄存器默认设置为0,向量表的起始地址设置为0x0000000。

Bootcode检查UART是否要求从启动代码开始接收新固件。如果需要,引导代码将逐字节接收,并使用从UART端口接收到的数据对闪存进行编程。

完成此作业后,引导代码将VTOR寄存器更改为0x08001000,然后跳转到地址0x0001000,其中是新的向量表起始地址。这是起始用户代码

void main() 

带有针对Cortex M的可编程VTOR的此功能是出色且简化的启动代码过程和代码。通常,微处理器/微控制器具有固定的向量值地址。