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.

[参考译文] TMS320F28375D:CLA 读/写数据问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/646884/tms320f28375d-cla-read-write-data-issue

器件型号:TMS320F28375D

我正在使用 CLA 来计算 FFT 的项目。 FFT 代码在 C28x 上运行良好、但当我将其放入.CLA 文件时、问题就会开始。

在调试器中、如果我不手动将目标连接到 CLA 和"加载符号"、调试就不能显式 CLA 部件。 (我使用 Cla1ForceTask1andWait();来自示例项目)。

如果我进行连接和加载、我会逐步浏览 CLA 代码、但它不会导致数据发生任何更改! 我尝试用数组中的一些基本操作替换 FFT、例如更改选定的元素、但这也没有用处。 我只能在 C28x 主代码中看到我加载到数组中的值、但无法进行任何更改。

我在.cmd 文件(下面的代码)中执行了所有存储器管理、但我不是很好地理解如何编写.cmd、所以可能会留下一些关键的东西。 猜问题在该文件中的某个位置、但我无法确定。

提前感谢!

此致、Konstantin


--define=cla_C=1 #if cla_C // cla_暂 存区大小= 0x100; --undef_sym=__cla_暂 存区_end --undef_sym=__cla_暂 存区_start #endif //cla_ca_c memory { PAGE 0: // begin 用于启动 SARAM/*引导加载程序 :origin = 0x000000,length = 0x000002 RAMM0:origin = 0x000122、length = 0x0002DE RAMD0:origin = 0x00B000、length = 0x000800 RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */ RAMD1 :origin = 0x00B800,length = 0x000800 RAMLS0_1 :origin = 0x008000、length = 0x001000 RAMGS0_2:origin = 0x00C000、length = 0x003000 RAMGS9 :origin = 0x015000,length = 0x001000 RAMGS10 :origin = 0x016000,length = 0x001000 RAMGS11 :origin = 0x017000、length = 0x001000 reset:origin = 0x3FFFC0,length = 0x000002 page 1: boot_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将使用此作为栈*/ CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080 CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080 RAMLS2_3:origin 0x009000,length 0x001000 RAMFS4_5:0x001000 RAMGS4 :0x000_RAM1000 origin = 0x011000、length = 0x002000 RAMGS7:origin = 0x013000、length = 0x001000 RAMGS8 :origin = 0x014000、length = 0x001000 RAMGS12 :origin = 0x018000、length = 0x001000 RAMGS13 :origin = 0x019000、length = 0x001000 RAMGS14:origin = 0x01A000、length = 0x001000 RAMGS15:origin = 0x01B000、length = 0x001000 } SECTIONS { codestart :>开始, PAGE = 0 #ifdef __TI_Compiler_version__ #if __TI_Compiler_version__>=15009000 .TI.ramfunc:{}>RAMM1, PAGE = 0 #else ramfuncs :> RAMM0 PAGE = 0#endif #endif CLAscratch: {*.obj (CLAscratch) 。 += CLA_ScratchPad_size; *。obj (CLAscratch_end)}> RAMLS4_5、page = 1 Cla1Prog:> RAMLS4_5、page =1 .text :>> RAMM0 | RAMM1 | RAMD0 | RAMD1 |RAMGS0_2/* RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4*/,PAGE = 0 .cinit :> RAMGS0_2, PAGE = 0.Pinit :> RAMGS0_2, PAGE = 0.switch :> RAMGS0_2, PAGE = 0.reset :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/ .stack :> RAMGS3_4、 PAGE = 1.ebss :> RAMGS8,PAGE = 1 .econst :> RAMGS5_6,PAGE = 1.esysmem :> RAMGS7,PAGE = 1 Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1 CpuToCla1MsgRAM:> CLA1_MSGRAMIGH,PAGE = 1.BSS_CLA :> RAMLS4_5, PAGE = 1 //特定项 IOBuffer :>RAMLS2_3,align=512,page=1//2*256 } /* /================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ //文件结束。 //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *

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

    您好!

    我注意到您对 CLA 程序和数据使用相同的 LS RAM 块(RAMLS4_5)。 我假设 RAMLS4和 LS5在您的代码中配置为 CLA 的程序 RAM (请确认)。 您是否可以尝试将.bss_cla 段和其他数据段(如 CLAscratch )放入 RAML2_LS3块(假设在代码中将 LS2和 LS3编程为 CLA 数据 RAM、请确认)。

    此致、

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void CLA_configClaMemory (void)
    {
    extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;
    EALLOW;
    
    //
    //初始化并等待 CLA1ToCPUMsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};
    
    //
    //初始化并等待 CPUToCLA1MsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};
    
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;//共享 btw CPU 和 cla1;if 0 -到 CPU
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 1;//prog
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 1;
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0;//数据
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0;
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 0;
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0;
    
    EDIS;
    }
    

    SECTIONS
    {
    codestart :>开始, PAGE = 0
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}>RAMM1, PAGE = 0
    #else
    ramfuncs :> RAMM0 PAGE = 0#endif
    
    #endif
    
    CLAscratch:
    {*.obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS2_3、page = 1
    
    Cla1Prog:> RAMLS0_1、page =0//
    
    .text :>> RAMM0 | RAMM1 | RAMD0 | RAMD1 |RAMGS0_2/*
    RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4*/,PAGE = 0
    .cinit :> RAMGS0_2, PAGE = 0.Pinit
    :> RAMGS0_2, PAGE = 0.switch
    :> RAMGS0_2, PAGE = 0.reset
    :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
    
    .stack :> RAMGS3_4、 PAGE = 1.ebss
    :> RAMGS8,PAGE = 1
    .econst :> RAMGS5_6,PAGE = 1.esysmem
    :> RAMGS7,PAGE = 1
    
    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1
    CpuToCla1MsgRAM:> CLA1_MSGRAMIGH,PAGE = 1.BSS_CLA
    
    :> RAMLS2_3, PAGE = 1
    
    //特定项
    IOBuffer :> RAMLS4_5,align=512,page=1//2*256 

    您好!

    非常感谢、我在第0页将 CLA 程序重新配置为 LS0_1、并且将其中的大多数 LS 块(2到5)设置为数据块并用作数据块。 现在、程序至少执行 CLA 部分。 但现在发生了另一个问题:我无法单步执行 CLA 代码、错误提示器件正在运行、暂停并重试、但它已经停止、因为我在单步模式下运行了所有程序。 执行结果远非预期、因此调试不可避免、但由于这个问题、我无法执行调试。

    CPU1_CLA1:不能单步执行目标程序:(错误-2060 @ 0x0)在器件运行时无法完成请求的操作。 停止器件、然后重试此操作。 (仿真包7.0.48.0)

    此致、

    Konstantin