TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049 CLA Background任务启用,无法进入

Other Parts Discussed in Thread:C2000WARE


//大家好,我在配置CLA_Background  Task时
//发现通过Debug监控Cla1BackgroundTask函数中
//的index(外部定义的全局变量)发现程序执行过程之中
//未曾进入过Cla1BackgroundTask函数,
//以下是我对CLA的配置,请问有什么问题吗?


// Turn on all peripherals 
EALLOW; 
CpuSysRegs.PCLKCR0.bit.CLA1 = 1; 
CpuSysRegs.PCLKCR0.bit.CPUTIMER0 = 1; 
CpuSysRegs.PCLKCR0.bit.CPUTIMER1 = 1; 
CpuSysRegs.PCLKCR0.bit.CPUTIMER2 = 1; 
... 
EDIS; 

//Configuring CPUTimer 
ConfigCpuTimer(&CpuTimer0, 100, TIMER_1MS); 
ConfigCpuTimer(&CpuTimer1, 100, TIMER_50US); 
ConfigCpuTimer(&CpuTimer2, 100, TIMER_100US); 

void CLAInit(void)
{
	//// Copy the program and constants from FLASH to RAM before configuring// the CLA//memcpy((Uint32 *)&Cla1funcsRunStart, (Uint32 *)&Cla1funcsLoadStart,(Uint32)&Cla1funcsLoadSize );memcpy((Uint32 *)&Cla1ConstRunStart, (Uint32 *)&Cla1ConstLoadStart,
			(Uint32)&Cla1ConstLoadSize );

	//
	// CLA Program will reside in RAMLS3,RAML4
	//MemCfg_setCLAMemType((MEMCFG_SECT_LS3 | MEMCFG_SECT_LS4), MEMCFG_CLA_MEM_PROGRAM);
	
	MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS3, MEMCFG_LSRAMMASTER_CPU_CLA1);
	MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS4, MEMCFG_LSRAMMASTER_CPU_CLA1);

	// CPU and CLA1 share RAMLS5
	MemCfg_setCLAMemType(MEMCFG_SECT_LS5, MEMCFG_CLA_MEM_DATA);
	// RAMLS5 as Data memoryMemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS5, MEMCFG_LSRAMMASTER_CPU_CLA1);

	CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_1, (Uint16)&Cla1Task1);CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_2, (Uint16)&Cla1Task2);

	CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_TINT1);CLA_setTriggerSource(CLA_TASK_2, CLA_TRIGGER_SOFTWARE);

	CLA_enableTasks(CLA1_BASE, (CLA_TASKFLAG_1|CLA_TASKFLAG_2));
	
	// Configuring Background task
	CLA_mapBackgroundTaskVector(CLA1_BASE,(Uint16)&Cla1BackgroundTask);
	CLA_disableHardwareTrigger(CLA1_BASE);
	CLA_setTriggerSource(CLA_TASK_8, CLA_TRIGGER_SOFTWARE);
	CLA_enableBackgroundTask(CLA1_BASE);
	CLA_startBackgroundTask(CLA1_BASE);
	
	// Main cpu start CLA taskCLA_enableIACK(CLA1_BASE);CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_2);	
}

__attribute__((interrupt("background")))  void Cla1BackgroundTask ( void )
{
	while(1)
	{
	//CLA_TEST1_TOG();
		index++;
		if( CpuTimer0Regs.TCR.bit.TIF ==1){CpuTimer0Regs.TCR.bit.TIF =1;}
	}
}


Susan Yang:

请问您现在使用的是TI例程还是您自己的程序?若是例程的话,请给出出处。若是自己的程序的话,请您私信一下工程,我们具体看一下。

PS:请您之后使用右下角的 “使用高级编辑器编辑文本” 来上传代码

,

Susan Yang:

另外请您先参考下

e2e.ti.com/…/850480

,

Jasper:

工程为企业代码,无法给出

,

Susan Yang:

好的。请问您的index是如何定义的?请您使用关键字volatile试一下

,

Susan Yang:

另外您的CCS设置内是否打开了下面的选项

,

Susan Yang:

另外请您参考例程 cla_ex1_background_task

C2000Ware_3_03_00_00\device_support\f28004x\examples\cla

//// The background task will be triggered by software; it shares// the same trigger source as task 8. Disable the hardware triggering// mechanism for the background task (if it is enabled) and then// set the trigger source for task 8 to 0 indicating a software// trigger.//// Enable the background task and start it. Enabling the background// task disables task 8.//Cla1Regs._MVECTBGRND = (uint16_t)&Cla1BackgroundTask;
#pragma diag_warning=770Cla1Regs._MCTLBGRND.bit.TRIGEN = 0U;DmaClaSrcSelRegs.CLA1TASKSRCSEL2.bit.TASK8 = 0U; //SoftwareCla1Regs._MCTLBGRND.bit.BGEN = 1U;Cla1Regs._MCTLBGRND.bit.BGSTART = 1U;

,

Jasper:

加了volatile后可以看到BackgroundTask确实有执行,再请问一下,这个BackgroundTask中可以向其他claTask1_7一样调用内联函数吗?如果我在该任务内的代码量很多,我想封装到一个函数中,然后再由BackgroundTask去调用该内联函数

,

Jasper:

加了volatile后可以看到BackgroundTask确实有执行,再请问一下,这个BackgroundTask中可以向其他claTask1_7一样调用内联函数吗?如果我在该任务内的代码量很多,我想封装到一个函数中,然后再由BackgroundTask去调用该内联函数

,

Susan Yang:

user6368808 说:加了volatile后可以看到BackgroundTask确实有执行

谢谢您的反馈

user6368808 说:这个BackgroundTask中可以向其他claTask1_7一样调用内联函数吗?

可以的,BackgroundTask只支持调用内联函数

,

Susan Yang:

关于内联函数的问题,我们将在下面的链接内讨论

e2echina.ti.com/…/200110

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049 CLA Background任务启用,无法进入
分享到: 更多 (0)