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.
您好 Steven、
这是一个非 RTOS 应用程序还是 RTOS 应用程序?
R5F VIM INTC 支持 IRQ 和 FIQ、而 HWI API 允许将中断指定为 IRQ 或 FIQ。
下面记录了一个裸机(非 RTOS) GPIO 输入中断示例: https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/08_01_00_36/exports/docs/api_guide_am64x/EXAMPLES_DRIVERS_GPIO_INPUT_INTERRUPT.html。 此示例使用 IRQ。
HWI 记录在以下位置: https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/08_01_00_36/exports/docs/api_guide_am64x/KERNEL_DPL_HWI_PAGE.html
FIQ 的限制记录如下:
在进入中断回调函数之前、IRQ 和 FIQ 中断都通过调度程序。
对于 IRQ 中断、VIM VIC 端口被缺省启用并且 CPU 直接分支至 ISR (IRQ 调度程序)地址。
VIC 端口不支持 FIQ 的此功能、因此 R5F 必须读取 VIM MMR 才能在分支到发送器之前获取发送器地址。 但是、R5F FIQ 模式具有比 IRQ 更多的分组寄存器、因此需要在 ISR 中保存上下文的寄存器(使用的寄存器)较少。
我无法在 SDK 中找到任何 R5F VIM/FIQ 用法示例。
对于低延迟响应、我建议将中断调度程序代码/数据放置在 TCM 中、以及中断函数(回调)本身。 这可以使用链接器命令文件来实现。
此致、
弗兰克
您好 Steven、
[引用 userid="187021" URL"~/support/processors-group/processors/f/processors-forum 1058989/am6442-r5f-external-interrupt/3920260#3920260]FIQ 中断中是否不支持浮点运算? 或者我们只需手动保存/恢复 FPU 上下文?FIQ 中断处理程序使用 TI-clang ARM 编译器"interrupt"关键字。 以下网址对此进行了说明: https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/c_cpp_language_implementation/attributes/function_attributes.html?highlight=interrupt#interrupt
如果中断的上下文和 FIQ ISR 都使用浮点寄存器、则必须在 FIQ ISR 中手动保存/恢复浮点寄存器。
这将需要与 SDK 处理 IRQ 的方式类似的 FIQ 中断处理、即在调用 C IRQ 发送程序之前调用汇编语言 ISR、以保存寄存器。
此致、
弗兰克
您好、Steve、
我无法找到用于此目的的函数。 但是、请参阅以下文件、了解可合并到 FIQ ISR 中的代码:
例如、此代码:
#if ENABLE_FPU_SAVE_RESTORE FMRX R0, FPSCR VPUSH {D0-D15} /* VPUSH {D16-D31} */ PUSH {R0} #endif
也许可以将代码制作到汇编宏中。
此致、
弗兰克