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.

[参考译文] RTOS/AM5728:在 IPU 上使用中断

Guru**** 2562120 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/608570/rtos-am5728-using-interrupts-on-the-ipu

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我在主 Cortex A15内核上运行 Linux、并在 IPU0 (Cortex-M4)上使用 SYS/BIOS。 我想知道是否可以编写我自己的自定义代码来处理 IPU 端的中断并避免让 Linux 处理这些中断。 例如、我可能需要自己的自定义 UART 驱动程序(即、不使用 PDK 中的 TI UART 驱动程序)、该驱动程序具有自己的自定义中断处理例程。 我的问题归结为:

  1. 如何配置处理器和/或操作系统以确保只有 IPU 才能处理某些中断?
  2. 是否有任何现有示例说明如何执行此操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Scott、

    我们创建了以下文章、其中使用此处提供的示例介绍了 Linux 在 Cortex A15上运行时使用 GPIO 在 IPU 上使用 SysBIOS 的示例:
    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

    我们在示例中使用了 PDK 驱动程序、但您可以对自定义驱动程序执行相同的操作。

    希望这对您有所帮助。

    此致、
    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这并不能真正解答我的问题,因为我感兴趣的所有详细信息都隐藏在 SYSBIOS 和 PDK 驱动程序中。

    我会稍微提出不同的问题:

    然后、当 GPIO_LedBlink 示例设置引脚更改中断时、SYSBIOS 和/或 GPIO 驱动程序在后台执行什么操作来确保 Linux 不处理中断、而不是 IPU?

    或者、这是通过修改内核配置和/或器件树来配置 Linux 方面的事项、以知道不处理中断吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Scott、

    是的、n`t 您计划在代码的 RTOS 侧使用 GPIO 引脚、系统集成商有责任从 Linux DTB 文件中删除该引脚、以便 Linux 不会处理与 GPIO 引脚对应的中断。 我们尚未在 RTOS 和 Linux 之间自动进行资源分区、因此需要在为平台配置内核的 DTB 文件中手动禁用该分区。

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

    根据这一要求、我们在 RTOS 中添加了使用 PDK UART LLD 驱动程序和 IPC 为 IPU 创建固件的说明、并将其添加到 Wiki 文章中:
    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

    请回顾这些步骤、并告知我们这是否适合您。

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

    Rahul、

    感谢您的示例。 我一直在使用我的 FAE 来查看这一点、他演示了它在 EVM 上的工作原理。 我遇到的问题是它依赖于"UART stdio" API、该 API 似乎难以编码以使用特定 UART。 因此、如果我想使用不同的 UART、似乎我必须重建整个 PDK、如果我想使用两个 UART (例如、在没有 stdio API 的情况下使用 RTOS UART 驱动程序)、那么我将会感到很不幸运。

    您能否提供仅使用核心 UART 驱动程序 API 的示例? 例如、读取、写入、打开、关闭、 等等、而不是 stdio API、它似乎只通过卷积代码流使用一个 UART?

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

    Scott、

    创建 PDK +IPC 示例工程后、可以很轻松地删除电路板库并直接使用 UART 驱动程序来设置 UART 标准 IO 操作

    请注释以下 代码:

    // boardCfg = Board_init_uart_stdio;
    
    // Board_init (boardCfg); 

    并添加以下代码:

    #define UART_Instance 2
    
    UART_stdioInit (UART_Instance);//添加此调用来代替 Board_Init 

    此调用使用默认参数初始化 UART 驱动程序、并将其设置为115.2 Kbps 的波特率。  

    如果要更改 UART 实例、请使用自己的配置选项将其更改为 UART5:

    #define UART_instance = 4;
    
    //为 UART5.....执行 PRCM 唤醒
    
    
    
    //Board_init (boardCfg);<-仅当您要使用电路板进行引脚多路复用设置时。
    (笑声)
    UART_socGetInitCfg (UART_instance、&UART_cfg);
    ...
    UART_socSetInitCfg (UART_instance、&UART_cfg);
    ...
    UART_stdioInit (UART_instance);
    
    //此处使用 UART_printf、UART_Put、UART_scanf
    应用 UART 代码... 

    请注意、IPU 代码将要求开发人员在 u-boot 中设置引脚多路复用器、并使用器件树断开 Linux 中的 UART5实例。

    希望这对您有所帮助。

    此致、

    Rahul

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

    Rahul、

    感谢您提供示例代码! 这当然使处理有关其他 UART 的示例比我想象的要简单得多。

    我给了您一个建议、并将 UART_Instance 更改为4、以便使用 UART5。 我观察到以下情况:

    如果我使用将 UART5的状态设置为"正常"的设备树启动系统、则我会得到示例打印的第一个字符串、但后续字符串会丢失。 如果我使用将 UART5设置为"禁用"的器件树引导、则根本不会输出。 当我的 FAE 在现场时、我们观察到类似的行为、我们正在使用我开发的 UART 接口。 我们怀疑问题是、如果我们在器件树中将 UART5设置为"可以"、则内核将设置所有引脚、时钟、 和中断(因此我们看到的是一行、而不是其他行、因为内核正在接管来自 M4的中断)、如果我们将状态设置为"禁用"、表示没有执行此类设置、那么我们就看不到 UART 的输出。

    因此、我下一步应该确定如何完全从 M4方面正确设置中断。

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

    我想让您知道、我设法获得了在 UART 5上同时支持发送和接收的示例。 我必须从 Linux 端禁用 UART5 (我们或多或少知道)、更重要的是、我必须调用函数来正确设置 M4端的交叉开关。 我观察到的是、我无法在交叉开关表中获取一个"开放插槽"并为其分配 UART5中断。 似乎必须将其设置为 IRQ 24 (在我的情况下为 CSL_XBAR_INST_IPU1_IRQ_24)、否则驱动程序无法正确处理中断。

    我在任何地方都没有看到这种文档、只是通过 CCS 查看 M4的 NVIC 矢量表来解决这一问题。 您能否将我指向代码中的任何文档或位置、以便查看各种外设的预期纵横制插槽是什么? 我计划在 M4侧最终设置 SPI 和 I2C 等功能、因此这将是有用的信息。


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

    Scott、

    UART 实例的中断设置在 UART_SoC.c 中进行配置、UART_SoC.c 是 Processor SDK RTOS 驱动程序的一部分。 如果您查看默认设置、则会看到器件上的 UART4实例(UART5)设置为在 UART_HwAttrs 中使用 IRQ_24。 纵横制设置必须使用已在传递给驱动程序的 UART_HwAttr 结构上使用的 IRQ 或事件 ID (对于 DSP)

    您将需要更改此值以使用您希望使用的任何其他 IRQ 号。 我在 UART_SoC.c 中提供了 UART4配置的快照

    {
    #ifdef _TMS320C6x
    CSL_DSP_UART4_regs、
    OSAL_REGINT_INTVEC_EVENT_Combiner、
    #Elif defined (_ARM_ARCH_7A__)
    CSL_MPU_UART4_regs、
    102
    、#else
    CSL_IPU_UART4_regs、//
    24、// IPU IRQ 设置,需要在 XBAR 设置
    #endif 中使用
    34、/*仅用于 C6x、保留 DSP1_IRQ_34 *
    CSL_UART_3_MODULE_FREQ、
    CSL_EDMA3_CHA_UART3_RX、
    CSL_EDMA3_CHA_UART3_TX、
    0、
    0、
    0、
    0、
    0、
    null、
    UART_RXTRIGLVL_8、
    UART_TXTRIGLVL_56、
    True、/*默认 DMA 模式*/
    false,默认情况下禁用/*回送*/
    true,默认情况下启用/*中断
    }、 

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

    现在这是有道理的。 谢谢、Rahul!