Part Number:LP-AM243
怎么写代码对am243的Cortex-R5的调试寄存器进行配置?我想设置调试寄存器让程序单步运行,应该怎么写代码设置?用mrs和msr的指令不行,是不是要用映射寄存器啊?
Gary Lu:
在ARM体系结构中,对调试寄存器进行配置通常需要使用专门的调试指令,而不是普通的`MRS`和`MSR`指令。
? ? 说:怎么写代码对am243的Cortex-R5的调试寄存器进行配置?
; 1. 启用调试功能 LDR R0, =0xE0042000 ; DBGDSCR 地址 LDR R1, [R0] ; 读取当前值 ORR R1, R1, #(1 << 1) ; 设置 HALTREQ 位 STR R1, [R0] ; 写回 DBGDSCR 寄存器; 2. 配置单步运行 LDR R0, =0xE0043000 ; DBCR 地址 LDR R1, #(1 << 0) ; 设置 SS (Single Step) 位 STR R1, [R0] ; 写回 DBCR 寄存器; 3. 触发单步运行 LDR R0, =0xE0042000 ; DBGDSCR 地址 LDR R1, [R0] ; 读取当前值 ORR R1, R1, #(1 << 0) ; 设置 HALTREQ 位 STR R1, [R0] ; 写回 DBGDSCR 寄存器
,
? ?:
am243的DBGDSCR寄存器的地址不是0xE0042000,操作这个地址会进入异常。
,
? ?:
另外DBGDSCR的0位在手册中是这样解释的,不是用来实现单步的
,
Gary Lu:
感谢指正
,
Gary Lu:
非常抱歉前述的误导。
我重新写一段示例,用于启用单步执行:
; 启用调试功能 LDR R0, =DBGDSCR_ADDR ; 替换为正确的 DBGDSCR 地址 LDR R1, [R0] ORR R1, R1, #(1 << 1) ; 设置 HALTREQ 位 STR R1, [R0]; 配置单步运行 LDR R0, =DBCR_ADDR ; 替换为正确的 DBCR 地址 LDR R1, [R0] ORR R1, R1, #(1 << 0) ; 设置 SS (Single Step) 位 STR R1, [R0]; 触发单步运行 LDR R0, =DBGDSCR_ADDR ; 替换为正确的 DBGDSCR 地址 LDR R1, [R0] ORR R1, R1, #(1 << 0) ; 设置 HALTREQ 位 STR R1, [R0]代码的 `DBGDSCR_ADDR` 和 `DBCR_ADDR` 要替换为实际 DBGDSCR 和 DBCR 寄存器地址。
如还有问题,欢迎您指正
,
? ?:
那么请问DBGDSCR_ADDR和 DBCR_ADDR的地址是啥?如图,这些寄存器的地址是由芯片厂商决定的,所以请问具体地址是啥?另外DBGDSCR寄存器我用cp14即MRC和MCR的方式去操作,会进入undefined异常,所以请问该怎么操作?如图,如果是方法1,V7debug的cp14接口由厂商定义的,所以是有TI自己定义的方法吗?如果是方法2地址映射,也是由TI设定的,也请告知下映射的地址区。
,
Gary Lu:
为您咨询了资深产品线工程师,这需要一些时间
,
? ?:
有消息了吗?
,
Gary Lu:
已经催促了
,
? ?:
请问有回复了吗?
,
Gary Lu:
抱歉此贴(https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1309815/lp-am243-how-to-write-code-to-configure-the-debug-register-of-the-am243-cortex-r5 )还没有回复。
为更加有效地解决您的问题,建议您将问题发布在E2E英文技术论坛上(https://e2e.ti.com/support/processors-group/processors/f/processors-forum ),将由资深的英文论坛工程师为您提供帮助。如果您对于英文表达有顾虑,请随时告诉我们,我们将竭力为您提供帮助。
,
Gary Lu:
工程师已回复:
CCS 配置程序的所有内容以单步模式运行。R5自行配置有什么具体要求吗?您能分享更多相关信息吗?
,
? ?:
R5自行配置是因为我们想用软件实现代码单步运行的效果,而不是用ccs在线debug仿真程序的情况下实行单步。
,
Gary Lu:
我需要检查如何在没有 CCS 的情况下从 R5 进行单步调试