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.

[参考译文] TDA3:EDMA 自动递增传输、采用 EVE

Guru**** 2550110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/622254/tda3-edma-autoincrement-transfer-with-in-eve

器件型号:TDA3

我们正在使用 eV_SW_01_12_00_00软件中提供的 Rotate 内核将1280 x 768图像旋转90度。

在此过程中、我们使用自动递增 DMA 传输将64 x 64的块从输入映像传输到 EVE 的内部存储器。

但是,在将64x64处理块写入输出内存时,我们无法配置输出传输参数。 为了更好地解释这种情况、我将4 x 3矩阵作为输入图像、旋转后、4x3矩阵将变为3 x 4矩阵。

假设 a、b、c、d 为 64 x 64块

A B C D
e F G h
j k L

旋转后  

D h L
C G k
B F j
A e

要传输到内部存储器的输入块将按顺序 a、b、c、d...

但是、在写入输出缓冲器时、第一个块将出现在最后一行。 因此、对于每个输入块处理、我必须跳转(64 x 768)以将 b 块放置到输出缓冲器中。  

请找到下面给出的输出传输的 DMA 传输属性、如果我错了、请纠正我的错误。

  initParam.transferProp[1].roiWidth               768
   initParam.transferProp[1].roiHeight              1280
   initParam.transferProp[1].roiOffset              0
   initParam.transferProp[1].blkWidth              64
   initParam.transferProp[1].blkHeight              64
   initParam.transferProp[1].extBlkIncrementX       0
   initParam.transferProp[1].extBlkIncrementY       -64
   initParam.transferProp[1].intBlkIncrementX       0
   initParam.transferProp[1].intBlkIncrementY       0
   initParam.transferProp[1].extMemPtrStride        1280
   initParam.transferProp[1].interMemPtrStride      64
   initParam.transferProp[1].extMemPtr              PTR+(1280-64)*768
   initParam.transferProp[1].interMemPtr           
    initParam.transferProp[1].dmaQueNo              
    initParam.transferProp[1].interMemPtr 黑色
   initParam.transferProp[1].dmaQueNo

此致、

Sritam

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

    我已将您的问题转交给 EVE 专家。

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

    您好、Sritam、

      自动递增实用程序要求输入和输出传输的水平和垂直块数量相同。 为了实现数据流、您可以使用两个自动递增实用程序实例、一个为输入块配置、另一个为输出块配置。 请告诉我这是否对您有效。

    此致、

    安州

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

    您好、Anshu、

    我已配置2个不同的自动递增实用程序实例。 但我面临的挑战是配置输出传输的 transferProp 参数。

    例如、如果我们考虑1280 x 768的输入图像和32 x 32的块大小、则输入传输参数如下所示

    initParamIn.numInTransfers = 1;
    initParamIn.numOutTransfers = 0;
    initParamIn.transferType = EDMA_utils_transfer_in;

    initParamIn.transferProp[0].roiWidth = 1280;
    initParamIn.transferProp[0].roiHeight = 768;
    initParamIn.transferProp[0].roiOffset = 0;
    initParamIn.transferProp[0].blkWidth = 32;
    initParamIn.transferProp[0].blkHeight = 32;
    initParamIn.transferProp[0].extBlkIncrementX = 32;
    initParamIn.transferProp[0].extBlkIncrementY=32;
    initParamIn.transferProp[0].intBlkIncrementX = 0;
    initParamIn.transferProp[0].intBlkIncrementY=0;
    initParamIn.transferProp[0].extMemPtrStride = 1280;
    initParamIn.transferProp[0]。interMemPtrStride = 32;
    initParamIn.transferProp[0].extMemPtr = src;
    initParamIn.transferProp[0]。interMemPtr = srcBlk;
    initParamIn.transferProp[0].dmaQueNo = 0;

    输出传输参数如下所述。  

    initParamOut.numInTransfers = 0;
    initParamOut.numOutTransfers = 1;
    initParamOut.transferType = EDMA_utils_transfer_out;

    initParamOut.transferProp[0].roiWidth = 768;
    initParamOut.transferProp[0].roiHeight = 1280;
    initParamOut.transferProp[0].roiOffset = 0;
    initParamOut.transferProp[0].blkWidth = 32;
    initParamOut.transferProp[0].blkHeight = 32;
    initParamOut.transferProp[0].extBlkIncrementX = 0;
    initParamOut.transferProp[0].extBlkIncrementY =-32; ?/*请注释*/
    initParamOut.transferProp[0].intBlkIncrementX = 0;
    initParamOut.transferProp[0].intBlkIncrementY=0;
    initParamOut.transferProp[0].extMemPtrStride = 768;
    initParamOut.transferProp[0]。interMemPtrStride = 32;
    initParamOut.transferProp[0].extMemPtr = dst+(1280-32)*768;
    initParamOut.transferProp[0]。interMemPtr = dstBlk;
    initParamOut.transferProp[0].dmaQueNo = 0;

     在输出传输参数中,extMemPtr 指向图像最后一行的第32行。 在将第一个大小为32 x 32的已处理块写入该位置后、下一个已处理块 需要将上面的32行写入其已写入的上一个位置。 extBlkIncrementY 必须 为-32。 但该变量只能预期无符号整数。

    请建议我们如何配置输出传输参数。

    此致、

    Sritam

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

    您好、Sritam、

      目前、我们不支持增量的负值。 我无法完全理解您要做的事情。 根据我的理解、您希望以这样的方式自动递增、即首先写入最后一个块行、然后是上面的一行(即从图像底部开始、再到顶部)。 我不知道为什么你需要这个。 如果您可以更详细地解释您的数据流、我们可以尝试建议最佳的可用替代方案。

    此致、

    安州

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

    我们尝试在 EVE 中将尺寸为1280 x 768的图像旋转90度。
    为了实现同样的效果、我们使用 imgsiglib 目录中提供的旋转内核。 这有助于我们旋转一个 M x N 尺寸块、每个尺寸为32的倍数。
    现在、在每个块旋转后、我们必须以转置方式放置每个旋转块、以使整个图像旋转90度。

    我们也找不到任何示例、在整个映像上发生旋转以获取 DMA 传输参数的挂起。

    请建议。

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

    您好、Sritam、

    如前所述、电流接口不支持 X 和 Y 方向的负增量。 但是、用户可以更改接口以使这些增量变为 int16_t、从而支持您的要求并重建 DMA 实用程序。 您可能需要对 EDMA_UTILS_autoIncrement_configure 函数进行细微修改、以确保 numBlkHorz 和 numBlkVert 不为负。 简单的方法是浏览代码以查看 extBlkIncrementX 和 extBlkIncrementY 的使用位置、并查看使它们变为负值是否会破坏某个结果。 我们在最后还没有验证过这一点、因此您必须尝试一下。 但我认为它应该起作用。  

    此致、

    安州