This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi,
I want to use the CLA, when the trip zone interrupt occurs. Trip zone occurs cycle by cycle. I use CLA_forceTasks inside the tripzone interrupt ISR. But CLA is not working. Variables in CLA is not changing.
The following code is variables that are transferred between CPU and CLA.
#pragma DATA_SECTION(iL1_sensed_real_poz,"CpuToCla1MsgRAM");
volatile float32_t iL1_sensed_real_poz;
#pragma DATA_SECTION(iL1_sensed_real_neg,"CpuToCla1MsgRAM");
volatile float32_t iL1_sensed_real_neg;
#pragma DATA_SECTION(TTPLPFC_ac_vol_sensed_Volts,"CpuToCla1MsgRAM");
volatile float32_t TTPLPFC_ac_vol_sensed_Volts;
#pragma DATA_SECTION(TTPLPFC_vBus_sensed_Volts,"CpuToCla1MsgRAM");
volatile float32_t TTPLPFC_vBus_sensed_Volts;
#pragma DATA_SECTION(TripZoneCNTR1,"CpuToCla1MsgRAM");
volatile float32_t TripZoneCNTR1;
#pragma DATA_SECTION(grid_direction,"CpuToCla1MsgRAM");
volatile int16_t grid_direction;
#pragma DATA_SECTION(iL1_ort,"Cla1ToCpuMsgRAM");
volatile float32_t iL1_ort;
The following code is CLA configuration.
void setupCLA(void)
{
memcpy((uint32_t *)&Cla1ProgRunStart, (uint32_t *)&Cla1ProgLoadStart,(uint32_t)&Cla1ProgLoadSize);
memcpy((uint32_t *)&Cla1ConstRunStart, (uint32_t *)&Cla1ConstLoadStart,(uint32_t)&Cla1ConstLoadSize );
MemCfg_initSections(MEMCFG_SECT_MSGCPUTOCLA1);
MemCfg_initSections(MEMCFG_SECT_MSGCLA1TOCPU);
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCPUTOCLA1));
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCLA1TOCPU));
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS1, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS2, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS3, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS4, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS5, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS6, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS7, MEMCFG_LSRAMMASTER_CPU_ONLY);
MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS1, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS2, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS3, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS4, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS5, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS6, MEMCFG_CLA_MEM_DATA);
MemCfg_setCLAMemType(MEMCFG_SECT_LS7, MEMCFG_CLA_MEM_DATA);
#pragma diag_suppress=770
CLA_mapTaskVector(CLA1_BASE , CLA_MVECT_1, (uint16_t)&Cla1Task1);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_SOFTWARE);
#pragma diag_warning=770
CLA_enableIACK(CLA1_BASE);
CLA_enableTasks(CLA1_BASE, CLA_TASKFLAG_1 | CLA_TASKFLAG_2 );
Interrupt_register(INT_myCLA01, &cla1Isr1);
Interrupt_enable(INT_myCLA01);
}
The following code is trip zone interrupt setup
void setupInterrupt(void)
{
Interrupt_register(INT_myEPWM2_TZ, &INT_myEPWM2_TZ_ISR);
EPWM_enableTripZoneInterrupt(EPWM2_BASE, EPWM_TZ_INTERRUPT_DCBEVT2);
Interrupt_enable(INT_myEPWM2_TZ);
setupCLA();
EALLOW;
//
//Enable Global interrupt INTM
//
EINT;
//
//Enable Global realtime interrupt DBGM
//
ERTM;
EDIS;
}
interrupt void cla1Isr1(void)
{
//
// Acknowledge the end-of-task interrupt for task 1
//
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);
//
// Uncomment to halt debugger and stop here
//
// asm(" ESTOP0");
}
In the following code, iL1_ort is calculated in CLA. But, it is not working.
interrupt void INT_myEPWM2_TZ_ISR(void)
{
TripZoneCNTR1 = (EPWM_getTimeBaseCounterValue(TTPLPFC_HIGH_FREQ_PWM1_BASE) + 1) * CPU_SYS_CLOCK_PERIOD;
duty_ref = TripZoneCNTR1;
CLA_forceTasks(CLA1_BASE,CLA_TASKFLAG_1);
iL1_avg = iL1_ort;
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP2);
}
Hello,
To make sure I understand correctly, are you trying to:
Your CLA task 1 code definition is in the .cla file correct? Can you share this code as well (as a file rather than text)?
Can you add breakpoints to your EPWM trip zone interrupt, the CLA task 1 (using __mdebugstop()), and the end of task 1 CPU interrupt to see which of them are being hit in the debugger?
Let me know if you need any guidance with using the debugger for this purpose.
Best Regards,
Delaney