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.

[参考译文] TMS320F28069:SCI FIFO 缓冲器管理

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/798794/tms320f28069-sci-fifo-buffer-management

器件型号:TMS320F28069

您好!

我正在处理 SCI F28069 (RS232)、我正在尝试使用 FIFO 硬件缓冲器。 我将 RX 中断设置为8个字节。

中断成功、但只有前4个字节被正确格式化。 接下来的4个字节写入的错误值​​似乎是随机的。 框架似乎是随机接收的,极少按正确的顺序接收。

如果我将中断配置为在接收一个字节后触发、它会起作用、但我会失去 FIFO 的所有关注、并将中断数量乘以8。 如果您可以查看设置并向我解释如果我做得不好如何处理 FIFO、我可能会欺骗您。

非常感谢您的帮助和支持

我在 Ubuntu 16.04 LTS 上使用 CCS 6.1.3.00033与 TI 编译器 V15.12.1.LTS 和 XDS100V3 JTAG。

下面是 SCI 的设置代码以及其中使用的代码。

void scia_fifo_init()

  EALLOW;
  SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;//空闲线协议
  SciaRegs.SCICCR.bit.LOOPBKENA=0    ;//无回路
  SciaRegs.SCICCR.bit.parity            = 1;//奇偶校验:0奇数-1:偶数
  SciaRegs.SCICCR.bit.PARITYENA=1     ;//奇偶校验使能
  SciaRegs.SCICCR.bit.SCICHAR        = 7;// 8个字符位
  SciaRegs.SCICCR.bit.stopbits        = 0;// 0:1停止位1:多路信号分离位去停止
  SciaRegs.SCICTL1.all                         = 0x0003;

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

  SciaRegs.SCICCR.bit.LOOPBKENA=0    ;//启用回路

  SciaRegs.SCIHBAUD = 0x0001;
  SciaRegs.SCILBAUD = 0x0024;

  //BufferSize                                               
  SciaRegs.SCIFFTX.ALL   = 0x0C028;    
  SciaRegs.SCIFFRX.ALL   = 0x0028;

  SciaRegs.SCIFFCT.all  = 0x00;

  SciaRegs.SCICTL1.all    = 0x0023;    //从复位中撤回 SCI


  SciaRegs.SCIFFTX.bit.TXFIFOXRESET   = 1;
  SciaRegs.SCIFFRX.bit.RXFIFORESET   = 1;
  EDIS;

_interrupt void sciaRxFifoIsr (void)

   uint16 i=0;

   SciLoopCount++;

   for (i=0;i<8;i++)
  {
       SCI_rdataA[i]   =   SciaRegs.SCIRXBUF.bit.RXDT;//.all;   //读取数据
  }


   SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;     //清除溢出标志
   SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;     //清除中断标志
   PieCtrlRegs.PIEACK.ALL         |= 0x100;  //发出 PIE ACK


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

    F28069只有4级深 FIFO。

    如果您有任何疑问、请告诉我。 此外、如果您对我提供的支持满意、请单击绿色的"验证答案"按钮。 再次感谢你。

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

    感谢您的回答 Ken。

    它是4个16字深度 FIFO

    因此,正确管理我应该能够接收8个字节,不是吗?

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

    请参阅 F28069技术参考手册:

    www.ti.com/lit/spruh18

    FIFO 为4级深、宽度为8位(即字节)。

    - Ken