器件型号: J721S2XSOMXEVM
你好,我们正在试图复制 MSC 缩放缓冲器使用 UDMA 和面临的问题与更高的分辨率 (1408Ux1184U ),与较低的分辨率 (704Ux592U) 这是很好的当我们更改为更高的分辨率 (1408Ux1184U ),似乎 UV 刻度正在给出问题.
问题出现在 variantData = 1 时、其中分辨率为 1408x1184。
在此处附加我的嗅探->
静态 void App_udmaTrpdInit (Udma_Ch 处理程序、
uint8_t *pTrpdMem、
const void *destBuf、
const void *srcBuf、
uint32_t 长度、
Bool isframecopy)
{
CSL_UdmapCppi5TRPD *pTrpd =(CSL_UdmapCppi5TRPD *) pTrpdMem;
CSL_UdmapTR15 *ptr =(CSL_UdmapTR15 *) UdmaUtils_getTrpdTr1Pointer (pTrpdMem、0U);
uint32_t *pTrResp =(uint32_t *)(pTrpdMem +(sizeof (CSL_UdmapTR15)* 2U));
uint32_t cqRingNum = UDMA_chGetCqRingNum (chHandle);
uint32_t 宽度;
uint32_t 高度;
uint64_t maxlength = 0;
if (g_variantData == 1)
{
宽度= 1408U;
高度= 1184U;
maxLength = 1000000U;
}
暴露
{
宽度= 704U;
高度= 592U;
maxLength = 400000U;
}
const uint32_t srcYStride =宽度; //704
const uint32_t srcUVStride =宽度; //704
const uint32_t dstYStride = FULL_W; //1408
const uint32_t dstUVStride = FULL_W; //1408
/*使 TRPD */
UdmaUtils_makeTrpd (pTrpd、UDMA_TR_TYPE_15、1U、cqRingNum);
/*设置 TR */
ptr->flags = CSL_FMK (UDMAP_TR_FLAGS_TYPE、15)|
CSL_FMK (UDMAP_TR_FLAGS_STATIC、0U)|
CSL_FMK (UDMAP_TR_FLAGS_EOL、0U)|/* NA */
CSL_FMK (UDMAP_TR_FLAGS_EVENT_SIZE、CSL_UDMAP_TR_flags_event_size_completion)|
CSL_FMK (UDMAP_TR_FLAGS_TRIGGER0、CSL_UDMAP_TR_FLAGS_TRIGGER_NONE)|
CSL_FMK (UDMAP_TR_FLAGS_TRIGGER0_TYPE、CSL_UDMAP_TR_FLAGS_TRIGGER_TYPE_ALL)|
CSL_FMK (UDMAP_TR_FLAGS_trigger1、CSL_UDMAP_TR_FLAGS_TRIGGER_NONE)|
CSL_FMK (UDMAP_TR_FLAGS_trigger1_type、CSL_UDMAP_TR_FLAGS_TRIGGER_TYPE_ALL)|
CSL_FMK (UDMAP_TR_FLAGS_CMD_ID、0x25U)|/*这将在 TR 响应中返回*/
CSL_FMK (UDMAP_TR_FLAGS_SA_INDIRECT、0U)|
CSL_FMK (UDMAP_TR_FLAGS_DA_INDIRECT、0U)|
CSL_FMK (UDMAP_TR_FLAGS_EOP、1U);
uint32_t ySize =宽度*高度;
uint32_t uvSize = ySize / 2U;
// uint8_t *dstY =(uint8_t *) destBuf;
// uint8_t *dstUV = dstY +(FULL_W * FULL_H);
IF (isframecopy)
{
if (length == uvSize) // UV
{
ptr->icnt0 =宽度; // 704.
PTR->icnt1 =高度/2; // 296.
PTR->DIM1 = srcUVStride;// 704-704 = 0
ptr->ddim1 = dstUVStride; // 1408 - 704 = 704
ptr->addr =(uint64_t) srcBuf /* UDMA_appVirtToPhyFxn (srcBuf、0U、NULL)*/;
ptr->daddr =(uint64_t) destBuf;//+(592U/2U)* 1536U + 768U /* UDMA_appVirtToPhyFxn (DESTBuf、0U、NULL)*/;
}
否则 //Y
{
ptr->icnt0 =宽度;
pt->icnt1 =高度;
PTR->DIM1 = srcYStride; // 704-704 = 0
ptr->ddim1 = dstYStride; // 1408 - 704 = 704
ptr->addr =(uint64_t) srcBuf /* UDMA_appVirtToPhyFxn (srcBuf、0U、NULL)*/;
ptr->daddr =(uint64_t) destBuf/*UDMA_appVirtToPhyFxn (destBuf、0U、NULL)*/;
}
ptr->icnt2=1u;
ptr->icnt3=1u;
ptr->dim2 = 0;
ptr->dim3 = 0;
ptr->fmtflags = 0x00000000U;/*线性寻址、每个元素 1 个字节。 替换为 CSL-FL API */
ptr->dicnt0 = ptr->icnt0;
ptr->dicnt1 = ptr->icnt1;
ptr->dicnt2=1u;
ptr->dicnt3=1u;
ptr->ddim2 = 0;
ptr->ddim3 = 0;
}
暴露
{
ptr->icnt0 =长度;
PTR->icnt1 = 1U;
ptr->icnt2=1u;
ptr->icnt3=1u;
ptr->DIM1 = ptr->icnt0;
ptr->dim2 =(ptr->icnt0 * ptr->icnt1);
ptr->dim3 =(ptr->icnt0 * ptr->icnt1 * ptr->icnt2);
ptr->addr =(uint64_t) srcBuf /* UDMA_appVirtToPhyFxn (srcBuf、0U、NULL)*/;
ptr->fmtflags = 0x00000000U;/*线性寻址、每个元素 1 个字节。
替换为 CSL-FL API */
ptr->dicnt0 =长度;
PTR->dicnt1 = 1U;
ptr->dicnt2=1u;
ptr->dicnt3=1u;
ptr->ddim1 = ptr->dicnt0;
ptr->ddim2 =(ptr->dicnt0 * ptr->dicnt1);
ptr->ddim3 =(ptr->dicnt0 * ptr->dicnt1 * ptr->dicnt2);
ptr->daddr =(uint64_t) destBuf /* UDMA_appVirtToPhyFxn (destBuf、0U、NULL)*/;
}
/*清除 TR 响应存储器*/
*pTrResp = 0xFFFFFFFFFFFFU;
/*回写缓存*/
UDMA_appUtilsCacheWb (pTrpdMem、UDMA_TEST_APP_TRPD_SIZE);
返回;
}
