TMS570LC43x的数据表指出,EXTRST (外部重置标志)将在SWRST事件期间设置。 但是,当触发SWRST事件时,只设置SWRST标志,而不设置EXTRST标志。

以下是启动SWRST的函数调用:
void warmReset(void)
{
systemREG1->SYSECR |= SYS_RESET_BIT;
return;
}
在重置过程中 ,调用_c_int00()函数来初始化处理器。 在此阶段,调用getResetSource()函数,该函数检查SYESR寄存器的状态。 此寄存器显示在重置事件期间设置的标志。 在调用此函数之前,SYSESR寄存器将读取0x0.001万 (仅设置了SWRST位),而我本来希望它是0x0.0018万 (SWRST位和EXTRST位)。
如果没有设置EXTRST标志,启动代码将永远无法返回已发生sw_reset事件,这将导致将来出现问题。
/* SourceId : SYSTEM_SourceId_008 */
/* DesignId : SYSTEM_DesignId_008 */
/* Requirements : HL_CONQ_SYSTEM_SR9 */
resetSource_t getResetSource(void)
{
register resetSource_t rst_source;
if ((SYS_EXCEPTION & (uint32)POWERON_RESET) != 0U)
{
/* power-on reset condition */
rst_source = POWERON_RESET;
/* Clear all exception status Flag and proceed since it's power up */
SYS_EXCEPTION = 0x0000FFFFU;
}
else if ((SYS_EXCEPTION & (uint32)EXT_RESET) != 0U)
{
SYS_EXCEPTION = (uint32)EXT_RESET;
/*** Check for other causes of EXT_RESET that would take precedence **/
if ((SYS_EXCEPTION & (uint32)OSC_FAILURE_RESET) != 0U)
{
/* Reset caused due to oscillator failure. Add user code here to handle oscillator failure */
rst_source = OSC_FAILURE_RESET;
SYS_EXCEPTION = (uint32)OSC_FAILURE_RESET;
}
else if ((SYS_EXCEPTION & (uint32)WATCHDOG_RESET) !=0U)
{
/* Reset caused due watchdog violation */
rst_source = WATCHDOG_RESET;
SYS_EXCEPTION = (uint32)WATCHDOG_RESET;
}
else if ((SYS_EXCEPTION & (uint32)WATCHDOG2_RESET) !=0U)
{
/* Reset caused due watchdog violation */
rst_source = WATCHDOG2_RESET;
SYS_EXCEPTION = (uint32)WATCHDOG2_RESET;
}
else if ((SYS_EXCEPTION & (uint32)SW_RESET) != 0U)
{
/* Reset caused due to software reset. */
rst_source = SW_RESET;
SYS_EXCEPTION = (uint32)SW_RESET;
}
else
{
/* Reset caused due to External reset. */
rst_source = EXT_RESET;
}
}
else if ((SYS_EXCEPTION & (uint32)DEBUG_RESET) !=0U)
{
/* Reset caused due Debug reset request */
rst_source = DEBUG_RESET;
SYS_EXCEPTION = (uint32)DEBUG_RESET;
}
else if ((SYS_EXCEPTION & (uint32)CPU0_RESET) !=0U)
{
/* Reset caused due to CPU0 reset. CPU reset can be caused by CPU self-test completion, or by toggling the "CPU RESET" bit of the CPU Reset Control Register. */
rst_source = CPU0_RESET;
SYS_EXCEPTION = (uint32)CPU0_RESET;
}
else
{
/* No_reset occured. */
rst_source = NO_RESET;
}
return rst_source;
}
此外,为了确认EXTRST标志是否正常工作,当我通过驱动nRST引脚低电平执行实际外部热重置时,结果是SYESR寄存器如预期为0x0.0008万。
我目前正在开发TMS570LC43x Hercules开发套件,并已使用WARE_RSTN按钮测试上述组件。
总之,SWRST标志是否也应自动标记EXTRST标志?
TRM的相对页面是第199页

