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.
您好!
当触发区中断发生时、我想使用 CLA。 跳闸区域逐周期发生。 我在 tripzone 中断 ISR 中使用 CLA_forceTasks。 但 CLA 无法正常工作。 CLA 中的变量不变。
以下代码是在 CPU 和 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;
以下代码是 CLA 配置。
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_taskfloag_1 | cla_taskfloag_2 );
INTERRUPT_register (INT_myCLA01、&cla1Isr1);
INTERRUPT_ENABLE (INT_myCLA01);
}
以下代码是跳闸区中断设置
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;
//
//启用全局中断 INTM
//
EINT;
//
//启用全局实时中断 DBGM
//
ERTM;
EDIS;
}
中断失效 cla1Isr1 (void)
{
//
//确认任务1的任务结束中断
//
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group11);
//
//取消注释以停止调试器并在此处停止
//
// asm (" ESTOP0");
}
在以下代码中、IL1_ort 在 CLA 中计算。 但是、它无法正常工作。
中断失效 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);
}
您好!
为了确保我理解正确、您是否尝试:
您的 CLA 任务1 代码定义在.CLA 文件中正确吗? 您是否也可以共享此代码(作为文件而不是文本)?
您是否可以向 ePWM 跳闸区中断、CLA 任务1 (使用_mdebugstop ())和任务1结束 CPU 中断添加断点以查看它们中哪些在调试器中被命中?
如果您在为此目的使用调试器时需要任何指导、敬请告知。
此致、
德拉尼
您好!
我的问题解决了。 当我清除跳闸区 CBC 标志时、它会起作用。
谢谢。