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.

[参考译文] CC3235SF:可编程复位看起来不起作用。

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1390484/cc3235sf-programmatic-reset-does-not-appear-to-work

器件型号:CC3235SF

工具与软件:

您好!

我已经为各种故障(例如总线错误)创建了故障处理程序。 这样可以防止故障升级为硬故障、我们得到信息更丰富的回溯。 我只希望故障处理程序在我们处于调试模式时停止执行(这能够很好地实现 BTW)。 如果未处于调试模式、我想复位 CC3235、使其重新启动并恢复执行。 我目前正在尝试使用 SCB AICR 寄存器执行此操作。 以下是该代码的摘录:

// Defines to get into the AIRCR register and reset the CPU
#define SCB_AIRCR_VECTKEY_Pos       16U                                     /*!< SCB AIRCR: VECTKEY Position */
#define SCB_AIRCR_VECTKEY_Msk       (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)     /*!< SCB AIRCR: VECTKEY Mask */

#define SCB_AIRCR_SYSRESETREQ_Pos   2U                                      /*!< SCB AIRCR: SYSRESETREQ Position */
#define SCB_AIRCR_SYSRESETREQ_Msk   (1UL << SCB_AIRCR_SYSRESETREQ_Pos)      /*!< SCB AIRCR: SYSRESETREQ Mask */


/**
 * \details	    Generates a soft reset by writing the SCB->AIRCR register with
 *              the vector key and the reset bit set.
 *
 * \param[in]	None
 * \param[out]	None
 *
 * \return	    None
 *
 * \note        None
 */
static void SoftReset(void)
{
    *(volatile uint32_t *)SCB_AIRCR_ADDR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
                                            SCB_AIRCR_SYSRESETREQ_Msk);
    
    // Wait for the reset
    for(;;)
    {
        // intentional infinite loop until the reset fires.
    }
}

但是、不会发生复位。 我已经尝试反转矢量键,甚至只是硬编码整个事情。 AICR 复位在 CC3235上不起作用吗? 我的一些 google 搜索结果表明这可能是 ARM 内核上的一个常见问题。 我想我可以启用看门狗、让它在本例中将处理器复位、但除非绝对必要、否则我不想执行该步骤。

谢谢!

John

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

    尊敬的 John:

    CC32xx 是一个复杂的 SoC (多个 Cortex-M 内核和 DSP)。 对于复位、我建议使用 PRCM API 调用休眠、如下所示:

    MAP_PRCMHibernateIntervalSet(330);
    MAP_PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
    MAP_PRCMHibernateEnter();

    1月

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

    具有很大的影响。 谢谢 Jan!