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.

[参考译文] AM2632:读取 MSP 寄存器

Guru**** 2524550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1306341/am2632-reading-of-msp-register

器件型号:AM2632

大家好、我现在正在进行调试。 当问题发生时、我想要捕获堆栈帧。

我找到了有趣的 MSP 寄存器值。 本文档第25页。  e2e.ti.com/.../sprad28.pdf

我曾尝试过该示例。 但我甚至在项目的构建过程中都失败了。

错误如下:

请帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    您正在使用哪个 AM263x MCU+ SDK 版本? 最新版本为09.01.00。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我正在使用此版本- mcu_plus_sdk_am263x_08_06_00_14。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我面临看门狗重置问题。 在长期测试期间、可以重新放置电路板。 我想了解此时堆栈的状态以及其他信息、以便了解导致看门狗复位的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经连接了 USART、并希望在复位之前在那里打印此信息、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    MSP 用于 M4F 内核。 对于 R5F 内核、您应该使用 5.3中的代码在中止处理程序中获取内核寄存器:  

    hwiP_armv7r_handlers_nortos.c

    Volatile uint32_t lrVal、pcVal、spVal;
    __attribute__((naked)) void Hwip_data_abort_handler (void)
    {
    //当发生数据中止时,处理器首先在此中止
    /*存储内核寄存器*/
    _asm volatile ("mov %0,lr":"=r"( lrVal ));
    _asm volatile ("mov %0,pc":"=r"( pcVal ));
    _asm volatile ("mov %0,sp":"=r"( spVal ));
    /*调用中止处理程序的 C 版本*/
    _asm ("B Hwip_data_abort_handler_c");

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试从 Hwip_data_abort_handler_c 函数打印数据、但无法正常运行。 函数未调用或打印数据等于零

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

     Hwip_data_abort_handler 仅在数据中止发生时才被调用。

    您应该将以下 asm 代码放入事件处理程序(HwiP_EVENT_handler):

    _asm volatile ("mov %0,lr":"=r"( lrVal ));
    _asm volatile ("mov %0,pc":"=r"( pcVal ));
    _asm volatile ("mov %0,sp":"=r"( spVal ));

    然后调用 C 中的事件处理程序:

    /*调用中止处理程序的 C 版本*/
    _asm ("B Hwip_event_handler_c");  

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仿真了数据中止、并且执行以下操作:

    ------------------

    void Hwip_data_abort_handler_c (uint32_t * pMSP)
    {
       易失性 uint32_t loop = 1;
       DebugP_log ("\nUsageFault 异常\n");

       DebugP_log ("lr =%lx\n"、lrVal);
       DebugP_log ("pc =%lx\n"、pcVal);
       DebugP_log ("xpsr =%lx\n"、spVal);

       while (循环)
           ;



    void __attribute__((interrupt ("abort")、section (".text.hwi")) Hwip_data_abort_handler (void)
    {
       /*存储内核寄存器*/
       _asm volatile ("mov %0,lr":"=r"( lrVal ));
       _asm volatile ("mov %0,pc":"=r"( pcVal ));
       _asm volatile ("mov %0,sp":"=r"( spVal ));
       /*调用中止处理程序的 C 版本*/
       _asm ("B Hwip_data_abort_handler_c");

    -------------------------------------------------------

    但它不起作用、不会打印值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    您是如何在 example.syscfg 中设置 Debug_Log 的?

    确保选中"Enable UART Log"(启用 UART 日志)、并且 UART0的 COM 端口连接到 UART 仿真器(Tera Term)。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为该票证可以关闭、因此我切换到了另一种调试方式