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.

[参考译文] TMS320F28335:SCI FIFO 传输中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/586769/tms320f28335-sci-fifo-transmission-interrupt

器件型号:TMS320F28335

我指的是与  Example_2833xSCI_FFDLB_int.c 的 SCIA-FIFO_TX 中断服务例程相对应的以下代码

_interrupt void sciaTxFifoIsr (void)

   uint16 i;
   for (i=0;i< 8;i++)
   {
    SciaRegs.SCITXBUF=sdataA[i];    //发送数据
 }

   for (i=0;i< 8;i++)                //递增发送下一个周期的数据
   {
    sdataA[i]=(sdataA[i]+1)和0x00FF;
 }

 SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; //清除 SCI 中断标志
 PieCtrlRegs.PIEACX.All|=0x100;     //发出 PIE ACK

 当一个中断发生时、8个字节被载入 SCI TX FIFO。 但是、它们是在何时发送的? 在 ISR 循环执行之后、还是在加载时执行? 发送后、每个字是否都从 FIFO 中清除?

为了使中断 再次发生(在标志被清除后)、TXFFST <= TXFFIL。 在 FIFO 中加载8个字后、 TXFFST=8。 但是 、在清除标志或清除标志之前、TXFFST 何时更改为7? 假设在清除中断标志时发送一个字、即 TXFFST=7。 因此、中断再次发生。 我想确保只有在发送全部8个字后、即 TXFFST=0时、才会发生中断。 如何实现这一点?

    

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

    每当您将数据放入 SCI TX 缓冲区时、无论中断标志的状态是什么、都将发送该信息。

    如果您想确保用所有8个16位值填充 TX 缓冲区、理论上可以在中断开始时禁用 SCI 的 TX、并在结束时重新启用

    此外、当数据从 FIFO 移动到发送移位寄存器时、TXFFSTS 会递减



    您能否更清楚地说明最后一段? 当 FIFO 少于8个字并且 FIFO 为0时、您是否想要中断?

    希望这对您有所帮助!

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

    非常感谢您的快速回复。

    我指的是"SPRUFZ5A - TMS320x2833x、2823x 串行通信接口"-第35页和表2.9中给出的以下说明
    --------------------------------------------------------------------
    TXFFIL4-0发送 FIFO 中断级别位。 发送 FIFO 将在 FIFO 时产生中断
    状态位(TXFFST4-0)和 FIFO 深度位(TXFFIL4-0)匹配(小于或等于)。
    默认值应为0x00000。
    --------------------------------------------------------------------
    我将上述语句理解为:当 TXFFST<= TXFFIL 时、会发生中断(当然、中断标志被清除)。 我是对的吗?

    让我们考虑 TXFFIL=01000 (8)时的情况。 由于 TXFIFO 缓冲区中没有字、TXFFST 最初将为0。 一个中断发生(0<8)并且中断处理例程(ISR)被执行。 在 ISR 中、使用"for"循环将8个字加载到 TXFIFO 缓冲区中。

    数据递增、中断标志被清除、中断被确认。

    我有兴趣了解中断何时会再次发生。 这是我的理解。 如果我错了、请纠正我的问题。

    当中断标志被清除时、TXFFST 的值是多少? 它取决于传输的字节。 假设当时只发送一个字、=> TXFFST=7。 或者如果发送了两个字、TXFFST=6。 在任一种情况下、中断将在 ISR 执行结束后立即发生。 但是、我想确保在中断再次发生之前发送所有8个字、即我希望中断仅在 TXFFST=0时发生。

    在 ePWM 中断中、我们可以选择中断发生的时刻、例如、当计数器等于周期或零时、或两者同时发生时。

    同样、是否有办法选择 SCITX 或 SCIRX 中断发生的时刻?

    谢谢、此致、
    Pavan。