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.

AM2732: HWA dma触发模式无法触发第二个loop的处理

Part Number: AM2732

你好,工程师

我在使用am2732开发板进行HWA相关功能的开发。我将HWA的Paramset的触发方式设置为HWA_TRIG_MODE_DMA,loopCnt为4;在使用CCS进行Debug的过程中发现这组paramset可以由DMA触发,并且正常完成第一个loop的处理,然后由EDMA将数据从hwa membank搬移到L3上,然后由该EDMA触发chain的EDMA通道搬移第二个loop需要的数据到HWA的membank中。在CCS上通过内存查看,第二个loop的数据已经成功搬移到HWA的membank中了,但是没有触发HWA的paramset进行处理,此时查看寄存器loop_cnt的值为2,但是hwa的dest membank中的数据仍为第一个loop的处理结果,即第二个loop没有开始处理;请问为什么会发生上述的问题?loop_cnt=2是否说明hotSignature已经将寄存器DMA2HWA_TRIG中对应的bit进行置位了?

谢谢

  • 能否发一下相关的DMA配置代码?

  • Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <kernel/dpl/DebugP.h>
    #include <kernel/dpl/CycleCounterP.h>
    #include <drivers/hwa.h>
    #include "ti_drivers_config.h"
    #include "ti_drivers_open_close.h"
    #include "ti_board_open_close.h"
    #include "dpedma/dpedma.h"
    #include "dpedma/dpedmahwa.h"
    /*global paramset*/
    HWA_Handle gHwaHandle;
    DPEDMA_ChanCfg gEdmaChannelCfg[10];
    Edma_IntrObject gEdmaIntrObj[10];
    uint32_t gAddressArray[10]={0};
    uint32_t PrevParamsetEndIdx = 0;
    HWA_CommonConfig COMPRESScommonConfig;
    uint16_t CompressedData[1400832];
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    代码参照了SDK中 HWA数据解压缩的代码

  • 你好,工程师

    经过测试,我发现可能为函数DPEDMAHWA_configOneHotSignature配置的Ccnt有问题,我将hotSignature的值配置为HWA的loopCnt后,可以成功执行所有的loop,并正常输出到L3上;在SDK中,该函数配置hotSignature的Ccnt=1;请问为什么在我的CCS代码中,该Ccnt耗尽之后不会重新加载?

    谢谢

  • 感谢您对TI产品的关注!由于问题比较复杂,已将您的问题发布在E2E英文技术论坛上,由资深的英文论坛工程师为您提供帮助。工程师需要一些时间看一下问题。
    e2e.ti.com/.../am2732-hwa_trig_mode_dma-trigger-paramset

  • 你好

    我们发现在配置EDMA paramset时,实际使用的EDMA paramset配置没有问题,但是配置的shadow EDMA paramset的参数存在问题;通过查看shadow paramset的寄存器得知,该参数与预设的不同,导致实际的EDMA cnt耗尽之后link到shadow EDMA paramset,拷贝得到的参数配置有问题,导致上述的问题出现;请问,为什么shadow EDMA的配置会有问题?在配置shadow EDMA之前我尝试打印各参数的值,均正常;使用的函数如上附的代码所示是DPEDMA_setup_shadow_link。

    谢谢

  • 你好,工程师

    我最终定位到了问题,在函数DPEDMA_setup_shadow_link中有一个变量edmaParam,该变量在使用函数EDMA_ccPaRAMEntry_init进行初始化后,使用“=”进行结构体赋值,edmaParam = *config;  在赋值后,导致出现了2Byte的偏移,使参数出现错位,导致最终配置的paramset错误;

    我不使用等号进行结构体赋值后,参数配置正常,程序也能正常运行了;

    请让专家帮忙确认,该问题是否是由结构体赋值方式引入的。

    谢谢

  • 已跟进帖子,请关注帖子的回复。