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.

[参考译文] TMS570LS3137:在调试模式下观察复位源时、SYSESR 寄存器不能按预期工作

Guru**** 2553260 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1040466/tms570ls3137-sysesr-register-is-not-working-as-intended-while-observing-reset-source-in-debug-mode

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

大家好、当我阅读数据表时、有人说:

BIT15会通知发生上电复位、我从这一点了解到、当我的 UC 上电时、该位将被拉高。

但是、在调试模式下、我从未见过该位为高电平。 只有外部 RST 标志(EXTRST)变为高电平。

在我的应用中、我必须观察我的系统是上电还是软件复位。

另一方面,是否有任何中断处理程序通知 UC 即将断电?  

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

    我注意到了这一点  

    void _c_int00(void)
    监视这些标志的状态并在触发时清除。 因此、我在 这里的行的这个"if"防护中输入了一个断点  

        /* check for power-on reset condition */
        /*SAFETYMCUSW 139 S MR:13.7 <APPROVED> "Hardware status bit read check" */
        if ((SYS_EXCEPTION & POWERON_RESET) != 0U)
    以进行观察。 但是、每当我构建并运行代码时、应用程序永远不会达到该断点。

    另一方面、Watchdog_reset 的行为与 power_reset 类似。 它在启动时变为高电平、并在_c_int00函数中清除、此后不会触发、直到再次发生上电事件。

    BTW,将代码加载到 UC 中应触发  POWERON_RESET,对吧?

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

    您好、Ismail、

    上电复位仅通过器件下电上电或将 nPORRST 引脚拉至低电平然后拉至高电平来触发。 将代码加载到 uC 中不会触发上电复位。

    您可以在清除 SYSESR 之前加1代码执行、然后读取 SYSESR 寄存器的实际值。

    上电复位后、代码将在 while (ADC=0)处停止。 将 JTAG 仿真器连接到目标、并从寄存器窗口中读取 SYSESR 值:

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

    您好、Wang 先生、我定义了一个全局变量并为此变量分配了 SysEr Content、但当程序跳转到主函数时、  在完成启动问题后、我的全局变量内容会由于在退出启动前重置 ram-ROM 操作而重置。

    保存 SysEr 内容的最佳方法是什么? 有人建议使用 FLASHBANK7、 在本例中、我想知道在 启动函数中插入"对 flashbank7进行编程的代码"的最佳位置是什么、这很重要、因为如果我在必要的情况下插入未初始化的代码、可能会导致错误。

    我在启动时尝试对 flashbank7进行编程、但我失败了。 我上传了我插入的代码。 我刚刚尝试了一个虚拟字节来写入 Fbank7起始地址。

    如果我对、则会在 FlashWrapper 中的查询 FMdlStat 寄存器的状态时占用代码。

    FMdlStat  值为 0x00000410 (十六进制)。 这意味着10。 和4. 位被置位。  

    10.bit 显示

    擦除验证
    该位置位时表明一个扇区在最大允许数量的之后没有被成功擦除
    为擦除操作提供了擦除脉冲。 在擦除验证命令期间、此标志被置位
    如果发现某个位为0、则立即执行该操作。

    我必须怎么做?  

    我们使用16MHz 的晶体示波器、并通过 PLL 将其转换为160MHz。

    这个代码块在 main 中运行良好。

    最后、此代码仅在 执行_TI_auto_init 函数后才起作用。

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

    全局变量内容将由_c_int00()  中的 memoryInit()、Pbist 和__TI_auto_init()清除。

    HALCOGen 可生成 FEE 驱动器、用于擦除/编程用作仿真 EEPROM 的组7。

    您需要首先启用 FEE 驱动器:

    请按照 FEE 示例的说明操作:

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

    王先生,我回顾了这个例子,

    TI_Fee_WriteSync(BlockNumber, &SpecialRamBlock[0]);
    SpecialRamBlock 作为参数传递,但不包含其大小信息。 此函数如何知道要写入的数组的大小?
    我查看了代码、但未找到。 在哪里可以找到 BlockNumber ID 列表以及 它们指向的地址块?
    我无法在手动中找到。
    此模块仅用于编程或擦除闪存组7向右
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ismail、

    在 HALOCGen FEE 配置窗口中、您可以定义块的数量和每个块的大小。 调用 FEE API 时、使用块编号作为函数参数就足够了。

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

    用户指南位于:

    C:\ti\Hercules \HALCoGen\v04.07.01\Docs

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

    嗯、现在还可以。 还有一个问题、在该示例中、有一段代码  

    	do
    	{
    		TI_Fee_MainFunction();
    		delay();
    		Status=TI_Fee_GetStatus(0);
    	}
    	while(Status!=IDLE);

    在每次调用擦除或编程函数后,是否需要调用此代码?

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

    TI_fee_MainFunction()用于完成由擦除/写入函数启动的闪存或数据操作。 应定期调用它。

    我在调用擦除/编程(异步)函数后调用此函数

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

    感谢王先生、我将在 sys_startup 中尝试这些 API 函数以保存 SYSESR 内容、并提供有关结果的反馈。