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/PROCESSOR-SDK-AM437X:PRU-ICSS 函数和外设

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/614996/rtos-processor-sdk-am437x-pru-icss-functions-and-peripherals

器件型号:PROCESSOR-SDK-AM437X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

尊敬的支持人员和用户。

我正在尝试使一些与 ARM 和 PRU 内核相关的示例应用协同工作  
我正在使用:  
-idkAM437 dev。 Borad
- PROCESSOR_SDK_RTOS_AM437X_4_00_00_04

最后一个想法是在第一个 PRU-ICSS 和第二个 PRU-ICSS 自定义固件上运行 HSR 或 PRP、以处理 McSPI 通信。
太棒了... 我认为首先需要了解:
- ARM 到 PRU 和 PRU 到 ARM 中断的工作原理  
-如何在 ARM 和 PRU 之间交换数据(IPC 将非常庞大...只需找到一些内存即可使用中断锁存来交换数据)

我首先介绍 "PRU-software-support-package"、在其中找到了 PRU 示例。 我给出了一些中断 PRU0至 PRU1的示例。
问题1) PRU-ICSS 内核有代码:ARM-PRU 和 PRU-ARM 中断。 是否有用于 ARM 内核的代码来处理从 PRU 到 PRU 的中断或使 iterrupts 到 PRU?

问题2) 应如何实施数据交换? 有没有示例? 共享存储器、它似乎由 HSR/PRP PRU 代码使用。 是否可以直接在 PRU RAM (对于 ICSS0)中使用 ARM 进行访问? 最好使用 DDR 吗?  用于交换数据的对存储器的最快访问是什么?  

我还在示例"Nimu_ICSS_BasicExample_idkAM437x_wSoCLib_armExampleProject"中检查如何完成"PRU 工作"。 然后、我尝试制作自己的示例。

问题3) 我不明白函数"PRUICSS_registerIrqHandler"的参数。

什么是:
-pruEvtoutNum (PRU 的此主机中断吗? 技术参考手册中的图30-24)
-intrNum??
-eventNum??
在哪里可以找到技术参考手册中的值?

AM437x 不存在 PRUSS 示例、但我检查"pdk_am437X_1_0_7\packages/ti_drv\pruss\test\src"中的 source main.c。

PRUICSS_registerIrqHandler2 它似乎与  PRUICSS_registerIrqHandler 函数类似、只是它采用了一系列设置。
我找不到这个神奇数字的来源-> intrCfg.intNum =134+32;, inCfg.pruEvtoutNum=2;

此外、我对  PRUICSS_IntcInitData_s  参数的理解也有问题。

您能告诉我这些信息吗?

问题4)

RET = PRUICSS_socGetInitCfg (&pruIcssCfg);
if (ret!= PRUICSS_RETURE_SUCCESS)
{
while (1);
}
pruIcssHandle = PRUICSS_create ((PRUICSS_Config*) pruIcssCfg、PRUICCSS_instance_two);

由_kill(int)()函数执行的函数 do_AngelSWI()上的调试停止(位于第95行的 PRUICSS_create 内部->"object->pruicss_version = HWREG (temp_addr)& 0x7ffU;")。
然后、我强制将 PRU 地址(0x54400000)段设置为.cfg 文件中不可缓存的段、并且程序不会崩溃。 因此、似乎有些人需要知道如何设置 MMU ... 外设寄存器似乎不想被读取?? 。 我不熟悉使用 MMU... 您能向我解释一下具体的情况吗? 在哪里可以找到有关此问题的信息和指南?




谢谢!
此致
马里

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

    我的问题是否奇怪?
    目前为止没有回复...

    Q3真的打扰了我。

    此致
    马里
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 能够回答此问题的人最近已不在办公室。 他现在回来了、我给他发了一封提醒。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题、感谢您的支持。

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

    马来

    回答您的问题:

    Q1)、请参阅 ICSS_EMAC 驱动程序示例代码:\pdk_AM437X_1_0_x\packages/ti\drv\ICSS_EMAC\test、 processors.wiki.ti.com/.../Processor_SDK_RTOS_ICSS-EMAC。 数据包 Rx 中断和 Tx 完成中断演示了 ARM 内核处理来自 PRU 的中断。

    Q2)、请参阅主题-

    Q3) Wiki 页面 中的"中断和任务"部分()详细介绍了中断映射。

    Q4),是否在 PRUICSS_CREATE ()之前调用了 Board_init()?

       Board_initCfg cfg = Board_init_module_clock | Board_init_ICSS_PINMUX | Board_init_UART_stdio | Board_init_ICSS_ETH_PHY;
       RET = Board_init (cfg);
       if (ret!= Board_Sok)
       {
           UART_printf ("main:Board_init 返回错误代码:%d\n"、ret);
           返回-2;
       }

    此致、

    Garrett

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

    是的,在 PRUICSS_create 之前调用 Board_init()!

    对于 Q1至 Q3、我通过理解来解决问题。 当我检查 PRU-ICSS-EtherCAT_Slave 包中的函数 ECAT_Open 时、Q1和 Q3的表达式更加清晰。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    马来

    有关 MMU 的 Q4,请参阅 SYSBIOS 函数 Mmu.setFirstLevelDescMeta。  从 AM437X_app.cfg 中:

    VAR 外设 Attrs ={

      键入:MMU.FirstLevelDesc_section,//段描述符

      TEX:1、

      可缓冲:真,         //可缓冲

      可高速缓冲 :false,         //可缓存

      可共享 :true,         //可共享

      NoExecute :false,         //不可执行

    };

    针对 PRU-ICSS0/1的/* MMU 配置-不可高速缓冲|可缓冲:共享设备*/

    VAR 外设 BaseAddr = 0x54400000;

    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、peripheralBaseAddr、peripheralAttrs);

    此致、Garrett