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.

[参考译文] AM2634:无法从 PRU1 读取/写入访问内部数据存储器

Guru**** 2747375 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1609603/am2634-unable-to-read-write-access-the-internal-data-memory-from-pru1

器件型号: AM2634
主题: SysConfig 中讨论的其他器件

尊敬的 TI 支持服务:您好!

我正在开发一个使用 PRU0 在 GPIO 上生成实时位拆分的简单程序、运行良好。

现在、我尝试为 PRU1 调试一个程序、该程序检查从 PRU0 程序生成的数据、但我遇到了一个问题、即我无法从 PRU1 访问数据存储器 DMEM0 和 DMEM1。

我的程序启动正常到 main() 函数、但当尝试首次访问内存(读或写)时、仿真停止、并在“调试输出“窗口中显示红色错误:
ICSSM_PRU_1:停止目标 CPU 时出现问题:(错误–2062 @ 0x0)无法暂停器件。 重置器件、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电、和/或尝试更可靠的 JTAG 设置(例如下 TCLK)。 (仿真包 20.4.0.3756)  

在以下 linker.cmd 文件中(我无法上传)

移动数据
  第 0 页:
   /* 12KB PRU 指令 RAM */
   PRU_IMEM      :org = 0x00000000 len = 0x00003000

  第 1 页:
   /*数据 RAM */
   /* 8KB PRU 数据 RAM 0 */
   PRU0_DMEM_0   :org = 0x00000000 len = 0x00002000
   /* 8KB PRU 数据 RAM 1 */
   PRU0_DMEM_1   :org = 0x00002000 len = 0x00002000

  第 2 页:
   /* C28 需要进行编程以指向 SHAREDMEM、默认值为 0 */
   /*具有 ECC 的 32KB 共享通用存储器 RAM、在 PRU0 和 PRU1 之间共享*/
   PRU_SHAREDMEM  :org = 0x00010000 len = 0x00008000
  //重要
  //在 AM263P_tech_ref_spruj55d.pdf 文件中找到 CREGISTER 的值 11
  //第 7.3.5.2.1 章 PRU 常量表
  // EntryNo。 指向的正确区域       值[31:0]
  // 11   PRU-ICSS PRU0 控制(本地)0002_2000h PRU0
  //
  //或者、只需查看文件:c:\ti\PRU_support_package\labs\labs\assembly\assembly_code\solution\am62x\AM62x_PRU0.cmd Getting_Started_Labs
  //其中说明了所有设置
  //
   PRU0_CTRL:origin=0x00022000 length=0x30 CREGISTER=11    
}

/*指定段分配到存储器中*/
Sections{

  .text:_c_int00*> 0x0、第 0 页
  .text      > PRU_IMEM、  第 0 页
  .data_RAM:align(4)
  {
   *(ramdata)
  }> 0x2000、第 1 页
  .bss       > PRU0_DMEM_1、第 1 页
  .stack      > PRU0_DMEM_1、第 1 页

  .shared_RAM:align(4)
  {
   *(shared_PRU)
  }>PRU_SHAREDMEM、第 2 页  
}
主程序从开始
内部 main (void)
  if (numloopOK > 10)
  {
    numloopOK = 0;
  }
 
并且它在读取和访问 numloopOK 变量时挂起、如果我首先对变量进行写入、也会发生同样的情况。
 
在反汇编窗口中、PRU1 在尝试在偏移 0x24 处执行指令 LBBO 时挂起
immagine.png
 

在下面的映射文件摘录中(我无法上载它)

全局符号:按符号地址排序  

页面 地址 名称            
-----   -----            
0  00000000 _c_int00 _noinit_noargs   
0  0000001c MAIN            
0  000003ec _TI_zero_init_nomemset  
0  00000418 中止           
0  00000420 C$$EXIT          
0  00000438 _TI_TI_ Handler_Table_Base  
0  0000043a _TI__ Handler_Table_Limit  
0  0000043c _TI_CINIT_Base      
0  0000044c _TI_CINIT_LIMIT      
1  00002000 数字           
1  00002028 numloopOK         
1  0000202c _stack           
1  0000212c _TI_STACK_END       
2  00010000 SHARED_R30         
2  00022000 CT_PRU0_CTRL        
ABS 0000000b __PRU_CREG_PRU0_CTRL    
ABS 00000100 _TI_STACK_SIZE      
ABS 00022000 __PRU_CREG_BASE_PRU0_CTRL
ABS ffffffff __c_args__     

变量 numloopOK 分配在 0x2028、因此似乎可以。

如前所述、程序运行正常、直到执行数据存储器访问。

如前所述、PRU0 的一个更复杂的程序正常运行。

 

此致、再次感谢您的帮助!

Michele Sponchiado

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

    您好、Michele:

    感谢您就这个问题提出意见。 我正在查看详细信息。

    您是否使用 SysConfig 工具进行初始器件配置? 如果是、您能否向我们提供相关的.syscfg 文件?

    此致、

    Zackary Fleenor

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

    你好、Michele、

    我不确定我是否了解您尝试在 linker.cmd 文件中实现的目标。 请向我们展示您在 C 代码中创建的数据结构、并帮助我们了解您打算如何与它们进行交互。

    FYI:模板 linker.cmd 文件

    我假设您使用的是 MCU+ SDK 中的 linker.cmd 文件模板。 请记住 MCU+ SDK 中的一些错误、例如 PRU1 linker.cmd 文件不存在(它们只是复制粘贴的 PRU0 linker.cmd 文件)、并且 IRAM 实际上为 16kB、而不是 12kB。

    您可以在 OpenPRU 存储库中找到我为 AM263x C 代码放在一起的最新示例:
    https://github.com/TexasInstruments/open-pru/tree/main/source/linker_cmd/c_code/am263x 

    您将注意到、我交换了 PRU0/PRU1 链接器.cmd 文件中 DMEM0 和 DMEM1 的地址、因为 PRU0 和 PRU1 在不同偏移处可以看到这些存储器区域。

    我希望在接下来的几周内对 OpenPRU 中的这些文件进行一些最终更新(例如,阐明内存区域标签以便更有用)、我们将了解我的计划进度。

    此致、

    Nick

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

    AM243x PRU Academy 是另一个可能对您有用的资源(我在 AM243x/AM64x 团队中、不是 AM26x 团队中)。 AM26x 团队仍在努力发布他们的 PRU Academy 版本、我没有固定的时间表来确定他们何时完成该版本。

    PRU 入门实验实际上包含一个在固定存储器位置定义变量的示例。 让我为大家介绍最后一个实验、在这里我们讨论了如何在 CCS 中进行调试: https://dev.ti.com/tirex/explore/node?isTheia=false&node=A__AX1K.lD2Cl7kpC-fonM13A__AM24X-ACADEMY__ZPSnq-h__LATEST

    下面是我们在内存中的固定位置定义变量的示例代码。 我将为您指向“solutions"文件夹“文件夹、这样您就可以看到完整的文件: https://github.com/TexasInstruments/open-pru/blob/main/academy/getting_started_labs/c_code/solution/firmware/main.c

    此致、

    Nick

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

    您好、Nick!

    非常感谢您的答复!

    使用您建议的 OpenPRU 存储库中的 cmd 文件来加载和调试我的程序。

    我不确定 linker.cmd 文件中导致问题的原因;如果我能够检测导致仿真器停止的原因、我将告诉您这一点。

    再次感谢

    Michele

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

    你好米歇尔,很高兴听到你能够取得进展!

    如果您以后有任何问题、请随时创建新的 e2e 主题、我们将在那里向您聊天。

    此致、

    Ncik