向量表由引脚?寄存器决定?

[复制链接]
4039|12
 楼主| lord_fan 发表于 2011-10-3 11:21 | 显示全部楼层 |阅读模式
引脚不是可以设置哪里启动,向量表位置吗?
寄存器不是可以设置向量表位置?

有疑惑这到底是什么关系?区别。50分求解惑。来者有分。
sgx17 发表于 2011-10-3 18:54 | 显示全部楼层
STM32采用的是Cortex-m3内核,其中断向量默认在0x00000000位置,当然可以通过设置中断向量偏移寄存器VTOR 指向其它位置(通常把在RAM中,因为这样中断反应速度更快)
sgx17 发表于 2011-10-3 19:26 | 显示全部楼层
根据boot1,boot0引脚状态,上电启动时会选择从主内存存储器,系统存储器,内置SRAM启动,具体可以查看stm32的datasheet,这与决定向量表是没有关系的,当然无论你是决定从哪个存储器启动,其起始位置应该放置中断向量表的,之后想放在哪里,在启动完成后可以转移至其它地方的
 楼主| lord_fan 发表于 2011-10-3 19:38 | 显示全部楼层
根据boot1,boot0引脚状态,上电启动时会选择从主内存存储器,系统存储器,内置SRAM启动,具体可以查看stm32的datasheet,这与决定向量表是没有关系的,当然无论你是决定从哪个存储器启动,其起始位置应该放置中断向 ...
sgx17 发表于 2011-10-3 19:26

你的意思是说。
1、上电启动(包括复位吗?)的时候只看引脚状态来选择3个存储的地方之一。 这3个地方的地址是固定的?
2、 启动后,在运行时再根据寄存器来判断向量表在哪里?向量表由寄存器决定,不再固定。
3、寄存器的开机复位值是3个存储的地方之一?是哪个?还是根据引脚来自动设置。?
sgx17 发表于 2011-10-3 20:29 | 显示全部楼层
上电启动不包括复位,因为如果你之后将向量表偏移至其它地方,那么是从其它地方取出复位中断服务程序的地址并执行的。3个地址是固定的,运行时,由向量表偏移寄存器决定,不再固定,开机复位是根据引脚自动设置的,这样你应该明白了吧,建议最好看下datasheet
 楼主| lord_fan 发表于 2011-10-3 21:01 | 显示全部楼层
上电启动不包括复位,因为如果你之后将向量表偏移至其它地方,那么是从其它地方取出复位中断服务程序的地址并执行的。3个地址是固定的,运行时,由向量表偏移寄存器决定,不再固定,开机复位是根据引脚自动设置的, ...
sgx17 发表于 2011-10-3 20:29

寄存器存放的是偏移地址?那基址呢
sgx17 发表于 2011-10-3 21:46 | 显示全部楼层
这里说的偏移地址其实是相对于0x00000000来说的
 楼主| lord_fan 发表于 2011-10-3 21:57 | 显示全部楼层
相对于0x00000000?
是指在flash 相对0x8000...
在Sram 相对0X2000....  吗?
areshan 发表于 2011-10-4 11:48 | 显示全部楼层
怎么和AVR的有点像了,是STM32吗?
 楼主| lord_fan 发表于 2011-10-4 19:44 | 显示全部楼层
9# areshan
嗯。
sgx17 发表于 2011-10-9 10:52 | 显示全部楼层
是相对0x0000_0000,这个寄存器有点复杂(这个关系到向量表地址,其不是随便随便放的,具体是有一算法的,比如共有99个中断地址,则将99取整到2多少次方这里是128,128*4=2的9次方,就是要求你的向量表起始地址一定要低9位为0,比如0x0002_0200就合适),不过对软件员对,只要你将合适的中断向量表地址(绝对地址)写入即可!
香水城 发表于 2011-10-9 11:02 | 显示全部楼层
引脚不是可以设置哪里启动,向量表位置吗?
寄存器不是可以设置向量表位置?

有疑惑这到底是什么关系?区别。50分求解惑。来者有分。
lord_fan 发表于 2011-10-3 11:21


这是双重关系。

刚上电时,由Boot1/Boot0的配置决定向量表位置,上电程序运行之后,向量表位置则由中断向量偏移寄存器的内容决定。

程序运行之后,Boot1/Boot0的功能就不起作用了。
airwill 发表于 2011-10-9 12:26 | 显示全部楼层
总结: 引脚设置哪里启动; 寄存器设置向量表位置
:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

308

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部