主题中讨论的其他器件:HALCOGEN
我已启用 FPU 并将 FPU 异常路由到 VIM Ch 47作为 FIQ (也已尝试 IRQ)。 我已启用辅助控制寄存器8-13中 FPU 的异常传播。 我在我的应用程序中启用 interrupts _enable_interrupt_()、然后我执行一个 FPU 操作、如 div 为零。 我没有得到中断。 我是否错过了任何步骤?
其他中断、如 gionification、可以正常工作。
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.
我已启用 FPU 并将 FPU 异常路由到 VIM Ch 47作为 FIQ (也已尝试 IRQ)。 我已启用辅助控制寄存器8-13中 FPU 的异常传播。 我在我的应用程序中启用 interrupts _enable_interrupt_()、然后我执行一个 FPU 操作、如 div 为零。 我没有得到中断。 我是否错过了任何步骤?
其他中断、如 gionification、可以正常工作。
谢谢、Sunil。 这对我没有帮助。
我不使用 RTOS 或 UDIV 汇编代码进行除法。 我确定正在执行零分频、因为我在执行除法时看到 FPSCR 中的 DZC 位被置位。 反汇编显示:
VLDR S0、[PC、#12]
VLDR S2、[PC、#12]
VDIV.F32 S1、S0、S2
在 Jean-Marc 从您共享的线程中提供的示例项目中、为什么使用下面的代码设置辅助控制寄存器中的 DZC 位?
MRC P15、#0、R3、C1、c0、#0
ORR R3、R3、#0x80000
MCR P15、#0、R3、C1、c0、#0
由于 DZC 是位9、我希望得到如下所示的0x200掩码。
MRC P15、#0、R3、C1、c0、#0
ORR R3、R3、#0x00200
MCR P15、#0、R3、C1、c0、#0
以上都没有为我设置 DZC (位9)。
我使用下面的代码启用 DZC 位、我看到 DZC 位按预期设置
MRC P15、 0、 r0、 C15、 c0、 0 r
ORR r0、 r0 、#0x000200
MCR P15、 0、 r0、 C15、 c0、 0
我不确定 C1与 C15、但使用 C1不会设置 DZC 位。
我启用 DZC 位的方法是否正确?
我是否需要额外做什么来将 VIM 通道47设置为 FIQ 或 IRQ。
我使用设置 vimInit()中的 VIM 通道
vimRAM->ISR[47]=(t_isrFuncptr)&myFpuInterHandler。
在 vimInit()之后,我使用_enable_interrupt_()启用中断
还有事吗?
Cortex TRM 是我使用下面的方法(复制的)写入 C15寄存器时遵循的方法。 这本质上是一个读取-修改-写入、因此您可以看到我使用屏蔽0x200进行读取、修改(对应于 DZC 的位9)、然后将其写回。
MRC P15、 0、 r0、 C15、 c0、 0
ORR r0、 r0 、#0x000200
MCR P15、 0、 r0、 C15、 c0、 0
我确信上述操作正常、正如我在上一篇文章中所述、因为我看到寄存器窗口中启用了寄存器位。 我询问了 Jean-Marc 方法、因为他使用屏蔽0x80000对 C1寄存器进行了寻址、并建议也启用 DZC 位。
因此、让我澄清一下我的问题/情况:
我已启用上述汇编代码的 DZC 异常。
我相信我已经通过前面描述的步骤在 RM48中启用了中断。
当我除以零时、我仍然没有获得任何中断、这就是为什么我要问是否还有其他需要检查的东西。
您好!
JM 建议的方法允许您在零分频条件下生成未定义指令异常。 这通常是在您不想生成 CPU 中断的情况下完成的。
我已经尝试启用一个在零分频条件下生成的中断、它运行正常。 我将在此处附加一个 CCS 项目文件以供参考。 在 HALCoGen 设置中、您可能缺少针对 FPU 中断请求的中断管理器(VIM)中的使能。