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.

[参考译文] LP-AM261:PRU 寄存器 C28 的用途是什么?

Guru**** 2524370 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1556222/lp-am261-what-is-the-purpose-of-pru-register-c28

器件型号:LP-AM261


工具/软件:

您好!
在 PRU 链接器命令脚本中、我发现以下内容:

第 2 页
   /* 需要对 C28 进行编程以指向 SHAREDMEM、默认为 0 */
   /*具有 ECC 的 32KB 共享通用存储器 RAM、在 PRU0 和 PRU1 之间共享*/
   PRU_SHAREDMEM  :org = 0x00010000 len = 0x00008000
粗体部分表示什么? 应该在什么时候完成?为什么?

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

    尊敬的 Daniel:



    常量条目 24–31 中的地址是可部分编程的。 其可编程位字段 (nn_nn)
    (例如,c28_blk_index[3:0])可通过以下地址的 PRU CTRL 寄存器空间进行编程


    用于将 C28 配置为保持 SMEM 地址的 PRU 汇编代码

    ; Configure the Constant Table entry C28 to point to start of shared memory
    ; PRU_ICSSG Shared RAM (local-C28) : 00nn_nn00h, nnnn = c28_pointer[15:0]
    ; By default it is set to 0000_0000h so it will point to DMEM0 address
        
        ldi     R0, 0x0100
        sbco    &R0, C11, 0x28, 2
        
    ; example code to write into smem after configuring C28 with SMEM address
        ldi     R0, 0x1234
        sbco    &R0, C28, 0x0, 4



    此致、
    Manoj。


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

    尊敬的 Manoj:
    我仍然不明白为什么需要这样做、因为我在不设置 C28 的情况下就能够通过 SMEM 传输数据 R5<->PRU。  
    我正在 PRU 上使用 C 语言进行开发、下面是一个如何访问 PRU 端的 SMEM 的示例。

    #define PRUICSS_SHARED_RAM  0x10000U
    #define FW_SIGNATURE 0x55555555
    
     *shared_mem = FW_SIGNATURE;

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

    我忘记在代码示例中添加这行

    volatile uint32_t *shared_mem = (volatile uint32_t *)PRUICSS_SHARED_RAM;

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

    尊敬的 Daniel:

    您在汇编代码中将转换为与以下代码类似的代码、增加一个额外的 PRU 时钟周期:

    C28

    LDI32 R1、0x010000
    LDI32 R2、0x55555555
    SBBO &R2、 R1、0、4

    C28 简化您的设计

    LDI32 R2、0x55555555
    SBCO &R2、C28、0、4


    当您使用 C 代码时、应该会在访问 SMEM 时通知编译器使用常量表、我将对此进行检查并告知您

    此致、
    Manoj。

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

    尊敬的 Daniel:

    当您使用 c 代码时、应该可以通知编译器在访问 SMEM 时使用常量表、我将对此进行检查并告知您

    您还需要添加 C 代码来配置  我之前提到的 c28_blk_index[3:0]、并对链接器命令文件进行以下更改

    /* Specify the System Memory Map */
    MEMORY
    {
        PAGE 0:
          /* 12 KB PRU Instruction RAM */
          PRU_IMEM          : org = 0x00000000 len = 0x00003000
    
        PAGE 1:
          /* Data RAMs */
          /* 8 KB PRU Data RAM 0 */
          PRU0_DMEM_0       : org = 0x00000000 len = 0x00002000 CREGISTER=24
          /* 8 KB PRU Data RAM 1 */
          PRU0_DMEM_1       : org = 0x00002000 len = 0x00002000 CREGISTER=25
    
        PAGE 2:
          /* C28 needs to be programmed to point to SHAREDMEM, default is 0 */
          /* 32 KB Shared general purpose memory RAM with ECC, shared between PRU0 and PRU1 */
          PRU_SHAREDMEM     : org = 0x00010000 len = 0x00008000 CREGISTER=28
    }



     有关更多详细信息、请参阅以下文档的 8.5.4.2 部分:  PRU_COMPILER_GUIDE

    如果您有任何其他问题、请告诉我

    此致、
    Manoj。

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

    嗨、Manoj。
    我想我得到了它,感谢你的帮助!

    Daniel