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.
工具/软件:Code Composer Studio
您好!
我想知道如何从我的ePWM链接中断,以便能够触发我的CLA中断。 我一直在研究controlSUITE中的示例,但似乎没有找到包含ePWM触发任务的CLA示例。 在使用CPU1中的ePWM中断执行任务之前,我希望获得更快的性能。
从我的ePWM1中,我可以使用以下命令来触发中断:
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//触发INT ON AT Zero事件
EPwm1Regs.ETSEL.bit.inten = 1;//启用INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;//在N'N'Nt事件上生成INT
下面是我的CLA配置代码(基本上是从一个示例中复制的):
void CLA_configClaMemory (void)
{
extern UINT32_t Cla1funcsRunStart,Cla1funcsLoadStart,Cla1funcsLoadSize;
EALLOW;
#ifdef _flash
//
//将代码从闪存复制到RAM
//
memcpy(UINT32_t *)&Cla1funcsRunStart,(UINT32_t *)&Cla1funcsLoadStart,
(UINT32_t)&Cla1funcsLoadSize);
#endif //_flash
//
//初始化并等待CLA1ToCPUMsgRAM
//
MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
While (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};
//
//初始化并等待CPUToCLA1MsgRAM
//
MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1 !=1){};
//
//选择LS5RAM作为CLA的编程空间
//首先将CLA配置为主LS5,然后
//将空间设置为程序块
//
MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;
//
//接下来,将LS0RAM和LS1RAM配置为CLA的数据空间
//首先将CLA配置为LS0(1)的主控,然后
//将空格设置为代码块
//
MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;
EDIS;
}
//
// CLA_initCpu1Cla1 -初始化CLA1任务向量和任务结束中断
//
void CLA_initCpu1Cla1 (void)
{
//
//计算所有CLA任务向量
//在1类CLA上,MVECT寄存器接受完整的16位任务地址作为
//与旧的0型CLA上使用的偏移相反
//
EALLOW;
Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1);
Cla1Regs.MVECT2 =(uint16_t)(&Cla1Task2);
Cla1Regs.MVECT3 =(uint16_t)(&Cla1Task3);
Cla1Regs.MVECT4 =(uint16_t)(&Cla1Task4);
Cla1Regs.MVECT5 =(uint16_t)(&Cla1Task5);
Cla1Regs.MVECT6 =(uint16_t)(&Cla1Task6);
Cla1Regs.MVECT7 =(uint16_t)(&Cla1Task7);
Cla1Regs.MVECT8 =(uint16_t)(&Cla1Task8);
//
//启用IACK指令以启动软件中CLA上的任务
//适用于所有8个CLA任务。 此外,全局启用所有8个任务(或a
//任务子集)
// MIER寄存器
//
Cla1Regs.MCTL.Bit.IACKE = 1;
Cla1Regs.MIER.ALL = 0x00FF;
Cla1Regs.MIFRC.ALL =
//
//为所有配置任务结束中断的向量
// 8个任务
//
PieVectorTable.CLA1_INT =&cla1Isr1;
//
//在组和子组级别启用CLA中断
//
PieCtrlRegs.PIEIER11.ALL = 0xFFFF;
IER ||(M_INT11);
}
//
//第1条-第1条ISR 1.
//
__interrupt void cla1Isr1 ()
{
//
//确认任务1的任务结束中断
//
PieCtrlRegs.PIEACG.ALL = M_INT11;
//
//取消注释以停止调试器并在此停止
//
// asm (" ESTOP0");
}
希望你能帮我解决这个问题:)
您好,Tony:
我发现C2000Ware示例非常有用,正如Sal所建议的那样。
以下是一些代码片段,您可能会发现这些代码很有帮助... 我有三个CLA任务,每个任务对应于EPwm6,XINT1和XINT2中断。 EPWM6,XINT1和XINT2的设置在执行以下代码之前的其他位置完成。 CLA很棒! 享受您的学习过程!
EALLOW; // //启用EPWM6 INT以触发CLA Task1执行 // DmaClaSrcSelRegs.CLA1TASKSRCSDEL1.bit.Task1 = CLA_TRICG_EPWM6INT; Cla1Regs.MIER.Bit.INT1 = 1;//通过中断启用CLA任务1 // //启用XINT1 (来自Cpmss6 CTRIPOUTH)以触发CLA任务2执行 // DmaClaSrcSelRegs.CLA1TASKSRCSDEL1.bit.task2 = CLA_TRIG XINT1; Cla1Regs.MIER.Bit.INT2 = 1;//通过中断启用CLA任务2 // //启用XINT2 (来自Cpmss6 CTRIPOUTL)以触发CLA任务3执行 // DmaClaSrcSelRegs.CLA1TASKSRCSDEL1.bit.TASK3 = CLA_TRICG_XINT2; Cla1Regs.MIER.Bit.INT3 = 1;//通过中断启用CLA任务3 EPwm6Regs.ETSEL.bit.inten = 1; //启用Epwm6中断(触发CLA任务1) XintRegs.XINT1CR.bit.enable =1;//启用XINT1中断(触发CLA任务2) XintRegs.XINT2CR.bit.enable =1;//启用XINT2中断(触发CLA任务3) EDIS;