主题中讨论的其他器件:C2000WARE
工具与软件:
大家好、我正在尝试实施 PIE RAM 奇偶校验测试、我遵循了 sdl_ex_ram_ecc_chitate_test.cn 中的示例、但是我有一个问题、即虽然我遵循示例中提到的相同配置、但中断不会触发、我使用了 I2CA 中断(8.1)。
注:我注意到在 testRAMLogic 函数结束时(强制获取向量之后)、中断被设定、但是与 UNCHR 和 CPU 相关的标志没有被设定。
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.
工具与软件:
大家好、我正在尝试实施 PIE RAM 奇偶校验测试、我遵循了 sdl_ex_ram_ecc_chitate_test.cn 中的示例、但是我有一个问题、即虽然我遵循示例中提到的相同配置、但中断不会触发、我使用了 I2CA 中断(8.1)。
注:我注意到在 testRAMLogic 函数结束时(强制获取向量之后)、中断被设定、但是与 UNCHR 和 CPU 相关的标志没有被设定。
你好,Whiteny
是的、我是说 PieVectorHandler 不会运行、
我创建了以下函数:
你好惠特尼
感谢您的回答:
我向代码中添加了 CPU IER 8并启用中断、如下所示:
是的、我知道这是无效地址。 是的、我使用中断密钥字、它在其他组件中适用于我、我将其视为中断。
以下是 Mg_PieVecErrHandler 的示例:
静态中断失效 Mg_PieVecErrHandler (void)
{
IntFlag = true;
EALLOW;
MemoryErrorRegs.UCERRCLR.bit.CPURDERR = 1;
EDIS;
PieCtrlRegs.PIEACK.ACK8 = 1;
}
此外、我还将中断处理程序放在相应中断的矢量表中。
那么,就我而言,我可以这样做吗? 或者、设置 CpuSysRegs.PIEVERRADDR.bit.ADDR 已经足够?
例如:
如果您删除了"interrupt"关键字、是否起作用? 我对示例 a 进行了实验,如果我在 PIE 向量错误处理程序中放入一个断点,然后单步执行函数的末尾,它实际上会在返回到应用程序之前返回到引导 ROM 中名为 CPU1BROM_压 矢量 mismatchHandler ()的函数。 CPU1BROM_piVectorMismatchHandler ()似乎是实际的中断,而 PIEVERRADDR 处理程序只是它所调用的函数。 您可以在下面的文件中看到代码:
\libraries\boot_rom\f280015x\rev1\ROM_sources\F280015x_rom\bootROM\source\cpubrom_interrupts.c
我想所发生的情况是、由于这两个函数都被声明为中断、因此这两个函数都具有编译器生成的中断上下文保存/恢复代码和返回指令。 ROM 处理程序认为用户处理程序是一个函数、所以它使用 LCR 指令来调用它、期望用户处理程序使用 LRETR 返回、但它使用的是 IRET、它会导致完全基于堆栈上的内容尝试返回到不正确的位置。
您可以尝试在 ROM 中放入一个断点(CPU1BROM_piVectorMismatchHandler 位于0x3ffd000)、然后自行对其进行单步执行。
惠特尼
Unknown 说:此外、我还将中断处理程序放在相应中断的矢量表中。
那么,就我而言,我可以这样做吗? 或者、设置 CpuSysRegs.PIEVERRADDR.bit.ADDR 已经足够?
例如:
[/报价]EALLOW;CpuSysRegs.CPUSYSLOCK1.bit.PIEVERRADDR = 0;CpuSysRegs.PIEVERRADDR.bit.ADDR =(UINT32)&Mg_PieVecErrHandler;PieVectTable。 I2CA_INT =&Mg_PieVecErrHandler;EDIS;我认为将它们设置为不同的函数会更合理。 此测试旨在检查 PIE 矢量奇偶校验逻辑是否正常工作、因此如果您在实际的 I2CA_INT 中断处理程序中错误地结束、而不是在 PIEVERRADDR 函数中结束、这便是奇偶校验无法正常工作的标志。
惠特尼