⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tasksetup_general.h

📁 MPC5200 BSP 支持ATA,USB, I2C,扩展网口
💻 H
📖 第 1 页 / 共 2 页
字号:
 #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 + -