STM32中手动设置了中断映射,中断的响应具体过程是怎么...
时间:10-02
整理:3721RD
点击:
小弟不解——手动设置了 中断映射,中断的响应具体过程是如何的
是跳到 原来的 复位中断向量 查询相应的中断,还是直接跳到新的中断向量地址上?另外,NVIC_SetVectorTable 这个是STM32的库函数 实现的是 中断向量的重映射,这个东西是怎么访问的,
起始地址是0x08000000 这个是默认的中断向量起始地址, 那么我设置便宜0x1000 呢?
网上看了下资料太模糊了,希望各位友人有小弟讲解一下。不胜感激。
是跳到 原来的 复位中断向量 查询相应的中断,还是直接跳到新的中断向量地址上?另外,NVIC_SetVectorTable 这个是STM32的库函数 实现的是 中断向量的重映射,这个东西是怎么访问的,
起始地址是0x08000000 这个是默认的中断向量起始地址, 那么我设置便宜0x1000 呢?
网上看了下资料太模糊了,希望各位友人有小弟讲解一下。不胜感激。
CM3中规定上电后CPU是从0地址开始执行,但是这里中断向量表却被烧写在0x0800 0000地址里,那启动时不就找不到中断向量表了?既然CM3定下的规矩是从0地址启动,SMT32当然不能破坏ARM定下的“规矩”,所以它做了一个启动映射的过程,就是和芯片上总能见到的BOOT0和BOOT1有关了,当选择从主Flash启动模式后,芯片一上电,Flash的0x0800 0000地址被映射到0地址处,不影响CM3内核的读取,所以这时的CM3既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码还是在0x0800 0000地址处存储的。这就是最难理解的地方,其实,这是基本上所有ARM芯片采用的启动映射方法。ARM7,ARM9没有内部Flash的通常都是这样做的。这个过程出自STM32 referenc manual手册