主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
在程序中、我想使用 ePWM_INTERRUPT 6作为 CLA 任务1的触发源、但 CLA 任务未执行。 MIRUN.INT1始终保持为1。 我不明白为什么。 以下是我的代码:
空 CLA_configClaMemory (空)
{
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;
//数据空间
MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
EDIS;
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 = M_INT1;//| M_INT2);
//
//为所有的任务结束中断配置向量
// 8个任务
//
PieVectTable.CLA1_1_INT =&cla1Isr1;
PieVectTable.CLA1_2_INT =&cla1Isr2;
PieVectTable.CLA1_3_INT =&cla1Isr3;
PieVectTable.CLA1_4_INT =&cla1Isr4;
PieVectTable.CLA1_5_INT =&cla1Isr5;
PieVectTable.CLA1_6_INT =&cla1Isr6;
PieVectTable.CLA1_7_INT =&cla1Isr7;
PieVectTable.CLA1_8_INT =&cla1Isr8;
//
//将 adca.1设置为任务7的触发器
//
DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task1 = 41;
// DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task2 = 43;
//
//在组和子组级别启用 CLA 中断
//
PieCtrlRegs.PIEIER11.bit.INTx1=1;
IER |=(M_INT11);
EDIS;
}
ePWM.CLA
_interrupt void Cla1Task1 (void)
{
isk6++;
EPwm2Regs.AQSFRC.bit.OTSFA = 1;
EPwm2Regs.AQSFRC.bit.ACTSFA=3;
EPwm6Regs.ETCLR.bit.INT = 1;
GpioDataRegs.GPATOGGLE.bit.GPIO12=1;
}