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.

[参考译文] AM3358:从 PRU0/PRU1访问 AM335x 外部 ADC (即 ADE7880)

Guru**** 2553450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/929433/am3358-am335x-external-adc-i-e-ade7880-access-from-pru0-pru1

器件型号:AM3358

您好!

我们开发了基于入门套件的参考板。

使用最新的 TI SDK、我能够将基于 SPI1.0的 TI 接口 ADE7880 与我们的板连接、并在2.5MHz 下获得完美计数。

=== >现在、我们需要更高的速度并降低 CPU 负载、因为我要将 ADE 从主 ARM CPU 转移到 PRU-ICSS

是的、我已经完成了

使用 Sitara 处理器在目标上重建 PRU 固件

https://youtu.be/tB0JOvznJgo

RPMsg 快速入门指南

另请观看可编程实时单元和工业通信子系统培训系列

是的、我使用 RPmsg 从 PRU 内核获取 msg

使用

1.使用 Remoteproc sysfs 接口将 Remoteproc 驱动程序指向每个 PRU 的新构建固件
回显"PRU_HALT.OUT">/sys/class/remoteproc/remoteproc1/firmware
echo "PRU_RPMsg_Echo_Interrupt1.out">/sys/class/remoteproc/remoteproc2/firmware
再次使用 Remoteproc sysfs 加载并运行 PRU 内核
echo 'start'>/sys/class/remoteproc/remoteproc1/state
echo 'start'>/sys/class/remoteproc/remoteproc2/state

LS /dev/| grep PRU
echo "test30">/dev/rpmsg_pru30
echo "test31">/dev/rpmsg_pru31
cat /dev/rpmsg_pru30
cat /dev/rpmsg_pru31
您需要按'Ctrl + Shift + c'来停止读取并关闭字符设备

但仍然无法定义如何为 ADE7880编写代码、因此 TI SDK 和我的 ADE7880代码可以在 PRU 上同时运行

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

    您好 Raju、

    让我们备份并查看一下系统设计。 听起来您在尝试降低 ARM 内核的负载、对吧?

    以下是 PRU <-> ADC 的背景信息:

    您链接的帖子讨论的是如何控制 PRU 的处理器上 ADC。 您可以在 PRU 软件支持包(在 Linux SDK 中的 example-applications/PRU-ICSS-x.x.x.x/或 git repo 中)中找到相关示例。

    PRU 内核运行裸机代码-不能像 ARM 内核那样在其上运行 Linux 或 RTOS。

    您尝试让 PRU 与外部 ADC 交互、而不是片上 ADC。

    一种选择是使用 PRU 来控制 AM335x 上的 SPI 外设。 如果这是您想要的、我可以为您提供指针、但请注意、外设应该只有一个主器件。 因此、您需要禁用 Linux DTS 文件中的 SPI、并从 PRU 手动启用时钟、执行外设初始化和设置等。

    另一种选择是将 ADC 直接连接到 PRU 的 GPI/GPO 引脚、并通过在 PRU 上实施 SPI 协议对其进行控制。  我们在 https://www.ti.com/tool/TIDA-01555 和 Linux SDK 中的 example-applications/PRU-ADC 下提供了相关示例。

    请注意、您实施的任何 PRU <-> ADC 选项都将在您的末尾进行开发工作 它不会像使用 Linux 驱动程序那样即插即用。

    此致、

    Nick

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

    HII、

    感谢你的答复

    让我们备份并查看一下系统设计。 听起来您在尝试降低 ARM 内核的负载、对吧?

    是的

    您尝试让 PRU 与外部 ADC 交互、而不是片上 ADC。

    是的

    一种选择是使用 PRU 来控制 AM335x 上的 SPI 外设

    是的、这就是我要实现的目标...

    因此、您需要禁用 Linux DTS 文件中的 SPI、并从 PRU 手动启用时钟、执行外设初始化和设置等。

    是的、我从 DTS 文件中对 spidev@1节点进行了注释

    另一种选择是将 ADC 直接连接到 PRU 的 GPI/GPO 引脚、并通过在 PRU 上实施 SPI 协议对其进行控制。

    是的、因为我想使用它

    在我们的定制板中、我们可以访问 PRU GPI/GPO


    现在、我正在考虑将位拆裂实现外部 ADC 接口的 SPI

    是的、我能够在5ns 切换 PRU GPO

     

    #include 
    #include 
    
    易失性寄存器 uint32_t __R30;
    易失性寄存器 uint32_t __R31;
    
    void main (void)
    {
    volatile uint32_t GPO;
    
    /* GPI 模式0、GPO 模式0 */
    CT_CFG.GPCFG0 = 0;
    
    //清除 GPO 引脚*/
    _R30 = 0x0000;
    
    while (1){
    GPO =_R30;
    GPO ^= 0x1;
    _R30 = GPO;
    __DELAY_CYCLES (100000000);//半秒延迟
    __DELAY_CYCLES (100000000);//半秒延迟
    }
    } 

     

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

    您好 Raju、

    对延迟答复表示歉意。 如果您决定使用 PRU、

    1) 1)请注意、您可能希望使用片上 SPI、也可能希望将 PRU GPI/GPO 信号直接连接到 ADC。 我认为您不想同时执行这两项操作。

    2) 2)在设备树中禁用节点时、我不建议删除该节点。 这是因为可能有一个较早的 DTS 文件启用该节点。 请转到您的最后一个 DTS 文件(如下说明)。 在 SPI 节点中、将"status ="确定";"更改为"status ="禁用";"

    为什么使用最后一个 DTS 文件?
    假设 dts1在文件顶部包含 dts2。 dts2在文件顶部包含 dts3。 然后、软件将首先读取 dts3、然后读取 dts2、再读取 dts1。 如果存在冲突的信息,则 dts3和 dts2中的信息将被 dts1中的信息覆盖。 这就是为什么要在 dts1中进行所有更改、以便以后的文件不会覆盖您所做的操作。

    此致、

    Nick

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

    您好

    很抱歉、我们提供了一些离散信息

    最初、我已将外部 ADC 与片上 SPI1.0引脚连接

    但当时的问题是、SPI 负载 CPU 使用了 htop 中几乎70%到80%的负载。

    因此、我被切换为将 PRU GPI/GPO 用于 ADC 接口

    1) 1)请注意、您可能希望使用片上 SPI、也可能希望将 PRU GPI/GPO 信号直接连接到 ADC。 我认为您不想同时执行这两项操作。


    =>希望将 PRU GPI/GPO 信号直接连接到 ADC

    是的

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

    您好 Raju、

    好的。 如果您有兴趣执行 PRU 自定义固件开发工作、这听起来像是一个很好的设置。

    回到您原来的问题:  https://www.ti.com/tool/TIDA-01555 用户指南包含 PRU 固件和 Linux ARM 内核来回发送数据和中断的一种方式。 如果您有关于运行 TI Linux SDK 和 PRU 固件的更多问题、请查看实验4-6。 如果您有其他问题、请在此处回复。

    此致、

    Nick

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

    您好

    非常感谢您为我们提供有关此问题的指导...

    非常感谢您的帮助。

    我正在锁定 PRU GPI/GPO 上的构建 SPI 位拆裂。

    在我解决问题时...

    谢谢你

    此致

    Raju!