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:非法 ISR 问题

Guru**** 2460850 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/627322/ccs-tms320f28377s-illegal-isr-problem

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

尊敬的所有人:

 在我添加 CLA 代码后、我的程序转到 ILLEGAL_ISR。

没有 此代码、一切都正常。 但是、如果 我添加此代码、 程序 将停止。 在 main 中的 for (;;)循环之前、

PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
PieCtrlRegs.PIEIER1.bit.INTx5 = 1;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

IER |= M_INT1;
IER |= M_INT3;
IER |= M_INT12;

此外、如果我在 for (;;)中添加此代码、程序会立即停止并使用 ILLEGAL_ISR


EALLOW;
EPwm1Regs.TBPRD = EPWM1_TBPRD;
EPwm2Regs.TBPRD = EPWM1_TBPRD;
EPwm2Regs.TBPHS.bit.TBPHS = EPWM2_TBPHS;
EPwm7Regs.TBPRD = EPWM7_TBPRD;

EPwm1Regs.DBRED.bit.DBRED = EPWM1_DB;
EPwm1Regs.DBFED.bit.DBFED = EPWM1_DB;
EPwm2Regs.DBRED.bit.DBRED = EPWM2_DB;
EPwm2Regs.DBFED.bit.DBFED = EPWM2_DB;
EPwm3Regs.DBRED.bit.DBRED = EPWM3_DB;
EPwm3Regs.DBFED.bit.DBFED = EPWM3_DB;
EDIS;

我尝试了

RAM 内存分配 、因为有人说它是因为 RAM 内存。

2. 我在 main()的第一条语句上设置断点,然后 运行。  看起来不错、但程序在   for (;)循环的第一条语句中以非法 ISR 停止

我搜索了几个示例:ePWM、GPIO、ADC、计时器、CLA、 因为我使用的是全部。 一些示例(ePWM)在启用全局中断后编辑 PieCtrlRegs、其余示例则不是。 这让我感到困惑、但我认为这不是问题的原因。

此外、如果我删除'Cla1ForceTaskxandWait();'、Clataskes 也不起作用;除了设置"CLA1TASRCSKEL1"之外、我是否必须执行任何设置才能使用 ePWM 触发器运行 CLA 任务? CLA_TRIG_EPWM1INT?

我随函附上 main.c。欢迎您提出任何建议、请访问 advance.e2e.ti.com/.../6825.main.c、谢谢您

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

    这可能是由您建议的内存溢出引起的。 您是否在"Memory Allocation"(内存分配)下看到分配了高达100%的任何内存块。

    请参阅以下链接、以调试非法_ISR 的原因:
    processors.wiki.ti.com/.../Interrupt_FAQ_for_C2000

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

    大家好、Vasudha

    感谢您的建议、我检查了您添加的链接。

    我在 CCS 中看到了"堆栈使用情况"选项卡。 我可以在此 选项卡上检查堆栈溢出吗?

    此外、我可以看到许多 完整的存储器块。  这是问题吗?

    以防万一、这是我 的.cmd 和.map 文件。

    此致、

    极坐标型

      e2e.ti.com/.../project.zip

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

    很抱歉耽误你的时间。 我认为代码段太接近有效内存块的末尾、这可能是问题所在。 尝试增大.cmd 文件中.text 段的大小。

    对于堆栈溢出、我们可以检查堆栈末尾的存储器内容、以查看是否发生了溢出。 或者、也可以放置一个"数据访问计数"断点、用于检查地址_stack_end 处的存储器写入。

    很抱歉、我不知道"Stack Usage"选项卡的用法。

    与外设相关的完整内存块不是问题。 但需要检查与程序的存储器布局相关的分配。 例如、 文本、堆栈等的内存分配

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

    Vasudha、您好!

    再次感谢您的建议。 我再次编辑了.cmd 文件、CLA 中断现在工作。

    IER |= M_INT11;

    IER |= M_INT3;正在运行,没有任何错误和警告以及非法 ISR()。

    但是、EPWM1和'/'操作与全局变量(例如 、'tsamp = 1/fsw')。 两个都是全局变量) 、for 循环不起作用。

    我检查了 EPWM1寄存 器、我确定我为 EPWM1执行了所有操作、但我不知道它为什么不起作用。

    此外、在 for LOOP 语句中、'tsamp = 1/2'之类的简单操作是有效的、但当我使用全局变量进行计算时、它不起作用。

    您对此问题有什么建议吗?

    *我附上了完整的项目 filee2e.ti.com/.../wpt_5F00_cla.zip

    此致、

    极坐标型