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.

[参考译文] TMS320F28069M:重 SCI Rx 期间 PIE 组1 (定时器0)中断丢失

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665144/tms320f28069m-loss-of-pie-group1-timer-0-interrupt-during-heavy-sci-rx

器件型号:TMS320F28069M

您好!

我有一个奇怪的问题、我肯定只是代码、但实际上可以使用一些帮助来确定代码。

我已将 Timer0配置为生成10ms 中断。 我在中断中没有执行任何操作过于繁重、在离开中断时、我将清除 Timer0中断标志、并对 PIE 组1执行 PIEACK。

我在 FIFO 模式下设置了 SCIB、并且启用了 RxFIFO 内部。  在 FIFO 例程中、我检查错误状态、将任何数据排队、并在我清除 RxFIFO 溢出、RxFIFO Int 和 PIEACK 至 PIE 组9时进行。

这两个系统在单独的验证项目中都能很好地工作、但当我一起工作时、我会看到一些问题。

我在向 SCIB UART 发送数据时释放了计时器0中断。 如果我发送一小部分(~8字节)、则无需担心 T0。 如果我以全速发送大量数据、我会在中间的某个位置松开 Timer0。

也许我不太熟悉中断功能、但是在寄存器窗口中、当错误发生时、我看到 Timer0 IE、如果位被置位、 我可以看到 PIEER1和 PIEIFR1位6被置位(Timer0)、但与此同时、我可以看到 PIEACK 位1被置位、 而不会被清除。

我的理解是、向 PIEACX.x 写入1应该会将其清除。

有什么建议吗?

谢谢。

太棒了!

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

    请仔细检查在 ISR 开始时(而不是结束时)、您是否有 PIEACK:

    ///----------------------------------------------------------
    中断空 TINT0_ISR (空)// PIE1.7 @ 0x000D4C TINT0 (CPU 定时器0)

    PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//必须确认 PIE 组

    //您的 ISR 就在这里



    ///----------------------------------------------------------
    中断空 SCIRXINTB_ISR (空)// PIE9.3 @ 0x000DC4 SCIRXINTB (SCI-B)

    PieCtrlRegs.PIEACK.all = PIEACK_group9;//必须确认 PIE 组

    //您的 ISR 就在这里



    ///----------------------------------------------------------
    中断空 SCITXINTB_ISR (空)// PIE9.4 @ 0x000DC6 SCITXINTB (SCI-B)

    PieCtrlRegs.PIEACK.all = PIEACK_group9;//必须确认 PIE 组

    //您的 ISR 就在这里



    ///----------------------------------------------------------

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    这就是问题所在。 我在例行程序结束时、而不是开始时、正在破解 PIE。

    感谢您的帮助、例如简单解决棘手问题。

    谢谢。
    太棒了!