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.

[参考译文] TMS570LC4357:TMS570 SWRST未导致EXTRST标志

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1085692/tms570lc4357-tms570-swrst-not-causing-extrst-flag

部件号:TMS570LC4357

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标志?

电话: https://www.ti.com/lit/ug/spnu563a/spnu563a.pdf?ts=1643142714687&ref_url=https%253A%252F%252Fwww.google.com%252F

TRM的相对页面是第199页

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

    我还想链接此线程:

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/69.3755万/tms570lc4357-data-abort-after-software--or-watchdog-triggered-reset</s>4357

    这似乎与我所面对的问题类似。 我认为这个问题没有得到妥善解决。

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

    你好Dustin,

    我注意到LC43x HDK上存在问题。 我将检查其它主板上的SWRST。 如果未设置EXTRST,我们需要更改 getResetSource(void)中的代码或将代码添加到c_int00()以处理SW重置。

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

    你好Dustin,

    我在LC43x启动板上运行相同的测试。 EXTRST位由SW复位设置( systemREG1->SYSECR = 0xC000;)。 在发出SW Reset (软件重置)之前,SYSESR被清除为0x0万。 SW重置后,ESR=0x018。

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

    嗯。 奇怪的是,我的调查结果与此不符。 用于检查SYESR寄存器的代码中的断点位于何处? 在调用getResetSource()函数之前?

    这是否是具有TMS570.4357万板载的REV E板? 您知道确切的芯片编号吗?

    我的发现与链接线中的Jens帖子一致。 我将在这里包括以下声明:

    e2e.ti.com/.../tms570lc4357-data-abort-after-software--or-watchdog-triggered-reset

    您好,Sunil,

    我想我们所说的是两个不同的问题。 我按您所述更改了getResetSource函数,但在输入该函数时,从未设置EXT_RESET位。 该功能始终返回正确的重置源。 它并不总是返回假定的EXT_RESET。

    因此,当我执行软件重置时,getResetSource会正确返回sw_reset。 然后在_c_int00中,对于sw_reset,将跳过开关中的所有初始化,并且我的应用程序崩溃。 当我将case sw_reset放在交换机的顶部时,似乎工作正常,但我不确定这是否是正确的方法。

    此致,

    Jens

    此外,还与此声明一致:

    您好,Sunil,


    我目前使用的是HDK,没有对重置电路进行任何修改。 我用示波器检查了nRST引脚;当我导致SW-或看门狗重置时,不会驱动低电平。nRST仅在按下S3按钮(信号Warm_RSTN)时驱动低电平。 S3按钮触发的重置被检测为EXT_RESET (0x0008)。
    因此我将修补短期初始化序列,并在建议的重置处理程序就绪时再次检查它。


    谢谢,此致,
    Jens

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

    QJ:您好!

    我想跟进这个问题。 专门了解有关测试环境的更多信息,以及您的设置和我的设置之间的不同之处。 我想确认,我不会在芯片/板上看到不同的结果。

    我们非常感谢您提供有关开发设置的任何附加信息,例如开发主板版本号,开发主板上的特定处理器扩展号以及您测试结果的位置。

    谢谢!

    达斯丁

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

    我在 rstSrc = getResetSource();之前读取sysESR;

    我在main()中发出软件重置;

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

    我制造的PCB上没有发现这个问题。 仅在我使用的TI开发套件上。 可能是芯片缺陷。 我将此标记为"已解决"。