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.

[参考译文] AM263P4:中断时的 PDI、Sync0 和 Sync1、而不是轮询标志

Guru**** 2905440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1636872/am263p4-pdi-sync0-and-sync1-under-interrupt-instead-of-polling-the-flags

器件型号: AM263P4

您好:

我正在为 AM263Px 运行基于 beckoff 的 EtherCAT 示例 (ethercat_subeckhoff _ssc_demo_am263px-lp_r5fss0-0_freertos_ti-arm-clang)。 不过、我可以看到 HW_EcatIsr、 Sync0_ISR 和 Sync1_ISR 都在轮询的专用任务下运行。 是否可以获取中断而不是使用轮询方法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、James:

    是的、这是可能的、该示例基于 FreeRTOS、因此从轮询切换到仅中断需要为这些函数创建任务并设置任务优先级

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何实现这一点(仅中断)是否有任何示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没有詹姆斯

     具体而言、我们没有这方面的示例。

    另请注意、中断应具有较小的代码大小、因此 ISR 延迟较低。

    更好的方法是任务 — 使用 FreeRTOS 任务读取和写入 PDI/PDO。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我想通过中断实现这一点、在哪里可以获得有关如何执行的信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、James:

    我能够进一步检查此示例:

    EtherCAT 示例中的 PDI ISR 可配置为在两种不同的模式下运行、具体取决于 ENABLE_PDI_task 编译时定义:

    1、中断模式(默认)
    未定义 ENABLE_PDI_task 时:

    pdi_isr () 被注册为一个真正的中断处理程序
    它在中断上下文中以最小的延迟执行
    由来自 ESC(EtherCAT 从站控制器)的硬件事件直接触发
    tiescsoc.c:233 显示:bspInitParams->pdi_isr = pdi_isr;
    2.阻塞任务模式(可选)
    定义 ENABLE_PDI_task 时:

    创建一个名为 PDItask 的专用 RTOS 任务
    使用 PRUICSS_waitEvent () 阻止 PRU-ICSS 事件上的任务
    当事件发生时、它会调用 hw_EcatIsr () 来处理中断
    它在任务上下文中运行、而不是在中断上下文中运行
    tiscutils.c:296-310 显示阻塞任务实现
    关键实现详细信息
    pdi_isr() 函数 (ecatappl.c:618) 执行:

    读取 AL 事件寄存器
    处理 SYNC0/SYNC1 事件
    处理过程数据输出/输入事件
    周期时间监测
    默认情况下(没有 ENABLE_PDI_task)、PDI ISR 是真正的中断处理程序、而不是阻塞任务。 但是、可以通过在编译时定义 ENABLE_PDI_task 将其配置为阻塞 RTOS 任务。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的答复。 因此我未定义 ENABLE_PDI_TASK 和 ENABLE_SYNC_TASK、但现在看不到调用了 PDI_ISR。 我必须设置中断、或许是启用中断、还是由示例完成?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、


    是的、您需要启用中断。


    您可以参考 SDK(例如 GPIO_INPUT_INTERRUPT)来设置中断。  

    {SDK Location}\examples\drivers\gpio\gpio_input_interrupt


    此致

    库纳尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    o 设置中断、或者启用中断、或者通过示例完成?

    您将需要设置中断、请参阅 SDK 中的任何现有示例以了解中断设置