工具与软件:
我要尝试在 J Link 脚本中实现 CPU 和外设复位过程。 我使用 wiki.segger.com/.../中的脚本 Example_Reset_Cortex Normal_350.JLinkScript 作为基础。 但是、只复位 CPU、不复位外设。 您是否有一个示例、说明如何使用 JLink 脚本执行此复位并在复位处理程序前立即停止 CPU?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我要尝试在 J Link 脚本中实现 CPU 和外设复位过程。 我使用 wiki.segger.com/.../中的脚本 Example_Reset_Cortex Normal_350.JLinkScript 作为基础。 但是、只复位 CPU、不复位外设。 您是否有一个示例、说明如何使用 JLink 脚本执行此复位并在复位处理程序前立即停止 CPU?
大家好、Lucas:
我们没有脚本示例、您需要自己实现。
通过使用脚本和它使用的确切寄存器访问、您无法执行更高级别的复位(实际复位某些外设)。
在编写自己的脚本时、您有两种选择:
1) 1)通过 PWR-AP 复位-与上述脚本类似、写入 PWR-AP 中的 SPREC 寄存器。 设置位0可启动 PWR-AP 复位、从而复位除 CPU 复位(包括时钟系统)以外的位。 我不推荐这条路线、因为它的文档较少、并且与下一条路线的工作量相同。
2) 2)通过 SYSCTL 模块复位-写入 CPU 中的 SYSCTL 寄存器以复位器件。 这样、您只需使用调试器访问器件并重写 SYSCTL 寄存器中的一些位、即可选择所需的复位级别。
我已尝试 SYSCTL 寄存器、以及使其保持低电平少于1秒的复位引脚。 但是、我很难在复位处理程序启动时立即停止 CPU。
在原始示例中、我们使用了:
JLINK_MEM_WriteU32 (_DEMCUR_ADDR、(_DEMCR_VC_CORERESET |_DEMCR_TRCENA));//设置复位时的矢量捕捉(在复位后立即停止 CPU)
但这不适用于其他类型的复位。
大家好、Lucas:
您也可以像前面提到的迪伦那样使用我们的 PWR-AP 来做同样的事情、而不是使用 DEMCR。
它是我们器件中的第四个接入点、地址0x00处的称为 DPREC 的寄存器可在复位后修改行为。 通过将 RST CTL 位(14:16)设置为 001b、它会强制器件进入复位处理程序、并在复位后保持该状态。
我很好奇、当我使用 DEMCR 寄存器并执行复位时、它最终会从哪里返回? 它是否复位并继续运行?
当我使用 AIRCR 复位时。 SYSRESETREQ、它仅会将内核复位、并且 DEMCR 会通过在复位处理程序中停止来按预期运行。 但是、当我使用 SYSCTL 或 RESET 引脚时、它不会在复位处理程序中停止、当它停止时、它已经在某种主循环迭代中。 在 JLink 脚本函数中、在使用 SYSCTL 或引脚复位后读取 DEMCR、它会读取值0xFFFFFFFF 或0x0。 我尝试了同时使用 RST CTL 和使用 SYSCTL 和引脚进行复位、但我并不真正了解应该何时进行更改以及下一步应该怎么做。 这就是我不成功的原因。