尊敬的 Vince:
因此、我将 CPU2闪存设为空、并且在 CPU1程序中、我将尝试通过 IPC 引导 CPU2、这会导致 NmiIntruptRegs.NMIFLG.bit.CPU2WDRSn 被设置并导致 NMI_ISR。 我已经尝试使用#pragma 将此 ISR 保留在闪存和 LS RAM 存储器中。 但是、在这两种情况下、设置标志和调用 ISR 所需的时间均为13msec。 在这种情况下是否预计会出现这种延迟?
此致、
艾琳
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.
尊敬的 Vince:
因此、我将 CPU2闪存设为空、并且在 CPU1程序中、我将尝试通过 IPC 引导 CPU2、这会导致 NmiIntruptRegs.NMIFLG.bit.CPU2WDRSn 被设置并导致 NMI_ISR。 我已经尝试使用#pragma 将此 ISR 保留在闪存和 LS RAM 存储器中。 但是、在这两种情况下、设置标志和调用 ISR 所需的时间均为13msec。 在这种情况下是否预计会出现这种延迟?
此致、
艾琳
您好、Irene、
虽然仍然存在预期的延迟(通常为14个周期的绝对最小值)、但13ms 相当高。 健全性检查的两个方面:
1.您在 CCS 中是否处于"调试"模式? 如果是这样、与自由运行代码相比、理论上可能会有减慢的情况。 可能值得在 CCS 中使用"disconnect"按钮进行测试、以允许代码自由运行并查看延迟是否仍然很长。
2.您是否使用 GPIO 切换和示波器来检查延迟? 这实际上是检查标志和 ISR 之间延迟的最简单方法。 如果您使用另一种方法、请改用此 GPIO 切换方法。
让我知道您通过上述测试/检查确定的内容、以便我们深入了解可能导致这种情况的原因。
如果以上不是解决方案、那么有可能只有一个安全装置超时触发 NMI。 请确保这不仅仅是 WDCNTR 达到其8位溢出值。
此致、
Vince
您好、Vivek、
这就是我要做的:
我将 CPU2清空(这是通过选项"Tools"->"On Chip Flash"擦除闪存来完成的)。 我正在 CPU1中运行一个程序。
CPU1尝试使用以下 IPC 函数引导 CPU2:
IPC_setBootMode (IPC_CPU1_L_CPU2_R、MODE);
// CPU01到 CPU02 IPC 标志寄存器
IPC_setFlagLtoR (IPC_CPU1_L_CPU2_R、(IPC_FLAG0 | IPC_FLAG31));
此处模式为03、即闪存引导选项0
由于 CPU2为空、因此在 CPU1中设置 NmiIntertRegs.NMIFLGCLR.bit.CPU2WDRSn、以触发 NMI 中断。
我已经创建了一个定制 ISR 来处理这个问题。 但是、设置标志和应答 ISR 所需的时间为13ms。 这是一个大延迟。
我想知道延迟背后的原因、因为 NMI 中断是高优先级中断。
此致、
艾琳
你(们)好
[~ userid="448119" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1110390/tms320f28388d-delay-ine-responding-to-NMI-interrupt/4134329#4134329"]我已经创建了一个自定义 ISR 来处理此问题。 但是、设置标志和应答 ISR 所需的时间为13ms。 这是一个很大的延迟。[/quot]好的、这是 CPU1的 NMIWD。 在 CPU1上,您是否在花费很长时间的任何其他 ISR 中? 请注意、此器件不支持中断嵌套、因此您需要确保在发生 NMI 时 CPU 不会卡在其他一些 ISR 中。
此致、
Vivek Singh
您好、Vivek、
你是对的。 它将进入 CPU2toCPU1IPC0 ISR、这将带我回答以下问题和观察结果。 CPU2为空、在 CPU1中、我尝试引导 CPU2、如我后续问题中所述
我运行以下指令、但在 IPCCPU1toCPU2Regs.CPU1TOCPU2IPCFLG 寄存器中、我只看到 IPC31置1、而不是 IPC0。 我甚至尝试通过将 CPU1TOCPU2IPCSET.bit.IPC0设为1来手动设置此 IPC0、但它仍然未得到反映。
IPC_setFlagLtoR (IPC_CPU1_L_CPU2_R、(IPC_FLAG0 | IPC_FLAG31));
2.在 CPU2toCPU1IPC0 ISR 中、即使在我确认任何标志之前、我也会看到'CPU2TOCPU1IPCSTS'为0。 如果它为0且 CPU2为空、那么为什么调用此 ISR?
CPU2TOCPU1IPCBOOTSTS 的值为0x08、根据 TRM、这意味着"等待 CPU1设置 CPU1TOCPU2IPCFLG0以允许 CPU2开始引导"
请告诉我。
此致、
艾琳
您好、Vivek、
我想通过编程方式(而不是通过调试器)确定 CPU2是否为空。 如果 CPU2为空、则我不会将其复位。
在我的代码中、我 在内部处理 CPU2和 CM 的引导序列。 由于我无法确定检查代码中 CPU2是否为空的方法、因此无论 CPU2是否为空、我都将其复位、这会导致 CPU1中出现 NMI。
所以我的主要问题是,我们是否可以通过 CPU1中的程序确定 CPU2是否为空。 如果是、那么我们如何做到这一点。
此致、
艾琳
艾琳
[~ userid="448119" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1110390/tms320f28388d-delay-ine-responding-to-NMI-interrupt/4160739#4160739']在我的代码中、我 在内部处理 CPU2和 CM 的引导序列。 由于我无法确定检查代码中 CPU2是否为空的方法、因此无论 CPU2是否为空、我都将其重置、这会导致 CPU1中出现 NMI。如果 CPU2为空且 CPU1应用程序代码释放 CPU2的复位、则它将自动复位(通过 CPU2引导代码)。 您不必在代码中执行它。
[~ userid="448119" URL"/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1110390/tms320f28388d-delay-ine-responding-to-NMI-interrupt/4160739#4160739']因此,我的主要问题是,如果 CPU1中的程序不是空的,我们是否可以通过 CPU2。 如果是、则我们如何执行此操作。CPU1无法读取 CPU2闪存、因此无法检查 CPU2闪存是否为空。
此致、
Vivek Singh