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/TMS320F280045:TMS320F280045 ADC ISR 问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/804784/ccs-tms320f280045-tms320f280045-adc-isr-issue

器件型号:TMS320F280045

工具/软件:Code Composer Studio

您好!

我在项目中使用 TMS320F280045、但遇到了 ADC ISR 中的一个奇怪问题。 如果我在退出 ADC ISR 之前使用代码- 1、ADC ISR 将在一段时间内不再运行。  当我使用代码-2时,它可以避免此问题并继续运行,但我无法理解原因是什么。

  • 代码- 1.

   AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
   PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
   asm ("NOP");
   EINT;

  • 代码- 2.

   AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
   AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//需要向寄存器写入两次以避免 ADC ISR 丢失
   PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
   asm ("NOP");
   EINT;

在上面的情况下、ADCINTFLG = 0x0001、ADCINTOVF = 0x0001;即使我作为代码- 3写入来清除溢出标志、它仍然失败。

  • 代码- 3.

   AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
   AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1;
   PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
   asm ("NOP");
   EINT;

谢谢

陈兰

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

    尊敬的 Alan:

    ADC 的触发速度以及 ISR 需要多长时间才能运行?  触发速度和 ISR 服务时间是否一致或可变?

    我想现在发生的情况是、第一个软件清除在尝试设置 ADCINTFLG 的新硬件事件的同时发生。  结果是 HW 胜出之后 ADCINTFLG 仍然置1。  ISR 结束会清除 PIE 标志、但其他中断无法到达 PIE、因为 ADCINTFLG 已置1。

    请注意、ADCINTOVF 标志不会阻止 PIE 的其他事件、它只是让您知道发生了溢出。  

    如果您的中断可以溢出、您也可以

    • 设置 ADCINTSEL1N2[INT1CONT]位、即使 ADCINTFLG 置位、也允许事件传播到 PIE
    • 执行上面的双清零操作
    • 清除 ADCINTFLG,然后检查 OVF 标志。  如果 OVF 被置位、则再次清除 ADCINTFLG 并清除 OVF 标志
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    感谢您的快速响应!

    在我的系统中、ADC ISR 在40KHz 的周期内由 PWM 触发、ISR 代码在一个周期内花费大约50%~ 70%的时间。 因此、似乎不会发生溢出、但无法理解为什么设置溢出标志。 是否有其他原因导致它发生?

    此致

    陈兰

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

    ISR 是否可能需要比(1/ePWM 触发频率)更长的时间(由于 ISR 代码中的分支或循环)? ISR 是否可能因进入而显著延迟(可能是由另一个 ISR 或主循环中的一条长 RPT 指令)? 如果设置了 OVF 标志、则在某个时候会出现新的触发器、同时前一个 ADCINT 标志仍会置1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alan:

    有没有幸运地调查此问题?  您是否能够确定中断溢出的原因?

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

    您好 Devin、

    很抱歉、由于我目前正在处理其他项目、因此我们的回答较晚、因此没有进一步探讨此问题。

    您的建议为我提供了一个良好的指南、 在我查看代码后、可能存在两种可能性:

    ADC ISR 中的某些代码在20ms 周期内需要更多时间、可能会导致下一个 ADC ISR 溢出。

    2.操作系统的定时器请求 ISR 和上下文切换将延迟要触发的 ADC ISR

    当我获得一些结果时、我会向您提供反馈、感谢您的大力支持!

    祝你一切顺利、

    陈兰

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

    尊敬的 Alan:

    听起来不错。  我现在要关闭这个线程。  当您有机会进一步调试时、如果遇到问题、请使用"提出相关问题"按钮继续讨论。