小编use*_*767的帖子

复位后的ARM PC值

我是MCU的新手,并试图弄清楚基于arm(Cortex M3-M4)的MCU是如何启动的.因为启动是针对任何SOC的,所以我采用了STM的示例硬件板进行案例研究.

主板:STMicroelectronics - STM32L476 32位.

在该板中,当引导模式为(x0)"从用户闪存引导"时,电路板将0x0000000地址映射到闪存地址.在闪存上我已经粘贴了我的二进制文件,前4个字节指向矢量表第一个条目,即esp.现在如果我按下复位按钮ARM文档说PC值将设置为0x00000000.

CPU通常基于PC -> PC + 1循环执行指令流.在这种情况下,如果我看到PC值指向esp,这不是指令.Arm CPU如何做不使用该指令地址的逻辑,但跳转到地址处的值存储0x00000004

或者是这种情况:复位会产生一个特殊的硬件中断并导致PC值为at 0x00000004,如果是这样的话,为什么Arm文档说它将PC值设置为0x00000000

参考:http://infocenter.arm.com/help/index.jsp?topic = / com.arm.doc.faqs/ka3761.html

上电复位后ARM寄存器中有哪些值?适用于:ARM1020/22E,ARM1026EJ-S,ARM1136,ARM720T,ARM7EJ-S,ARM7TDMI,ARM7TDMI-S,ARM920/922T,ARM926EJ-S,ARM940T,ARM946E-S,ARM966E-S,ARM9TDMI

应答寄存器R0-R14(包括存储寄存器)和SPSR(在所有模式下)在复位后未定义.

如果内核具有VINITHI或CFGHIVECS输入,当核心保持复位时,程序计数器(PC/R15)将被设置为0x000000或0xFFFF0000.应设置此输入以反映系统中矢量表的基础所在的位置.

当前程序状态寄存器(CPSR)将指示ARM内核已启动处于ARM状态,Supervisor模式同时设置了FIQ和IRQ掩码位.条件代码标志将是未定义的.有关CPSR的详细说明,请参阅"ARM体系结构手册".

microcontroller arm cortex-m3 stm32 thumb

4
推荐指数
2
解决办法
1401
查看次数

标签 统计

arm ×1

cortex-m3 ×1

microcontroller ×1

stm32 ×1

thumb ×1