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.

[参考译文] TMDSEVM572X:PRU R31读取问题

Guru**** 2601915 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630328/tmdsevm572x-pru-r31-read-issue

器件型号:TMDSEVM572X

您好!

SDK: pdk_am57xx_1_0_7

操作系统:TI RTOS

为了在直接输入模式下使用 PRU 内核的 GPI、我进行了以下更改。

在 Pinmux 工具的帮助下、更新 了分配 了 PRUSS1_PRU0 - pr1_pru0_gpi13的焊球编号 AF1、该编号之前分配给了 LM 模块的连接器 P9上的 GPIO3_20。

Inline image 1

此更改可在 boardPadDelayInit.c 文件中看到
Inline image 3
网址为 boardPadDelayTune.h
Inline image 2
2.下载并安装 PRU 软件支持包(PRU-addon-v4.0-Windows-Install)。
3.在 CCSV6中导入 Lab2项目、并进行了以下更改、因为它适用于 AM335x
我使用的实验是针对 AM335x 编写的、因此对 AM57x 进行了修改。 实验2 (读取按钮开关)  

-步骤2b。 选择“AM5728”而不是“BeagleBone_Black”  
-步骤3. 将"AM335x_PRU.cmd"替换为"AM57xx_PRU.cmd"(可在 CCS 内的 PRU/include 文件夹中获取)
步骤5e。 针对您希望在 GP AM572x EVM 上使用的任何 GPI 更新此信息。 GEL 文件中的 Pinmuxing 也需要更新。
-步骤8c。 针对您希望在 GP AM572x EVM 上使用的任何 GPO 更新此信息。 GEL 文件中的 Pinmuxing 也需要更新。
更新了下面显示的代码
修改了 BUTTOK_LED_0项目以读取 R31寄存器。

"

#define SW10x00002000 //(1 << 13)//(1 << 5) TB Anjana

__R31 = 0x00000000;

while (1){

//等待 SW1被按下*/

if ((__R31 & SW1)!= SW1){

//中断 PRU1,等待500ms 以获得廉价的“去抖”;



//*#define U100/ trigger 0/*;//




4.我已经为 pr1_pru0_gpi13引脚提供了3.3伏电压、并在 while 调试中观察观察窗口中的 R31寄存器值。  

但是、根据我使用的 gpi13 R31值的引脚、R31 (0x00000000)寄存器值没有发生变化 
当我使其为高电平(3.3V)时为0x00002000。 请帮助我了解我将如何读取 R31 reg 值。? 

e2e.ti.com/.../button_5F00_led_5F00_0.ce2e.ti.com/.../pru_5F00_cfg.h
谢谢、
Anjana Pathak

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

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

    正如 button_led_0工程中的示例代码所示、"if ((_R31和 SW1)!= SW1)"将为您提供 R31值并检查 GPI13引脚状态是否发生变化。 在 PRU R31 (GPI)直接连接模式下、默认情况下、GPI[20:0]直接馈送到 PRU R31。 您的内联图像丢失。

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

    您好、Garrett、

    是的、我尝试读取 GPI13的 R31、但 R31值仍然为0x00000000。 为了进行测试、我在该引脚上提供3.3伏电压(  LM 模块 P9连接器的 GPI_13引脚编号2)。

    丢失的图像是。

    在 Pinmux 工具的帮助下、更新了分配了 PRUSS1_PRU0 - pr1_pru0_gpi13的焊球编号 AF1、该编号之前分配给了 LM 模块的连接器 P9上的 GPIO3_20。  

    已下载所有文件。 一切都好吗?

    e2e.ti.com/.../boardPadDelayTune.h

    谢谢

    Anjana Pathak

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

    使用 pinmux 更新、您是否重建电路板库并验证0x4A00_3534处的 CTRL_CORE_PAD_VIN1A_D16? 位3:0 (VIN1A_D16_MUXMODE)必须为0xC:PR1_pru0_gpi13。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Garrett、
    我按照路径 processors.wiki.ti.com/.../Rebuilding_The_PDK 中给出的步骤重建电路板库。
    但我无法找到您提供信息的文件。

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

    您的 pinmux 文件显示了 PADCONF_REG_OFFSET 0x1534和 PADCONF_VALUE 0x5010c。 如果您查看表18-1311。 CTRL_CORE_PAD_VIN1A_D16'在 AM572x TRM 的控制模块章节中、您应该能够找到其物理地址0x4A00_3534。

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

    e2e.ti.com/.../0160.button_5F00_led_5F00_0.ce2e.ti.com/.../8512.pru_5F00_cfg.he2e.ti.com/.../pru_5F00_intc.hHiGarrett、

    是的、我在 该 TRM 表中看到了物理地址。

    我没有将 OS 用于 PRU GPI 测试程序。 PRU 已编程为裸机。 附加项目中的文件。

    那么、我如何在这里整合物理地址呢?

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

    我是说您需要通过 JTAG/CCS 查看控制模块寄存器来检查您的引脚多路复用设置是否生效。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、可以这么做
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    需要在 PRU main 中包含 hw_ctrl_core_pad_io.h 文件、并将 CTRL_CORE_PAD_VIN1A_D16的值从默认值更改为位3:0 (VIN1A_D16_MUXMODE)更改为0xC:PR1_pru0_gpi13。

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

    >>第5e 步。 针对您希望在 GP AM572x EVM 上使用的任何 GPI 更新此信息。 GEL 文件中的 Pinmuxing 也需要更新。
    >>第8c 步。 针对您希望在 GP AM572x EVM 上使用的任何 GPO 更新此信息。 GEL 文件中的 Pinmuxing 也需要更新。

    当您需要从主机加载 PRU 映像时、通常在主机而不是 PRU 中完成具有引脚多路复用器的电路板配置。 在仅使用 PRU 的实验示例中、您可以在 GEL 中使用 pinmux、如您所述。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    很抱歉、我不理解"GEL 文件中的 Pinmuxing 也需要更新"的含义。 我认为这与使用 Pinmux 工具更新焊盘的步骤有关。 请澄清... 我是否需要在 GEL 文件中进行一些更改?

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

    您可以参阅 ccsv7\ccs_base\emulation\boards\am572x\gel 中的 AM572x_pad_config.gel、以在 GEL 文件中实现您的 pinmux。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在文件 AM572x_pad_config.gel 中、我找到了以下定义

    #define SYSCFG_PAD_VIN1A_D16 (0x4A003534)
    #define SYSCFG_PAD_VIN1A_D16_PR1_PRU0_PRU_R3113 (0x0c)
    #define SYSCFG_PAD_VIN1A_D16_PR1_PRU0_PRU_R3013 (0x0d)

    这是否足以读取 pr1_pru0_gpi13引脚上的输入?

    谢谢、
    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些宏定义是可以的、但不会写入 GEL 中的焊盘控制寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有得到,你想说什么......
    请澄清。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anjanan、

    我想说的是、位于0x4A00_3534的 CTRL_CORE_PAD_VIN1A_D16的位3:0 (VIN1A_D16_MUXMODE)不会更新为0xC:PR1_pru0_gpi13仅使用 GEL 文件中的定义、您需要调用 WR_MEM_32 ()将 PR1_V31A_SYSCFG_SY31A_PRU_SYSCFG_R1A_SYSCFG_R1A_SYSCFG_SY311_SYSCF_SYSCFG_R31_SYSCF_R1_SYSCF_SY31A 写入到 PRU_SY31_SYSCF_PRU_PR

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Garrett:
    我在 AM572x_pad_config.gel 文件中进行了更改
    /*通过 Anjana 启用 pr1_pru0_gpi13标记*/
    WR_MEM_32 (SYSCFG_PAD_VIN1A_D16、SYSCFG_PAD_VIN1A_D16_PR1_PRU0_PRU_R3113);

    R31值仍然不变。。。

    下面附上了测试代码。
    #include
    #include
    /*TODO:包含 intc.h */
    #include

    // PRU 内核1
    #define PRU1

    易失性寄存器 uint32_t __r30;
    易失性寄存器 uint32_t __r31;

    /*定义*/
    #define PRU0

    /* PRU0至 PRU1中断*/
    #define PRU0_PRU1_EVT(16)
    #define PRU0_PRU1_TRIGGER(_R31 =(PRU0_PRU1_EVT - 16)|(1 << 5))

    /* SW1偏移*/
    /*TODO:为 SW1定义 GPI 偏移*/
    #define SW1(1 << 13)

    /* INTC 配置
    *我们将把用户事件16映射到主机1
    *然后、PRU1将等待 R31位31 (指定主机1)变为高电平
    ***/
    void configIntc(){
    /*清除任何挂起的 PRU 生成的事件*/
    _R31 = 0x00001000;

    /*将事件16映射到通道1 */
    CT_INTC.CMR4_BIT.CH_MAP_16 = 1;/*TODO:选择正确的位字段并输入正确的值*/;

    /*将通道1映射到主机1 */
    CT_INTC.HMR0_bit.HINT_MAP_1 = 1;/*TODO:选择正确的位字段并输入正确的值*/;

    /*确保清除事件16 */
    CT_INTC.SICR = 16;/*TODO:清除适当的事件*/;

    /*启用事件16 */
    CT_INTC.EISR = 16;/*TODO:启用适当的事件*/;

    /*启用主机中断1 */
    CT_INTC.HIEISR |=(1 << 0);/*TODO:启用适当的事件*/;

    //全局启用主机中断
    CT_INTC.GER = 1;/*TODO:启用全局事件*/;


    void main(){
    /*将 GPI 和 GPO 配置为模式0 (直接连接)*/
    CT_CFG.GPCFG0 = 0x0000;

    /*清除 GPO 引脚*/
    _R30 &= 0xFFFFFF0000;

    /*配置 INTC */
    //configIntc();

    while (1){
    /*等待 SW1被按下*/
    if ((_R31和 SW1)!= SW1){
    /*中断 PRU1、等待500ms 以获得便宜的"去抖"*/
    _delay_cycles (100000000);
    /* TODO:触发中断-请参阅#defines */
    //PRU0_PRU1_TRIGGER;



    /*暂停 PRU 内核-不应在此*/
    _halt ();


    此致、
    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    引脚 GPIO3_20是直接输入的 pinmux 至 pr1_pru0_gpi13是否存在问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    如果我出现错误、请回复、因为当 pr1_pru0_gpi13引脚设置为高电平时、R31寄存器值未设置为1。
    是否有任何文档或文献可帮助我在直接输入模式下激活 PRU。 由于 PRU GPI 的这种不可访问性、我的开发将被延迟。

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

    TRM 对于此类问题始终是最有用的文档。 我将尝试查看您的代码的详细信息、然后返回给您。

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

    WR_MEM_32 (SYSCFG_PAD_VIN1A_D16、SYSCFG_PAD_VIN1A_D16_PR1_PRU0_PRU_R3113);将仅将引脚多路复用模式设置为 pr1_pru0_gpi13。 您还需要启用"接收模式"、您能否尝试将 PADCONF_VALUE 0x5010c 写入 SYSCFG_PAD_VIN1A_D16?

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

    Anjana Pathak