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