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.

[参考译文] TMS320F2.8069万:启用SCI时,eQEP中断无法正常工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/576129/tms320f28069-eqep-interrupts-not-functioning-correctly-when-sci-is-enabled

部件号:TMS320F2.8069万

我已经实施了电机控制代码,使用eQEP在每次注册脉冲时中断。  这对我的应用非常重要,因为为了成功地换向电机,不会错过任何中断。  我添加了SCI以便向微控制器发送命令。  电机按预期旋转,但当我通过SCI向驱动器发送命令时,我开始错过脉冲,最终导致电机停止旋转。  我认为这是因为从SCI缓冲区读取数据导致我错过eQEP中断,但我不确定如何测试这一点。  以下是我对eQEP和SCI的注册设置。  非常感谢您提供任何帮助!

SciaRegs.SCIFFTX.All=0xE040;
SciaRegs.SCIFFRX.all=0x2044;
SciaRegs.SCIFFCT.All=0x0;

SciaRegs.SCICCR.ALL =0x0007;  
SciaRegs.SCICTL1.all =0x0003;  

SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;

SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =0x0002;
SciaRegs.SCICTL1.all =0x0023;  

EQep1Regs.QUPRD=1800万;  
EQep1Regs.QEINT.Bit.PCO = 1;  
EQep1Regs.QEINT.bit.PCM = 1;  
EQep1Regs.QEPCTL.bit.FREE_SOFT = 2;
EQep1Regs.QEPCTL.bit.PCRM=1;  
EQep1Regs.QEPCTL.bit.UTE=0;  
EQep1Regs.QEPCTL.bit.QCLM=0;  
EQep1Regs.QPOSMAX=0x0.08万;  
EQep1Regs.QPOSCMP=0x0万;  
EQep1Regs.QEPCTL.bit.QPEN=1;  
EQep1Regs.QCAPCTL.bit.UPPS=1;  
EQep1Regs.QCAPCTL.bit.CCPS=2;  
EQep1Regs.QCAPCTL.bit.CEN=1;  
EQep1Regs.QPOSCTL.bit.PCE = 1;  

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

    您好,James:

    您似乎同时使用SCI和QEP的ISR。  请注意,默认情况下,CPU不启用中断嵌套。  这意味着QEP中断可能必须等到SCI中断代码完成后才能开始。

    假设这是根本原因,您可以通过几种方法来解决此问题:
    1)减少SCI中断的大小。  这将会有所帮助,但可能还不够。
    [即只将缓冲区读入中断中的变量;解析并处理中断之外的数据]
    2)如果您的SCI中断需要足够长,则启用中断嵌套。  请参阅:
    http://processors.wiki.ti.com/index.php/Interrupt_Nesting_on_C28x
    3)使SCI接收/发送软件摆脱中断。  而是检查main结尾处'while (时)'循环中的SCI事件标志(标志轮询)。  如果这样做,您将只能有一个中断(QEP),因此可以尽快派送您的换码。  这是最低抖动解决方案。

    希望这能有所帮助!


    谢谢!
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你们的注意——我找到了罪魁祸首!

    我禁用了SCI中断,发现SCI的传输时间比我在CPU计时器上设置的循环速率要长,导致该中断抢占eQEP中断。 我认为上面列出的某种形式的嵌套中断是正确的操作。 感谢您提出这些选项!