Cortex-m3 异常切换进Trumble模式

MCU型号是STM32F107VC, Processor 是 Cortex-m3。

    以下是从堆栈中恢复现场后的跳转。 在执行BX  LR的过程中遇到问题。

MSR IPSR,a1              
 80005e6:	f380 8805 	msr	IPSR, r0

LDMIA sp!,{r0-r12,lr}     //Recover all registers and resume
 80005ea:	e8bd 5fff 	ldmia.w	sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
 
bx lr                         //at point of interrupt
 80005ee:	4770      	bx	lr


执行0x80005ee处代码,Jlink 仿真器的错误提示。

 Performing single step...
WARNING: T-bit of XPSR is 0 but should be 1. Changed to 1.
...Target halted (DBGRQ, PC = 0x08000D14)

执行前后的寄存器Dump结果


执行0x80005e6 前

0x00000000 in ?? ()
(gdb) source dump_reg.gdb
R0 = 01000020, R1 = 20002564, R2 = 01000000, R3 = 00000001
R4 = 20000060, R5 = 20000060, R6 = 20000714, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 20000064, R11= 20000CC0
R12= 20000CC4, R13= 20000C88, MSP= 20000C88, PSP= D478C6E4
R14(LR) = FFFFFFF9, R15(PC) = 080005E6
XPSR 6100000F, APSR 60000000, EPSR 01000000, IPSR 0000000F
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading from address 0xE000ED24 (Data = 0x00000800)
Reading from address 0xE000ED28 (Data = 0x00)
Reading from address 0xE000ED29 (Data = 0x00)
Reading from address 0xE000ED2A (Data = 0x0000)
Reading from address 0xE000ED2C (Data = 0x00000000)
Reading from address 0xE000ED30 (Data = 0x00000002)
Reading from address 0xE000ED34 (Data = 0xE000EDF8)
Reading from address 0xE000ED38 (Data = 0xE000EDF8)
Reading from address 0xE000ED3C (Data = 0x00000000)

执行0x80005EA前

R0 = 01000020, R1 = 20002564, R2 = 01000000, R3 = 00000001
R4 = 20000060, R5 = 20000060, R6 = 20000714, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 20000064, R11= 20000CC0
R12= 20000CC4, R13= 20000C88, MSP= 20000C88, PSP= D478C6E4
R14(LR) = FFFFFFF9, R15(PC) = 080005EA
XPSR 6100000F, APSR 60000000, EPSR 01000000, IPSR 0000000F
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading from address 0xE000ED24 (Data = 0x00000800)
Reading from address 0xE000ED28 (Data = 0x00)
Reading from address 0xE000ED29 (Data = 0x00)
Reading from address 0xE000ED2A (Data = 0x0000)
Reading from address 0xE000ED2C (Data = 0x00000000)
Reading from address 0xE000ED30 (Data = 0x00000001)
Reading from address 0xE000ED34 (Data = 0xE000EDF8)
Reading from address 0xE000ED38 (Data = 0xE000EDF8)
Reading from address 0xE000ED3C (Data = 0x00000000)

执行0x80005EE前


R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 200008C8, R11= 20000CC0
R12= 20000CC0, R13= 20000CC0, MSP= 20000CC0, PSP= D478C6E4
R14(LR) = 08000D14, R15(PC) = 080005EE
XPSR 6100000F, APSR 60000000, EPSR 01000000, IPSR 0000000F
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading from address 0xE000ED24 (Data = 0x00000800)
Reading from address 0xE000ED28 (Data = 0x00)
Reading from address 0xE000ED29 (Data = 0x00)
Reading from address 0xE000ED2A (Data = 0x0000)
Reading from address 0xE000ED2C (Data = 0x00000000)
Reading from address 0xE000ED30 (Data = 0x00000001)
Reading from address 0xE000ED34 (Data = 0xE000EDF8)
Reading from address 0xE000ED38 (Data = 0xE000EDF8)
Reading from address 0xE000ED3C (Data = 0x00000000)


执行0x80005EE后

R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 200008C8, R11= 20000CC0
R12= 20000CC0, R13= 20000CC0, MSP= 20000CC0, PSP= D478C6E4
R14(LR) = 08000D14, R15(PC) = 08000D14
XPSR 6100000F, APSR 60000000, EPSR 01000000, IPSR 0000000F
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading from address 0xE000ED24 (Data = 0x00000800)
Reading from address 0xE000ED28 (Data = 0x00)
Reading from address 0xE000ED29 (Data = 0x00)
Reading from address 0xE000ED2A (Data = 0x0000)
Reading from address 0xE000ED2C (Data = 0x00000000)
Reading from address 0xE000ED30 (Data = 0x00000001)
Reading from address 0xE000ED34 (Data = 0xE000EDF8)
Reading from address 0xE000ED38 (Data = 0xE000EDF8)
Reading from address 0xE000ED3C (Data = 0x00000000)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值