Other Parts Discussed in Thread: C2000WARE, SYSCONFIG
专家好:
参考C2000Ware例程写了一个CLA的程序,使用PWM过零触发ADC,ADC转换完成后会触发CLA进行闭环计算。目前只使用到了CLA的任务1(任务2给也设置了地址,但没有设置触发方式,因此不执行)
任务1里目前是个空白函数,任务1对应的中断里,只有清除相应ACK的操作。
测试发现,只进入了1次任务1对应的中断,之后CLA寄存器的状态就变成如下


可以看到,MIFR中的INT1是置位状态,表示产生了任务请求
但不知道为啥MIOVF的INT1也被置位了,从手册看MIOVF置位了表示在MIFR为1的时候又再次受到了任务请求,不知道是否是这样理解?
那这里就有点奇怪,第一次收到MIFR任务请求的时候,应该就会进入相应的任务去执行相关操作(任务是个空白函数),之后这个MIFR应该就会被自动清除掉,因此下一次被触发的时候MIFR应该为0才对。
另外,MIRUN的INT1一直为1,表示了任务1的函数当前正在执行,可是我的任务1对应的函数是个空白函数啊,为何会这样呢?
软件配置如下:
void CLA_DSP_configClaMemory(void)
{
extern INT32U Cla1ProgRunStart, Cla1ProgLoadStart, Cla1ProgLoadSize;
#ifdef _FLASH
// Copy over code from FLASH to RAM
memcpy((INT32U *)&Cla1ProgRunStart, (INT32U *)&Cla1ProgLoadStart, (INT32U)&Cla1ProgLoadSize);
#endif
MemCfg_initSections(MEMCFG_SECT_MSGCLA1TOCPU);
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCLA1TOCPU)){};
MemCfg_initSections(MEMCFG_SECT_MSGCPUTOCLA1);
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCPUTOCLA1)){};
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_CLA_MEM_DATA);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS1, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS1, MEMCFG_CLA_MEM_PROGRAM);
}
void CLA_DSP_initCpu1Cla1()
{
#pragma diag_suppress=770
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_1, (uint16_t)&Cla1Task1);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_ADCA1);
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_2, (uint16_t)(&Cla1Task2));
//CLA_setTriggerSource(CLA_TASK_2, CLA_TRIGGER_ADCD1);
#pragma diag_warning=770
CLA_enableIACK(CLA1_BASE);
CLA_enableTasks(CLA1_BASE, CLA_TASKFLAG_1);
CLA_enableTasks(CLA1_BASE, CLA_TASKFLAG_2);
Interrupt_register(INT_CLA1_1, &cla1Isr1);
Interrupt_register(INT_CLA1_2, &cla1Isr2);
}
void CLA_init()
{
CLA_DSP_configClaMemory();
CLA_DSP_initCpu1Cla1();
}
任务1:
__interrupt void Cla1Task1 (void)
{
return;
}
任务1对应的中断函数:
__interrupt void cla1Isr1 ()
{
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);
}
//更新后续操作现象
单步调试的时候,发现进入了任务1后,单步执行退出任务1后不知道为啥又进入了task2

任务1执行完后,单步执行下一步就进入了任务2
任务2的触发方式未做设置,按理说不应该会触发任务2吧?

想请教一下,这个是为啥呢,该如何修改?
另外,有点不明白为啥任务被触发后,还需要进一步触发相应的CLA任务中断呢?感觉不使能中断也并不影响任务的触发与执行
