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.

[参考译文] PROCESSOR-SDK-AM64X:AM64x_GP_EVM PRU 可以#39;t 查看 R31中的 GPI

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1184750/processor-sdk-am64x-am64x_gp_evm-pru-can-t-see-gpi-in-r31

器件型号:PROCESSOR-SDK-AM64X

您好!

我在 R5内核上运行、并将 PRU 软件加载到 PRU0。 我通过 HSE 连接器读取 PRU GPIO。

通过 R5内核、我配置3个 GPIO 引脚、一个作为 OUT、一个作为 IN:

*((unsigned int*)(CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET + PIN_PRG0_PRU0_GPO8))= 0;//将 PRU0的 GPIO 8引脚设置为 OUT。
*((unsigned int*)(CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET + PIN_PRG0_PRU0_GPO2))= 1;//将 PRU0的引脚 GPIO 2设置为 IN。
*((unsigned int*)(CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET + PIN_PRG0_PRU0_GPO3))= 0;//将 PRU0的引脚 GPIO 3设置为 OUT。

PRU 固件不断切换引脚3、我可以在示波器上看到它。
PRU 固件设置为"1"引脚8、我可以在示波器上看到它。

引脚8和引脚2 (HSE 上的 A7和 A8)之间短路、因此我可以从引脚2读取1、R31仍然为0。

PRU GPI 缺少哪种配置才能工作?

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

    您好 Anton、

    您的引脚多路复用设置与我预期的相同。

    请附上正在读取引脚值的 PRU 固件代码片段。 我编写的一些示例代码在 GPI 值观察到变化之前不会切换 GPO 值、请访问 :https://e2e.ti.com/support/processors-group/processors/f/processors-forum/711112/beaglebn-pru-egpio-timing/2651773#2651773

    此致、

    Nick

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

    我只需将数据写入共享并打印在那里

    LDI r7.w2、0x0001
    LDI r7.W0、0x0000

    LDI R8.W0、0xDEDE
    LDI R8.w2、0xcbcb

    sbbo &R8、r7、0、4;只是为了查看其工作情况

    LDI r30、0x100

    KET_R:

    LDI R1,2000;12微秒延迟
    WAIT_DULE_CYCLES1:
    SUB R1、R1、1;来自循环计数的子结构
    qbne wait_duble_CYCLES1、R1、0;如果不是0则上跳

    LDI R1,2000;12微秒延迟
    WAIT_DULE_CYCLES2:
    SUB R1、R1、1;来自循环计数的子结构
    qbne wait_duble_CYCLES2、R1、0;如果不是0则上跳

    sbbo &r30、r7、4、4
    sbbo &R31、r7、8、4

    QBA KET_R

    我在0x3001000中看到0xcbbdede

    和0x3001004中的0x100

    但是 0x3001008始终为0……

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

    I 测试:

    LDI r30、0x100


    WBS R31、2.

    LDI r30、0xFFFF

    GPO8和 GPI2引脚短接。

    GPO3仍然保持为0。

    只需确保:

    HSE 车型上的 GPIO2为 A8

    GPIO3在 HSE 车型上为 A9

    GPIO8在 HSE 上为 A7

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

    您好 Anton、

    我不确定您对第一个代码片段所做的是什么。 请参阅《PRU 汇编指令用户指南》(https://www.ti.com/lit/spruij2)。 SBBO 是一个写入命令。 为了查看 R31中的值、您需要读取它们、而不是写入它们。

    在 CCS 中调试 PRU 代码可能是有道理的、以准确查看程序计数器的位置(即确保 WBS 命令是 PRU 所在的位置、而不是代码的某些不相关部分)。 有关 PRU 调试的更多信息、请访问 https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_05_00_21/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs_Lab5.html

    我们还要确保电路板没有连接问题。 当您将该引脚设置为 GPO2而不是 GPI2并消除 GPO8和该引脚之间的短路时、您是否能够看到 GPO2引脚自行切换?

    此致、

    Nick

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

    您好、Nick

    借助 SBBO、我将 R31的内容写入共享存储器以供 R5内核查看。 尽管它是对存储器的写入命令、但写入的数据是从 R31读取的。

    我调试了 PRU、可以清楚地看到它卡在 WBS 指令上。

    我测试了所有3个引脚作为输出、所有3个引脚都工作正常。 它仅是问题所在的输入。

    我看到有一个内部 ICSS 引脚多路复用器、这可能是一个问题吗? 我是否需要一些 GPI 配置? 我看到有一些串行输入可以完成...

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

    地狱安东

    否、对于内部引脚多路复用、GPI 和 GPO 使用相同的设置。 因此、如果您能够 从该引脚发送 GPO 信号、您还应该能够从该引脚接收 GPI 信号。 (技术参考手册 TRM 中"PRU_ICSSG 内部引脚多路复用"部分中的更多信息

    为了进一步确保我们隔离潜在问题,如果您检查 R31!= 0,会发生什么情况? (即、如果有任何输入变为高电平)或执行类似设置 R30值的操作、等待10个 PRU 时钟周期、然后将 R31值保存到存储器中以进行检查?

    此致、

    Nick

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

    无论我做什么、R31都是0。。。

    我是否缺少某些电源或 clk 配置?

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

    我的 PAD 配置错误。

    将引脚配置设置为1会将 GPI 路由到引脚、但引脚本身不会设置为 RX。 要设置 RX 引脚、我还需要将位18 RXACTIVE 设置为1。

    因此、将写入更改为:
    *((unsigned int*)(CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET + PIN_PRG0_PRU0_GPO2))= 0x40001;

    解决了问题、现在 GPI 可以正常工作。

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

    您好 Anton、

    感谢您回复您的解决方案!

    此致、

    Nick