📄 tasksetup_general.h
字号:
#if BD_FLAG
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Buffer descriptor flags are enabled\n");
#endif
/* always assume 2nd to last DRD */
*((TaskAPI->AddrDRD)) = (uint32)((uint32)TaskAPI->DRD[TaskAPI->AddrDRDIdx] + MBarPhysOffsetGlobal);
#endif /* #if BD_FLAG */
#else /* No Buffer Descriptors */
/* #error ATA should not be non-BD */
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Task will complete %d iterations before disabling\n");
#endif
*((TaskAPI->IterExtra)) = (uint32)(ITERATIONS-1);
#endif /* #if (MAX_BD>0) */
/* Setup auto start */
#if (AUTO_START <= -2 ) /* do not start a task */
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Auto task start disabled\n");
#endif
SDMA_TASK_CFG(SDMA_TCR, TaskNum, 0, TaskNum);
#elif (AUTO_START <= -1 ) /* restart task */
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Auto start task\n");
#endif
SDMA_TASK_CFG(SDMA_TCR, TaskNum, 1, TaskNum);
#elif (AUTO_START < MAX_TASKS) /* start specific task */
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Auto start task with TaskID=%d\n", AUTO_START);
#endif
SDMA_TASK_CFG(SDMA_TCR, TaskNum, 1, AUTO_START);
#else /* do not start a task */
#if (DEBUG_BESTCOMM_API>0)
printf("TaskSetup: Auto task start disabled\n");
#endif
SDMA_TASK_CFG(SDMA_TCR, TaskNum, 0, TaskNum);
#endif
#if (INITIATOR_DATA<0) /* runtime configurable */
SDMA_SET_INIT(SDMA_TCR, TaskNum, TaskSetupParams->Initiator);
/*
* Hard-code the task initiator in the DRD to avoid a problem w/ the
* hold initiator bit in the TCR.
*/
ext = 0;
for (i = 0; i < TaskAPI->NumDRD; i++) {
if (ext == 0)
{
#if (DEBUG_BESTCOMM_API>=10)
printf("TaskSetup: DRD[%d] initiator = %d\n", i, ((*(TaskAPI->DRD[i]) & ~DRD_INIT_MASK) >> DRD_INIT_OFFSET));
#endif
if (((*(TaskAPI->DRD[i]) & ~DRD_INIT_MASK) >> DRD_INIT_OFFSET) != INITIATOR_ALWAYS) {
#if (DEBUG_BESTCOMM_API>=10)
printf("TaskSetup: Replacing DRD[%d] initiator with %d\n", i, TaskSetupParams->Initiator);
#endif
*(TaskAPI->DRD[i]) = (*(TaskAPI->DRD[i]) & DRD_INIT_MASK)
| (TaskSetupParams->Initiator << DRD_INIT_OFFSET);
}
if ((*(TaskAPI->DRD[i]) & DRD_EXT_FLAG) != 0)
{
ext = 1;
}
}
else
{
if ((*(TaskAPI->DRD[i]) & DRD_EXT_FLAG) == 0)
{
ext = 0;
}
}
}
#else /* INITIATOR_DATA >= 0 */
TaskSetupParams->Initiator = INITIATOR_DATA;
#endif
#if (DEBUG_BESTCOMM_API>=10)
printf("\nTaskSetup: C-API Parameter Settings Passed to TaskSetup:\n");
printf("TaskSetup: NumBD = %d\n", TaskSetupParams->NumBD);
#if (MAX_BD>0)
printf("TaskSetup: MaxBuf = %d\n", TaskSetupParams->Size.MaxBuf);
#else
printf("TaskSetup: NumBytes = %d\n", TaskSetupParams->Size.NumBytes);
#endif
printf("TaskSetup: Initiator = %d\n", TaskSetupParams->Initiator);
printf("TaskSetup: StartAddrSrc = 0x%08X\n", TaskSetupParams->StartAddrSrc);
printf("TaskSetup: IncrSrc = %d\n", TaskSetupParams->IncrSrc);
printf("TaskSetup: SzSrc = %d\n", TaskSetupParams->SzSrc);
printf("TaskSetup: StartAddrDst = 0x%08X\n", TaskSetupParams->StartAddrDst);
printf("TaskSetup: IncrDst = %d\n", TaskSetupParams->IncrDst);
printf("TaskSetup: SzDst = %d\n", TaskSetupParams->SzDst);
#endif
#if (DEBUG_BESTCOMM_API>=20)
printf("\nTaskSetup: Task-API Parameter Settings Before TaskSetup Initialization:\n");
printf("TaskSetup: TaskNum = %d\n", (TaskAPI->TaskNum));
printf("TaskSetup: TaskPragma = 0x%02X\n", *((TaskAPI->TaskPragma)));
printf("TaskSetup: TCR = 0x%04x\n", SDMA_TASK_STATUS(SDMA_TCR, TaskNum));
#if (MAX_BD>0)
printf("TaskSetup: BDTableBase = 0x%08X\n", *((TaskAPI->BDTableBase)));
printf("TaskSetup: BDTableLast = 0x%08X\n", *((TaskAPI->BDTableLast)));
printf("TaskSetup: BDTableStart = 0x%08X\n", *((TaskAPI->BDTableStart)));
printf("TaskSetup: AddrEnable = 0x%08X\n", *((TaskAPI->AddrEnable)));
#if (INCR_TYPE_SRC==0)
printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
#endif
#if (INCR_TYPE_DST==0)
printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
#endif
#if (BD_FLAG)
printf("TaskSetup: AddrDRD = 0x%08X\n", *((TaskAPI->AddrDRD)));
printf("TaskSetup: AddrDRDIdx = %d\n", ((TaskAPI->AddrDRDIdx)));
#endif
#else
printf("TaskSetup: IterExtra = %d\n", *((TaskAPI->IterExtra)));
#if (INCR_TYPE_SRC==0)
printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
#else
printf("TaskSetup: StartAddrSrc = 0x%08X\n", *((TaskAPI->StartAddrSrc)));
#endif
#if (INCR_TYPE_DST==0)
printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
#else
printf("TaskSetup: StartAddrDst = 0x%08X\n", *((TaskAPI->StartAddrDst)));
#endif
#endif
#if (INCR_TYPE_SRC!=0)
printf("TaskSetup: IncrSrc = 0x%04X\n", *((TaskAPI->IncrSrc)));
#if (MISALIGNED | MISALIGNED_START)
printf("TaskSetup: IncrSrcMA = 0x%04X\n", *((TaskAPI->IncrSrcMA)));
#endif
#endif
#if (INCR_TYPE_DST!=0)
printf("TaskSetup: IncrDst = 0x%04X\n", *((TaskAPI->IncrDst)));
#if (MISALIGNED | MISALIGNED_START)
printf("TaskSetup: IncrDstMA = 0x%04X\n", *((TaskAPI->IncrDstMA)));
#endif
#endif
printf("TaskSetup: Bytes = %d\n", *((TaskAPI->Bytes)));
printf("TaskSetup: IncrBytes = %d\n", *((TaskAPI->IncrBytes)));
#endif
*((TaskAPI->Bytes)) = (uint32)TaskSetupParams->Size.MaxBuf;
#if (TYPE_SRC!=FLEX_T) /* size fixed in task code */
TaskSetupParams->SzSrc = TYPE_SRC;
#endif
#if (INCR_TYPE_SRC==0) /* no data pointer */
TaskSetupParams->IncrSrc = (sint16)0;
*((TaskAPI->AddrSrcFIFO)) = (uint32)TaskSetupParams->StartAddrSrc;
#else
#if (INCR_TYPE_SRC==1) /* automatic */
if (TaskSetupParams->IncrSrc!=0) {
TaskSetupParams->IncrSrc = (sint16)+TaskSetupParams->SzSrc;
} else {
TaskSetupParams->IncrSrc = (sint16)+TaskSetupParams->IncrSrc;
}
#elif (INCR_TYPE_SRC!=2) /* hard-coded */
TaskSetupParams->IncrSrc = (sint16)INCR_SRC;
#endif
*((TaskAPI->IncrSrc)) = (sint16)TaskSetupParams->IncrSrc;
#if (MAX_BD>0) /* pointer in BD Table */
/* pass back address of first BD */
TaskSetupParams->StartAddrSrc = (uint32)TaskGetBDRing(TaskNum);
#else
*((TaskAPI->StartAddrSrc)) = (uint32)TaskSetupParams->StartAddrSrc;
#endif
#if MISALIGNED | MISALIGNED_START
if (TaskSetupParams->IncrSrc < 0) {
*((TaskAPI->IncrSrcMA)) = (sint16)-1;
} else if (TaskSetupParams->IncrSrc > 0) {
*((TaskAPI->IncrSrcMA)) = (sint16)+1;
} else {
*((TaskAPI->IncrSrcMA)) = (sint16)0;
}
#endif
#endif
#if (TYPE_DST!=FLEX_T) /* size fixed in task code */
TaskSetupParams->SzDst = TYPE_DST;
#endif
#if (INCR_TYPE_DST==0) /* no data pointer */
TaskSetupParams->IncrDst = (sint16)0;
*((TaskAPI->AddrDstFIFO)) = (uint32)TaskSetupParams->StartAddrDst;
#else
#if (INCR_TYPE_DST==1) /* automatic */
if (TaskSetupParams->IncrDst!=0) {
TaskSetupParams->IncrDst = (sint16)+TaskSetupParams->SzDst;
} else {
TaskSetupParams->IncrDst = (sint16)+TaskSetupParams->IncrDst;
}
#elif (INCR_TYPE_DST!=2) /* hard-coded */
TaskSetupParams->IncrDst = (sint16)INCR_DST;
#endif
*((TaskAPI->IncrDst)) = (sint16)TaskSetupParams->IncrDst;
#if (MAX_BD>0)
/* pass back address of first BD */
TaskSetupParams->StartAddrDst = (uint32)TaskGetBDRing(TaskNum);
#else
*((TaskAPI->StartAddrDst)) = (uint32)TaskSetupParams->StartAddrDst;
#endif
#if MISALIGNED | MISALIGNED_START
if (TaskSetupParams->IncrDst < 0) {
*((TaskAPI->IncrDstMA)) = (sint16)-1;
} else if (TaskSetupParams->IncrDst > 0) {
*((TaskAPI->IncrDstMA)) = (sint16)+1;
} else {
*((TaskAPI->IncrDstMA)) = (sint16)0;
}
#endif
#endif
/* always use macro, only affect code with #define TYPE_? flex */
SDMA_SET_SIZE(SDMA_TASK_SIZE, TaskNum, TaskSetupParams->SzSrc, TaskSetupParams->SzDst);
if (TaskSetupParams->IncrSrc != 0) {
*((TaskAPI->IncrBytes)) = (sint16)-abs(TaskSetupParams->IncrSrc);
} else if (TaskSetupParams->IncrDst != 0) {
*((TaskAPI->IncrBytes)) = (sint16)-abs(TaskSetupParams->IncrDst);
} else {
*((TaskAPI->IncrBytes)) = (sint16)-abs(INCR_BYTES);
}
#if (DEBUG_BESTCOMM_API>=10)
printf("\nTaskSetup: C-API Parameter Settings Returned from TaskSetup:\n");
printf("TaskSetup: NumBD = %d\n", TaskSetupParams->NumBD);
#if (MAX_BD>0)
printf("TaskSetup: MaxBuf = %d\n", TaskSetupParams->Size.MaxBuf);
#else
printf("TaskSetup: NumBytes = %d\n", TaskSetupParams->Size.NumBytes);
#endif
printf("TaskSetup: Initiator = %d\n", TaskSetupParams->Initiator);
printf("TaskSetup: StartAddrSrc = 0x%08X\n", TaskSetupParams->StartAddrSrc);
printf("TaskSetup: IncrSrc = %d\n", TaskSetupParams->IncrSrc);
printf("TaskSetup: SzSrc = %d\n", TaskSetupParams->SzSrc);
printf("TaskSetup: StartAddrDst = 0x%08X\n", TaskSetupParams->StartAddrDst);
printf("TaskSetup: IncrDst = %d\n", TaskSetupParams->IncrDst);
printf("TaskSetup: SzDst = %d\n", TaskSetupParams->SzDst);
#endif
#if (DEBUG_BESTCOMM_API>=20)
printf("\nTaskSetup: Task-API Parameter Settings After TaskSetup Initialization:\n");
printf("TaskSetup: TaskNum = %d\n", ((TaskAPI->TaskNum)));
printf("TaskSetup: TaskPragma = 0x%02X\n", *((TaskAPI->TaskPragma)));
#if (MAX_BD>0)
printf("TaskSetup: BDTableBase = 0x%08X\n", *((TaskAPI->BDTableBase)));
printf("TaskSetup: BDTableLast = 0x%08X\n", *((TaskAPI->BDTableLast)));
printf("TaskSetup: BDTableStart = 0x%08X\n", *((TaskAPI->BDTableStart)));
printf("TaskSetup: AddrEnable = 0x%08X\n", *((TaskAPI->AddrEnable)));
#if (INCR_TYPE_SRC==0)
printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
#endif
#if (INCR_TYPE_DST==0)
printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
#endif
#if (BD_FLAG)
printf("TaskSetup: AddrDRD = 0x%08X\n", *((TaskAPI->AddrDRD)));
printf("TaskSetup: AddrDRDIdx = %d\n", ((TaskAPI->AddrDRDIdx)));
#endif
#else
printf("TaskSetup: IterExtra = %d\n", *((TaskAPI->IterExtra)));
#if (INCR_TYPE_SRC==0)
printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
#else
printf("TaskSetup: StartAddrSrc = 0x%08X\n", *((TaskAPI->StartAddrSrc)));
#endif
#if (INCR_TYPE_DST==0)
printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
#else
printf("TaskSetup: StartAddrDst = 0x%08X\n", *((TaskAPI->StartAddrDst)));
#endif
#endif
#if (INCR_TYPE_SRC!=0)
printf("TaskSetup: IncrSrc = 0x%04X\n", *((TaskAPI->IncrSrc)));
#if (MISALIGNED | MISALIGNED_START)
printf("TaskSetup: IncrSrcMA = 0x%04X\n", *((TaskAPI->IncrSrcMA)));
#endif
#endif
#if (INCR_TYPE_DST!=0)
printf("TaskSetup: IncrDst = 0x%04X\n", *((TaskAPI->IncrDst)));
#if (MISALIGNED | MISALIGNED_START)
printf("TaskSetup: IncrDstMA = 0x%04X\n", *((TaskAPI->IncrDstMA)));
#endif
#endif
printf("TaskSetup: Bytes = %d\n", *((TaskAPI->Bytes)));
printf("TaskSetup: IncrBytes = %d\n", *((TaskAPI->IncrBytes)));
#endif
return TaskNum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -