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.

[参考译文] CCS/TMS320F28377S:TMS320F28377S

Guru**** 2482225 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/680402/ccs-tms320f28377s-tms320f28377s

器件型号:TMS320F28377S
主题中讨论的其他器件: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;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请参阅 C2000Ware 中的 CLA 示例作为参考。

    如果 MIRUN 位被置位、则表示 CLA 正在运行。 您的 CLA 代码位于汇编语言或 C 语言中。您的 CLA 可能处于无限循环中、或者您可能忘记了在任务结束时放置 MSTOP 指令。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 CLA 代码在.cla 文件中的 c 语言中、因此无需添加 MSTOP。 我的理解是否正确?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 CLA TSK 始终保持运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的。 您无需手动添加 MSTOP。

    您可能会在 C 代码中有一个无限循环。

    SAL