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.
工具/软件:Code Composer Studio
尊敬的 C2K Champs:
我将继续回答最后一个问题。
最后一个问题是以下链接。
https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/891196/3301091#3301091
闪存写入和擦除工作正常、在2~3minite 之后、电路板发生了复位功能。
我不明白为什么它发生了复位功能
禁用看门狗。
我非常乐于助人、感谢您的回答
谢谢、此致、
Edward
爱德华
闪存擦除/编程/验证序列后、您在应用中执行什么操作?
您是否尝试找到导致复位的指令? 请使用断点和步进执行来计算导致它的指令。
您是否检查了 RESC 寄存器和 NMIFLG 寄存器? 有什么提示吗?
希望您在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy()。 memcpy()将在应用程序从 RAM 地址执行之前将代码从闪存复制到 RAM。 否则,应用程序将在 ITRAP 中结束。
我将根据您的回复将帖子分配给系统专家。
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
请参阅我的代码(Project_Edward.zip)
1) 1)闪存擦除/编程/验证序列后、您在应用中执行什么操作?
->没有、我只配置了闪存写入和闪存擦除序列。 请参阅以下代码。 请参阅我的代码的 main_cpu1.c。
总结而言、
while (1){
if (SCIARxBuff_CPU1[0]= 0x0061)// a
{
Flash_write();//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0062)// b
{
FLASH_READ (缓冲器322);//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0063)// c
{
FLASH_ERASE ();//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0064)// d
{
SCIARxBuff_CPU1[0]= 0x0065;//闪存
DSP_SCIA_Write (Buffer322、0xFF);//闪存串行写入
}
2) 2)您是否尝试找到导致复位的指令? 请使用断点和步进执行来计算导致它的指令。
->我找不到。 如何查找? 我将看门狗设置为禁用。
3) 3)您是否检查了 RESC 寄存器和 NMIFLG 寄存器? 有什么提示吗?
->否 我找不到提示。 当程序运行时、程序禁用看门狗。 清除 RESC 和 NMIFLG 寄存器是否有意义?
4)希望您在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy ()。 memcpy()将在应用程序从 RAM 地址执行之前将代码从闪存复制到 RAM。 否则,应用程序将在 ITRAP 中结束。
->如何在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy ()?
参阅我的代码、我在 flash_programming.c 中使用"#pragma CODE_SECTION (Flash_Programming、ramFuncSection);"
是这样吗?
e2e.ti.com/.../Project_5F00_edward.zip
谢谢、此致、
Edward
尊敬的 Vamsi
出现另一个问题。
如果我将其他函数与 main.c 中的闪存函数一起使用、它将成为 ITRAP。
while (1){
DO _UDP_CONFIG (4);//配置套接字4
if (CONFIG_FLASH_SET_FLAG = 1)// a
{
CONFIG_FLASH_SET_FLAG = 0;
Flash_write();//闪存
}
否则、如果(CONFIG_FLASH_SET_FLAG = 2)// c
{
CONFIG_FLASH_SET_FLAG = 0;
FLASH_ERASE ();//闪存
}
谢谢、此致、
Edward
爱德华
2) 2) 2)不是在 CCS 调试视图中单击"继续"按钮、而是单击"步入"或"步越"按钮。 使用这些按钮、您可以通过指令执行代码指令。 通过这种方法、您可以确定导致复位的指令。 此外、您可以在代码中定期使用断点、然后单击"继续"。 这样、您就可以知道控件是否达到代码中的特定断点。 如果未达到、则您知道该断点之前的代码存在一些需要调试的问题。 您可以右键单击 CCS 中的代码行并启用断点。
3) 3)您可以为 NMI 和 ITRAP 启用和定义 ISR、并包括用于调试目的的 Estop。 在 ISR 中、您可以检查这些寄存器的值以了解复位的原因。
4) 4)映射到 ramfuncs 的任何代码都应在执行该代码之前使用 memcpy()从闪存复制到 RAM。 如果不是、当控制跳转到 RAM 中的相应位置时、由于代码未复制到闪存、将提取 RAM 位置的垃圾、从而导致 ITRAP。 我建议您使用其中一个 C2000Ware 示例、启用闪存构建配置并逐步执行、以了解闪存执行流程。 请参阅此帖子以了解有关此主题的更多详细信息: https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/878674/3250523#3250523
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
如您所知、独立 USB 示例代码运行良好。
我合并了 USB 示例代码和我的项目代码。 我觉得初始化效果很好。
正如您所说的,我在代码中从 Device_init()执行 Flash_initModule()之前使用了 memcpy()。(如下代码所示):
////代码
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
//
//调用闪存初始化以设置闪存等待状态。 此函数必须执行的操作
//驻留在 RAM 中。
//
Flash_initModule (FLASH0CTRL_base、FLASH0ECC_BASE、DEVICE_FLASH_WAITSTATES);
//////
我阅读了您的建议 URL 帖子(e2e.ti.com/.../3250523)
所以我感觉、检查了所有内容。
但是当我设置闪存写入命令时、它发生了 ITRAP。
在第二张图片中,Fapi_initiatizeAPI()中出现错误。
因此、请确认我的源代码。 该代码包含了每个函数。
e2e.ti.com/.../0647.Project_5F00_edward.zip
我指的是"Disassembly"字段。(Excel 文件)
在提到"Disassembly"字段时、我在错误部分绘制了黄色标记。
我不理解此装配体部分。
e2e.ti.com/.../error_5F00_Disaeembly.xlsx
谢谢、此致、
Edward
尊敬的 Vamsi
感谢您的回复
我在 CPU1和 CPU2链接器 cmd 文件中都使用非共享 RAM。
我附加了文件。
请参阅以下内容。
e2e.ti.com/.../linker_5F00_cmd.zip
谢谢、此致、
Edward
爱德华
您可以 在 F2837xD 技术讲座中了解链接器命令文件的用法、网址为:
https://training.ti.com/c2000-f2837xd-microcontroller-workshop?context=1137791-1137781
如果要增加特定 RAM 块的大小、您始终可以将两个或多个 RAM 块组合在一起。 但是、您需要确保只在一个页面(page0或 page1)中定义任何给定的 RAM 地址。 如果您重复使用(page0和 page1)给定的存储器范围、编译器/链接器不会向您发出错误。
关于 GSxRAM: 默认情况下、所有 GSxRAM 块(0至15)都归 CPU1所有。 在链接器 cmd 文件中、您在第1页中定义了许多 GSX RAM。 查看地图文件和应用程序、确定是否确实需要第1页中的许多 GSxRAM 块。 如果您不需要、可以将其中的一些内容移至第0页、并用于代码等
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回答。
首先、复位问题似乎已经解决。
如果我重复测试闪存写入和擦除、它被复位、但是如果它与我的项目代码一同工作、它不能被复位。
我不知道原因。
使用此代码进行2天的老化测试表明它未复位且工作正常。
现在、如果您正确了解内存分配、则可以使用其他应用程序。
非常感谢您的帮助。
谢谢、此致、
Edward