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.

想请问下SCI中FIFO中断的触发过程?

Other Parts Discussed in Thread: CONTROLSUITE

我看了下sci loopback例程里定义了以下数组

Uint16 sdataA[2]; // Send data for SCI-A
Uint16 rdataA[2]; // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data

然后主函数里给sdata数组写入数据

for(i = 0; i<2; i++)
{
sdataA[i] = i;
}

rdata_pointA = sdataA[0];

然后interrupt void sciaRxFifoIsr(void)就被触发了?

主要有以下疑惑:

1.sdata[]和fifo的关系是什么呢?程序里这两个好像完全没有关联,为什么给sdata写入数据后fifo就能进入中断开始发送数据呢?

2.看了下数据手册fifo的数据手册,好像并没有16个字节存放数据的FIFO寄存器,那么是怎么访问FIFO中的数据的呢?

  • 不好意思,我打错了,是主函数里给sdata数组写入数据后interrupt void sciaTxFifoIsr(void)就被触发了。
  • 请问您现在使用的时哪款芯片以及开发板?
  • 用的是launchpad,28379D的那款。程序是controlsuite里的sci loopback interrupt那个例程。
  • FIFO可以理解为一个先进先出的buffer,收发FIFO主要是为了解决串口收发中断过于频繁而导致CPU的效率不高的问题。如果没有FIFO,则没收发一个数据都要中断处理一次,有了FIFO,可以在连续收发若干个数据(根据FIFO的深度而定)后才产生一次中断去处理数据,大大提高效率。

    C28x的SCI 在设定一个FIFO level之后,如果FIFO接收到的数据等于这个level,就会触发FIFO接收中断。

    具体您可以看一下

    www.ti.com/.../spruhm8i.pdf

    的 19.13.1 SCI FIFO Description
    以及 Figure 19-10. SCI FIFO Interrupt Flags and Enable Logic
  • 我也是存在第一点疑惑,请问你现在明白了吗?方便讲讲啊