主题中讨论的其他器件:SysConfig
工具与软件:
大家好!
我正在尝试在 pruss 内核上在 am62x 上实现我的代码、但首先我想了解 pruss 的工作原理、我尝试运行示例代码 gpioToggle、但它用于电路板 AM335x、它在 am62x 上不起作用。 我的问题是:我需要一个适用于 am62x 的 pruss 内核的示例代码、或者如果您有任何其他解决我的问题的解决方案、我也愿意回答这个问题。 提前感谢您。
此致
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.
工具与软件:
大家好!
我正在尝试在 pruss 内核上在 am62x 上实现我的代码、但首先我想了解 pruss 的工作原理、我尝试运行示例代码 gpioToggle、但它用于电路板 AM335x、它在 am62x 上不起作用。 我的问题是:我需要一个适用于 am62x 的 pruss 内核的示例代码、或者如果您有任何其他解决我的问题的解决方案、我也愿意回答这个问题。 提前感谢您。
此致
您好、Sevki、
我将首先介绍 PRU 入门实验室。 您可以在此处的 AM62x Linux SDK 文档中找到它们:
https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs.html
我是谁写了这些实验、所以如果您有任何问题或反馈、请随时在此处发布。 我们计划在2025年晚些时候重新编写这些实验、并将其变为官方学院模块、因此欢迎您提供所有反馈。
顺便说一下、AM62x Academy 如下所示:
https://dev.ti.com/tirex/explore/node?node=A__AEIJm0rwIeU.2P1OBWwlaA__AM62-ACADEMY__uiYMDcq__LATEST
目前、我们并未在其中介绍 PRU 信息、但仍有大量实用信息可帮助您开始使用 Linux 以及让 Linux 与 M4F 和 DM R5F 内核协同工作。
此致、
Nick
您好、Sevki、
在一周的剩余时间内休假之前、我的时间已经用完了、但我将根据需要在下周提供更多信息。
我将尝试向您介绍如何将 AM335x 示例移植到 AM62x。 如果您能够使其正常工作、如果您分享您的笔记、我会很感激、以便我可以将您的示例重新集成到我们的 PRU 培训中。
连接 PRU 固件
从 AM335x 示例开始:
https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_gpioToggle
实际的 C 代码没有更改、但您需要使用不同的链接器命令文件和 Makefile。 您可能只需复制/粘贴此 AM62x 示例工程中的文件:
尝试构建。
在 CCS 中加载工程。 您是否能够像添加 A 和 B 那样单步执行代码、看到代码按预期运行?
设置 pinmux 设置
如果您要使用 Linux 来初始化设计中的 PRU 子系统、则可以直接在 Linux devicetree 文件中应用 PRU GPI/GPO Pinmux 设置。 有关具体方法的更多信息、请参阅
但是等待吧! 如何确定如何写入这些 pinmux 设置?
我建议使用 pinmux 工具生成 pinmux 设置。 访问此处:
https://dev.ti.com/sysconfig/#/start
像这样设置 SysConfig、并点击"start"。

应用 Pinmux 设置后、它们将在此处的 devicetree.dtsi 文件中生成:

此致、
Nick
您好、Nick。
再次感谢。 我写的是我所做的和所取得的。 您说:"在 CCS 中加载项目。 您是否能够像添加 A 和 B 那样单步执行代码、看到代码按预期运行?" 那么、是的、我可以看到代码按预期运行。 但是、在我按照您所述添加 SysConfig 后、我得到以下错误:#1965 syscfg/am62x_pinmux.h:无法打开源文件"pinmux.h"、并且错误行为:#include 我还通过"Properties"->"Pru compiler"->"Include options"添加了包含 soc_config.h 文件的路径、并添加了该路径以包含搜索路径、但仍然不起作用。 我仍然不知道问题是什么。 假期愉快! 如果您在假期结束后回答、我将不胜感激。 提前感谢。
此致
由 SysConfig 生成的 Pinmux 设置不会在 PRU 固件中使用、而是在 Linux devicetree 文件中使用。 您希望将设置从生成的 devicetree.dtsi 文件内部复制并粘贴到板级 Linux devicetree 文件内部。 请参阅我之前的响应中链接的 e2e 线程、了解有关如何执行该操作的更多详细信息。
在一周的剩余时间内签核、
Nick
您好、Nick。
再次感谢。 这是我如何配置 SysConfig 的屏幕截图: 
我使用了 GPO0和 GPO1、因为我认为我会写入这些引脚并将其配置为输出。 在代码中、4个引脚在一个环路中将是高电平和低电平、但我出于测试目的使用2。 这是.dtsi 文件: 
我编写了如下所示的.dts 文件: 
我通常使用 windows、因此会向虚拟机 ubuntu 发送 dts 和 dtsi 文件、并尝试实施 DTC -i dts -O dtb -o devicetree.dtb devicetree.dts 命令、以便可以在 am62x Linux 开发板上使用它、但出现错误、尝试许多方法来修复。 我收到的语法错误来自第二行、即#include "devicetree.dtsi"。
下面是我刚才注释的 C 语言代码、部分 /cT_CFG.SYSCFG_bit.STANDBY_INIT = 0;因为 am62x 使用不同的 pru_cfg.h、但它会给出错误: 
此致
您好、Sevki、
修改 PRU 固件代码
你的改变看起来不错。
更多背景知识:
AM62x 上的 PRU 内核在被允许在 PRU 子系统之外进行读取和写入之前、无需设置任何位。 因此、AM335x PRU 内核需要手动启用 OCP 主端口、而 AM62x PRU 内核则不需要启用。
修改 Linux devicetree 文件
我们来介绍一些 Linux 开发基础知识。
1) 1)如果您要构建 Linux 代码、则需要在 Linux PC 上进行开发。
如果您主要是 MCU+ SDK/PRU 开发人员、那么您可以在 Windows 机器上进行大部分开发。 但是、如果必须修改 Linux 驱动程序设置、则需要使用 Linux 机器来重建 Linux devicetree 文件、并重新构建 Linux 内核和内核模块。
如果您只是重新构建 Linux devicetree、则 Ubuntu 虚拟机可以。 但您可能会注意到、您的内核和内核模块在虚拟机上的构建速度非常慢。 如果尝试使用 Yocto 重建整个 Linux 文件系统、实际上可能不可能(具体取决于分配给虚拟机的内存大小)。 如果您将来要做很多 Linux 工作、我建议您购买一台单独的 Linux PC。
2)如何修改和重建 Linux devicetree?
您使用的流程不正确。
我假设您使用的是 AM62x 入门套件 EVM (AM62x SK)。
您可以在 Linux SDK 文档中找到构建 devicetree 文件的确切步骤、如下所示:
https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Kernel_Users_Guide .html
请首先尝试构建未修改的 devicetree 文件。 从此处选择您正在使用的 EVM:
https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#compiling-the-device-tree-binaries
成功构建您的 devicetree 文件后、请按照我之前链接过的这个 e2e 响应中的确切步骤进行操作。 如果您使用 AM62x SK、我希望您修改现有文件 k3-am62x-sk-common.dtsi
它位于 Linux SDK board-support/ti-linux-x.x.x/arch/arm64/boot/dts/ti/下
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1387721/am625-pru-accessing-main-domain-uart/5380956#5380956
请注意、构建 devicetre 文件后、需要将其复制到文件系统中。 同样、按照 Linux SDK 文档中的步骤操作。
此致、
Nick
您好、Nick。
感谢您的回答。 我想在不使用器件树的情况下切换引脚、因为它应该可以配置输入和输出。 我如何只使用 c 代码和作为入门实验的一般.out 文件来执行此操作? 您说我的 C 代码没问题。 但是、当我在 Linux 电路板上运行.out 文件时、在示波器上看不到任何信号。 我还添加了以下内容:ct_CFG.gpcfg0_reg_bit.pru0_gpo_mode = 0x1; 认为输出模式启用、但没有任何区别、根据我的理解、我无法使用 SysConfig。 PRU 接头的 GPIO 引脚是否已停用? 我问这个问题、因为这是用户扩展头的问题、我将其激活。 PRU 是否有类似的东西? 提前感谢您。
此致
您好、Sevki、
简而言之:PRU 信号有2级引脚多路复用。 您所指的 GPCFG 寄存器是第一级引脚多路复用(在 PRU 子系统内部)、但您仍然必须配置位于处理器引脚本身的引脚多路复用。
从技术参考手册(TRM):

更多详细信息
当您考虑处理器中的外设时、请将其视为单独的模块。 UART、GPIO 模块、PRU 子系统、它们都是不同的块。
处理器引脚与这些模块分离。 从这些块之一发出的每个信号都像一个从该块传输到处理器引脚的灯串。
我们有如此多的外设、信号比处理器引脚更多。 这意味着我们可以将来自多个外设的多个信号连接到同一个引脚。 然后、您必须使用 pinmux 设置来选择这些信号(或我们所绘制图像中的字符串)中的哪些信号将从处理器引脚路由出去。
在上图中可以看到、从 PRU 子系统到器件引脚的字符串也通过引脚多路复用馈入。 您讨论的寄存器用于配置该 PRU 特定引脚复用。
如果您不同时配置处理器引脚、则不会看到信号。
此致、
Nick
您好、Sevki、
由于我要走出圣诞大门、这一回复将会很短-如果我们需要更多讨论、请在我回来后的1月份随意 ping 该主题。
在 PRU 端、您读取一个寄存器、然后写入另一个寄存器。 例如、在本示例中、您可以看到写入 R30写入 PRU GPO 信号、读取 R31则读取 PRU GPI 信号。
在引脚级引脚多路复用侧、您可以使用引脚多路复用设置来配置 PRU GPO 信号是否路由到处理器之外、或者 PRU GPI 信号是否连接到处理器。 例如、

此致、
Nick
此致、
Nick
对于未来的读者、此处继续进行了讨论:
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1462522/re-processor-sdk-am62x-how-to-write-mixed-c-and-assembly-pru-code
此致、
Nick