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.

[参考译文] TMS320C5517:在我的闪存上的代码中无法进行软件复位

Guru**** 2393725 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1491457/tms320c5517-software-reset-does-not-work-in-my-code-on-flash

器件型号:TMS320C5517

工具与软件:

您好!

您能告诉我为什么软件复位、asm ("reset")在我放在闪存上的代码中无法正常工作吗?
代码可以在调试模式下正常运行。

我希望你已经有了看到这种现象的经验,你给我任何解决办法来解决它。

 

此致

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

    大家好、

    有一些问题可能会导致闪存启动失败:

    应用程序使用最后8KB 的片上存储器可能会导致问题、因为 SARAM31 (字节地址0x4E000–0x4FFFF)是为引导加载程序保留的。

    2. ROM 引导加载程序在切换到应用程序之前禁用 mport。 在使用 mport 之前、由应用程序启用 mport。

    在 main()的开头添加以下部分:

    //启用 mport 并禁用 HWA
    *(volatile ioport UINT16 *) 0x0001 = 0x020E;
    asm (" idle");

    此致、

    Ming

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

    尊敬的 Ming

    感谢您的答复。

    事情略有改变。 但问题仍然存在。

    1. SARAM31中没有任何物品。  
    (SARAM31: O = 0x04E000 l = 0x001F00 /* 8kB 单访问 RAM 31 */)

    2.  在 main 的开头添加"*(volatile ioport UINT16 *) 0x0001 = 0x020E"可以改变行为。
    在:使用"asm ("reset") ""无复位且无 UART 通信(DSP 操作停止?
    )"之前

    在  :使用   "asm ("reset") "后"无法进行复位和 UART 通信(DSP 操作)"

    据我所见、不是使用"asm ("reset")"重置。
    正如预期的那样、在调试时、复位由 asm ("reset")完成、但当将相同的代码写入闪存时、其行为会有所不同。

    您对解决方案有什么想法吗?

    此致、

     

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

    大家好、

    您能否使用 C5517 EVM 上的复位按钮、而不能使用"软件复位"(asm ("reset"))?

    此致、

    Ming

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

    尊敬的  Ming

    感谢您的持续合作。


    我将在调试模式中创建的程序代码编写到了 C5517 EVM。

    当我按下复位按钮(SW1)时、  
    1. XF LED 亮起  
    2.未重置(即使按下重置按钮、程序仍会继续运行)
    但是、我已经确认硬件复位在原型板上可以正常工作。
    我认为、如果我使用 asm ("reset")、程序计数器和其他东西将被初始化、它将从头开始运行、而我不必添加任何特殊的程序代码、但我是否弄错了?
    在程序初始化操作期间执行中断(IFR)等。
     
    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    如果硬件复位适合您、则意味着启动映像可以正常运行? 我不理解您为什么要使用 asm ("reset")。

    此致、

    Ming

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

    尊敬的  Ming

    感谢您的持续合作。
    我很抱歉解释不充分。
    我想做的是、通过 UART 通信接收到特定命令(复位)后开始初始化操作。

    当前的情况是什么

    1.将程序代码写入闪存。

    2.在硬件复位的情况下从闪存读取程序代码而不会出现任何问题。

    3.通过 UART 发送复位命令并执行 asm ("reset")

    4.从闪存中读取并运行程序代码时、重置不能正确执行、因此我发布了此内容。

       但 复位 在调试模式下执行

    一种选择是不使用 asm ("reset")、只需重新初始化 I/O 等

    当收到复位命令时、如果您有任何其他想法、可以告诉我吗?


    此致、

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

    大家好、

    软件复位不会触发 ROM 重新运行、因为以下原因:

    标准器件包括驻留在 ROM 中的引导加载程序以及引导加载程序代码
    硬件复位后立即执行。 当 ST3状态寄存器的 MPNMC 位域被置位时
    通过软件、片上 ROM 被禁用、并且不存在于存储器映射和字节地址中
    范围 FE 0000h - FF FFFFh 未映射。 硬件复位总是清零 MPNMC 位、但并没有清零
    可能在硬件复位时禁用 ROM。 但是、软件复位指令不会影响
    MPNMC 位。 程序和数据总线可访问 ROM。 每个 SAROM 块可以执行
    每个周期一个字读取访问。

    要强制在软件中重新运行 ROM 代码、您可以分支到地址0xFFFFFC 或将0xFFFFFC 分配到 PC。

    此致、

    Ming

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

    大家好、

    抱歉拼写错误。 上一个员额的最后一段应该是:

    为了强制 ROM 代码在软件中重新运行、您可以分支到地址0xFFFF00或将0xFFFF00分配到 PC。

    此致、

    Ming

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

    尊敬的  Ming

    非常感谢您的支持。

    void software_reset (void)//转到0xFFFF00 或 FFFFF0

    ((void (*)())0xFFFF00)();
    }

    程序代码。将在 调试模式下重置。  但如果写入闪存、仍然无法正常工作。
    因此、以同样的方式、我们能够通过读取存储器映射中_c_int00所在的地址来执行软件复位。(即使写入闪存、软件复位也可以)
    读取_c_int00是否会出现任何问题?

    此致、

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

    大家好、

    这是因为以下陈述:

    当 通过软件设置 ST3状态寄存器的 MPNMC 位字段时、片上 ROM 被禁用、不存在于存储器映射中、并且字节地址 范围 FE 0000h - FF FFFFh 未映射。

     在分支之前、可以将 ST3状态寄存器的 MPNMC 位字段清零吗?

    此致、

    Ming