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.

[参考译文] RTOS/TDA2HV:如何在 OCMC RAM 中创建共享区域(SR0)?

Guru**** 2553390 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/623820/rtos-tda2hv-how-to-create-a-shared-region-sr0-in-ocmc-ram

器件型号:TDA2HV
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

大家好、

我正在使用 TDA2xx VAYU EVM XC5777X CPU 板。 我对 IPU (M4)和 DSP (C66)通信感兴趣。 此时、我们将使用在外部存储器中定义的共享存储器区域、如 VISION SDK 2.12中的 IPC 示例中所述。 为了使操作正常、我们创建了自定义平台文件并将 SR_0区域定义为:

["SR_0"、
{
名称:"SR_0"、
基地址:0x8E000000、
Len:0x1000000、
太空:"数据"、
访问:"RW"
、}
]、 

配置 文件 c胶囊 ipc.cfg.xs 包含区域说明:

/*共享区域配置*/
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.translate = false;
/*配置 SharedRegion #0 (IPC)*/
var SR0Mem = Program.cpu.memoryMap["SR_0"];

SharedRegion.setEntryMeta(0、
新建 SharedRegion.entry ({
姓名: "SR_0"、
基址: SR0Mem.base、
长度: SR0Mem.len、
ownerProId:0、
IsValid: 对、
高速缓存行大小:128、
高速缓存启用:sr0_高速 缓存启用
})
); 

SR_0归 DSP 所有。

现在、我们希望加快加载并存储到存储器中、因为这会影响我们的性能、所以计划是定义更小的共享区域、但在 OCMC RAM 芯片2和3中、它们总共有2 MIB 的空间。 第一个问题是有可能吗? 我们能否像这样将 SR_0映射为两个区域上的一个区域:  

["SR_0"、
{
名称:"SR_0"、
基地址:0x40400000、
Len:0x00200000、
太空:"代码/数据"、
访问:"rwx"、
}
]、 

如果是、下一个问题是如何正确配置 IPU 的 AMmu 以使其像这样工作。 由于它仅支持2个大小为256KiB 的介质页条目、因此它们被占用以映射 OCMC RAM1芯片。 和大页面条目仅支持32M 和512M 大小。 我试图这样描述它:  

VAR Ammu = xdc.useModule('ti.sysbios.hal.ammu.AMMU');

Ammu.configureAmmu = true;

/******* 小页数 //*
smallPages [0]和 smallPages [1]通过 h/w 自动编程*/*
覆盖 smallPage[1],以便覆盖16K。 H/w 复位值仅配置
* 4K */
Ammu.smallPages [0]。pageEnabled = Ammu.Enable_Yes;
Ammu.smallPages [0];
Ammu.smallPages [0];translateAddress = 0x55020000;
Ammu.smallPages [0];Ammu.translationPages = AMmu.Ammu.translage[0].Ammu.Ammu.Ammu.Amages[0]
;Ammu.Ammu.Ammu.Ammu.Ammu.ales[0]
Ammu.smallPages [0].volatileQualifier = Ammu.volatile_follow;
Ammu.smallPages [0].l1_cacheable = Ammu.cachepolicy_cacheable;

/* smallPage[1],以便覆盖16K。 H/w 复位值仅配置
* 4K */
Ammu.smallPages [1].pageEnabled = Ammu.Enable_Yes;
Ammu.smallPages [1].logicalAddress = 0x40000000;
Ammu.smallPages [1].translateAddress = 0x55080000;
Ammu.smallPages [1].Amages[1]
;Ammu.translations=Ammu.Ammu.Amages[1];Ammu.Ammu.Ammu.translations=Only.Amages[1];Ammu.Ammu.
Ammu.smallPages [1].volatileQualifier = Ammu.volatile_follow;


/******* 中页 //
//* OCMC 空间已映射*//
*使其 L1可高速缓冲*/
Ammu.mediumPages [0]启用= Ammu.Enable_Yes;
Ammu.mediumPages [0]。logicalAddress = 0x00300000;
Ammu.mediumPages [0];translatedAddress = 0x40300000;
Ammu.medium.AmumPages = 0x00300mu.Ammu.Ammu.Ammu.AmumPages = 0x0000.Ammu.Ammu.medium.AmumPages
;Ammu.Ammu.Ammu.Amu.Amu.AmumPages = 0x40
Ammu.mediumPages[0].L1_cacheable = Ammu.csachepolicy_cacheable;
Ammu.mediumPages[0].L1_writepolicy = Ammu.writepolicy_write_back;
Ammu.mediumPages[0].L1_allocates= Ammu.alu.alu.alu.alu.meditagePolicy_posted.Amum.Phyes1.Ammu.Amumages[0].Ammu.Amum.pages].Amum.Amum.Amumpage.Ammu.Amum.Amum



Amable.mediumPages [1].logicalAddress = 0x00340000;
Amachemu.mediumPages [1].translateAddress = 0x40340000;
Ammu.mediumPages [1].translationEnabled = Amachemmu.Enable_Yes;
Amachemu.mediumPages [1].size = Ammu.medium_256k;Amcumu.perature[Amcmu.media.al.alu.alu.alu.alu.e0.1].alges[1];amum.amum.amucmu.medium.

Ammu.mediumPages [0].L1_writepolicy = Ammu.writepolicy_write_back;
Ammu.mediumPages [0].L1_allocate = Ammu.AllocatePolicy_Allocate;
Ammu.mediumPages [0].L1_posted= Ammu.PostedPolicy_posted***

大页数 /

//*代码/数据:大页(32M);可高速缓冲*/




放大器。largePAGE[0]。pageEnabled = Ammu.Enable_Yes;Ammu.largePAGE[0]。logicalAddress = 0x8000000;Amimuler.largePAGE[0]。volatureEnabled = Ammu.ma_no;Ammu.alimu.aturePages[0];Amvolature_volature.amages[0];Amile.volature_volature.amages[0]
1.Ammu.largePages [0].L1_cacheable = Ammu.csachepolicy_cacheable;
Ammu.largePages [0].L1_posted= Ammu.PosedPolicy_posted;
Ammu.Ammu.AmulePages =0].L2_ameages[0].AmuleZu.AmuleZu.Ameages=AmuleZu.AmuleZu.AmuleZu.Amuleages[0].AmuleZu.AmuleZu.AmuleZu.AmuleZu.AmuleZu.AmuleZu.Amages[0].AmuleZu.AmuleZu.AmuleZu.AmuleZu.AmuleZu.AmuleZu.Amages[0].AmuleZu.AmuleZu.AmuleZu.AmuleZu.Amages[0].Amules







Ammu.largePages [1].L1_cacheable = Ammu.cachepolical_non_cachable;
Ammu.largePages [1].L1_posted= Ammu.PostedPolicy_non_posted;
Ammu.AmlargePages [1].L2_cacheable = Ammu.csecolicole_non_postedPolicy[1].Ammu.Ammu.Ammu.Amule.posteages[1].Amules].Amule.poste.posteages[1].Am

但是在 BIOS 启动时、我遇到了以下问题:

[Cortex_M4_IPU1_C0] ti.sysbios.family.arm.m3/hwi:1105行:e_hardFault:Forced

TI.SYSBIOS.family.ARM.m3/Hwi:第1182行:E_BUSFault:PRECISERR:立即总线故障、已知确切地址:4ae0c204

在 PC = 0x8005510e 时的后台线程中发生异常。

内核0:ThreadType_Main 中发生异常。

主名称:main(),句柄:0x0。

主堆栈基地址:0x800。

主堆栈大小:0x2000。

R0 = 0x4ae0c204 R8 = 0x00000000

R1 = 0x800b3a84 R9 = 0x00000000

R2 = 0x00000010 R10 = 0x00000000

R3 = 0x000027c4 R11 = 0x00000000

R4 = 0x00000000 R12 = 0x00002764

R5 = 0x00000000 SP (R13)= 0x00002758

R6 = 0x00000000 LR (R14)= 0x80055133

R7 = 0x00002800 PC (R15)= 0x8005510e

PSR = 0x01000000

ICSR = 0x00400803

MMFSR = 0x00

BFSR = 0x82

UFSR = 0x0000

HFSR = 0x40000000

DFSR = 0x00000001

MMAR = 0x4ae0c204

BFAR = 0x4ae0c204

AFSR = 0x00000000

很抱歉这篇长文章、但它有很多值得描述的东西。 有人能帮我们解决这个问题吗?

此致、

帕夫洛!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    帕夫洛
    您无法使用 VISION SDK 本身、它实现了小型 SR0 IPC (仅从 IPC 软件包中使用通知进行处理器间通信)。 您可以自定义 SDK 的功能和内核数量等
    如果我的理解不正确、请告诉我?

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

    我并不是真的关注您提到的项目或示例。 它是\vision_sdk\examples 文件夹吗?
    此时、我们尝试估算系统的性能。 因此、我们将通过以太网并通过 IPC 将指针传递到 DSP 将数据传输到 M4。 DSP 执行所有计算后、指针传递到 M4并通过以太网传输回主机。 正如您看到的、内存速度是这里的核心功能。

    此致、
    帕夫洛!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,Pavlo
    VSDK 是适用于 TDA2xx 器件的完整固件。 如果您为 TDA2xx 构建、则默认情况下会启用 SoC 的所有内核、在所有这些启用的内核之间设置 IPC、设置高速缓存/MMU 配置、设置默认存储器映射等 对于\vision_sdk\examples 文件夹下的所有用例、都启用了此基本提取

    供参考、
    此外、您能否检查 VisionSDK_DataSheet.pdf 中列出的 IPC 配置文件编号
    部分-处理器间通信(IPC)延迟
    这可能会帮助您获取一些焊球停止编号。

    此致、Shiju
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavlo、
    您是否检查了 PC 地址0x8005510e 处的指令?
    访问 BFAR = 0x4ae0c204时、也会出现故障。 即 CTRL_WKUP_ID_CODE -用于检测器件版本的寄存器


    您能否检查并将以下条目添加到 Ammu 配置中?

    /*将 L3/L4外设(邮箱、自旋锁)映射到 ammu (不可高速缓存)*/
    VAR entry = Ammu.largePages [3];
    entry.pageEnabled = Ammu.Enable_Yes;
    entry.平 转换已启用= Ammu.Enable_Yes;
    entry.logicalAddress = 0x60000000;
    entry.translatedAddress = 0x40000000;
    entry.size = Ammu.large_512M;
    entry.l1_cacheable = Ammu.cachepolicy_non_cacheable;
    entry.volatileQualifier = Ammu.volatile_follow;
    entry.executeOnly = Ammu.Enable_no;
    entry.readonly = Ammu.Enable_no;
    entry.prefetch = Ammu.Enable_no;
    entry.exclusion = Ammu.Enable_Yes;
    entry.l1_cacheable = Ammu.cachepolicy_non_cacheable;
    entry.L1_LOADED = Ammu.PostedPolicy_non_posted;
    entry.L1_allocate = Ammu.AllocatePolicy_NON_Allocate;
    entry.l1_writepolicy = Ammu.writepolicy_write_through;

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

    是的、我忘记提到芯片修订版检查函数确实是生成错误的地方。
    根据映射文件:
    8004b900 8004b900 0002456c 0002456c r-x .text.1

    text.1 0 8004b900 0002456c
    8004b900 000014e8 TI.NSP.drv.gmacsw.aem4:mdio.oem4 (.text)
    8004cde8 00001250 :cpdma.oem4 (.text)
    8004e038 00001122 rtsv7M4_T_le_eabi.lib:_printfi.obj (.text)
    8004f15a 00000002 HAL_userled_stub.aem4:llled.oem4 (.text:LED_toggle)
    8004f15c 000010d8 TI.NSP.drv.gmacsw.aem4:ale.oem4 (.text)
    80050234 000010a4 TI.NSP.drv.ndk2nsp.aem4:ndk2nsp.oem4 (.text)
    800512d8 00000c68 STK.aem4:tcpin.oem4 (.text:TcpInput)
    80051f40 00000b1c TI.NSP.drv.gmacsw.aem4:port.oem4 (.text)
    80052a5c 00000a50 :CPTs.oem4 (.text)
    800534ac 000009fc ipc.aem4:ipc.obj (.text:ti_sdo_ipc_GateMP_instance_init__E)
    80053ea8 000009a8 TI.NSP.drv.gmacsw.aem4:gmacsw.oem4 (.text)
    80054850 000008b8 STK.aem4:tcpout.oem4 (.text:TcpOutput)
    80055108 000007d8 tda2xx_init.obj (.text)
    800558e0 00000700 netHooks.obj (.text)

    tda2xx_init.obj 包含 PlatformGetSiliconRev 函数。 但是添加大页面并不能解决问题
    此致、
    帕夫洛!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Shiju、您好!

    我知道视觉框架的工作原理、但现在我们不使用它、我不知道我们最终是否会使用 DSP。 在此阶段、我们需要有信心证明 DSP 将提供足够合理的计算速度。

    此致、

    帕夫洛!