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.

[参考译文] MSP432E401Y:执行期间发出复位命令的正确方法是什么

Guru**** 2561860 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/901101/msp432e401y-what-is-the-proper-way-to-issue-reset-during-execution

器件型号:MSP432E401Y

 在我的应用程序结束时、我想发出复位命令。  在我的应用开发期间、我一直在使用 LaunchPad 上的"重置"按钮、但我想自动执行该过程。  我已经尝试发出 SysCtlReset()作为 main()中的最后一个命令,但它似乎不起作用。  我的程序在复位后经过一系列初始化步骤并将状态报告给显示 UART、但是我在应用程序完成后看不到 UART 上的任何活动(此时我希望 SysCtlReset 强制执行复位和重新初始化)。

如何通过软件复位和 MSP432E4?  我不使用 RTOS、但我使用的是 lwIP。

-Phil

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

    您好、Phil、

    如我们 的技术参考手册 www.ti.com/.../slau723a.pdf 中所述 ,可以通过基于软件的复位来复位整个器件。

    "4.1.2.6软件复位"一章对此进行了说明。 要使用的相应控制位是 SYSRESREQ。

    根据您的描述、我无法判断您是否正在正确使用和应用复位、但可能还有其他原因、即您遇到错误的 UART 事件的原因。 例如、您的 UART 初始化可能不安全、会运行到由模块和 GPIO 初始化引起的中断中。

    此致

    Peter

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

    Peter、

    谢谢你。  您的响应提示我找到 SysCtlReset()的源,它执行您描述的操作,因此我决定用 它的功能代码替换 SysCtlReset()调用:

    HWREG (0xE000ED0C)= NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ;
    
    while (1)
    {
    UARTprintf ("已请求复位。\n");
    } 

    我添加了 UART 打印作为测试是否正在进入 while (1)循环的方法。  在执行结束时、我从未在显示屏上看到字符串"reset requested"、因此我希望系统复位被触发。  我还在调试器中的 while (1)语句上设置了一个断点、它从未命中、这也使我相信会触发复位。

    我认为您误解了我有关 UART 活动的看法。 没有错误的 UART 事件、实际上 UART 上没有发生任何事情。  这是我的 main()函数的开头,一直到 UART 输出到显示屏的位置。

    void main (void)
    {
    uint32_t ui32User0、ui32User1;
    int32_t status;
    
    运行= false; //清除执行信标
    dataReady = false; //清除数据信标
    
    Board_init(); //从 TI 驱动程序模块进行电路板初始化
    
    G_ui32SysClock = init_clk (); //配置系统时钟和可选的 ADC 时钟输出
    
    init_gpio(); //配置器件引脚
    
    init_uart (g_ui32SysClock); //将 UART 配置为系统时钟速率
    
    UARTprintf ("\033[2J\033[H"); //清除终端并打印横幅
    UARTprintf ("ADS1283多通道数据采集已启动\n\n");
    

    您是否在前面的代码中看到任何您认为可能破坏复位的内容?

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

    您好、Phil、

    很抱歉耽误你的时间。 不、目前我没有发现任何可疑情况。 我宁愿考虑其他问题。 一方面在器件上执行复位、另一方面在尝试通过调试接口可靠地调试行为时、总是有点危险。 我们在 TRM 部分的文档中向您介绍了仅在 JTAG 功能方面复位 GPIO 功能。 因此它应该是干净的。 我仍然倾向于在 IO 上使用软件生成的触发信号来调试复位功能等功能、并且在没有连接 JTAG 的情况下对其进行测试。

    这意味着、我将生成一个代码、该代码需要某种外部触发器、使其成为 GPIO 上的边沿、或者使用基本上相同的按钮来发出 SW 复位、就像在您的情况下一样、 和使用代码执行的 GPIO 信号来指示复位后运行的代码部分。

    此致

    Peter

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

    谢谢 Peter。  这给我一些关于程序的好想法。

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

    您好、Philip、

    非常感谢您的反馈。 一条与我们的 E2E 系统相关的评论。 如果您想指明您的问题已解决、并且还想发布最终消息、请先发送回复、然后单击"已解决"。 原因是、点击"已解决"后发布会重新打开问题。

    现在,我将根据你的答复从我这边关闭这一程序。 如果您需要其他支持、我们当然乐意为您提供支持。

    此致

    Peter