工具与软件:
您好!
您能告诉我为什么软件复位、asm ("reset")在我放在闪存上的代码中无法正常工作吗?
代码可以在调试模式下正常运行。
我希望你已经有了看到这种现象的经验,你给我任何解决办法来解决它。
此致
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.
工具与软件:
您好!
您能告诉我为什么软件复位、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")完成、但当将相同的代码写入闪存时、其行为会有所不同。
您对解决方案有什么想法吗?
此致、
尊敬的 Ming:
感谢您的持续合作。
我将在调试模式中创建的程序代码编写到了 C5517 EVM。
尊敬的 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
尊敬的 Ming:
非常感谢您的支持。
void software_reset (void)//转到0xFFFF00 或 FFFFF0
{
((void (*)())0xFFFF00)();
}
程序代码。将在 调试模式下重置。 但如果写入闪存、仍然无法正常工作。
因此、以同样的方式、我们能够通过读取存储器映射中_c_int00所在的地址来执行软件复位。(即使写入闪存、软件复位也可以)
读取_c_int00是否会出现任何问题?
此致、