请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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