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任务中断呢?感觉不使能中断也并不影响任务的触发与执行