据我了解,FIFO(在硬件环境中)是一个缓冲区,将根据先进先出原则进行管理。您按顺序将一些位放入其中,然后您可以在达到所需阈值时逐块读取它们。但我对STM32的串行音频接口的FIFO管理感到困惑:
根据数据表,串行音频接口 (SAI) 最多支持 8 个字的 FIFO。(8x32bits) SAI 的数据寄存器 (SAI_xDR) 为 1 word (32bits)。文档解释了
如果 FIFO 未满,则对该寄存器的写入会加载 FIFO。
如果 FIFO 不为空,则从该寄存器读取会清空 FIFO。
如何解读它?
我的猜测是:如果我对该寄存器进行写访问,它将寄存器内容(32 位块)作为第一个字加载到 FIFO 中,然后在第二次写访问时,它将第二个字加载到 FIFO 中,依此类推。然后,当我进行读取访问时,它会返回队列中的第一个单词,然后是第二个单词,依此类推。这是正确的吗?
如果是这样,当我向寄存器写入少于 32 位时会发生什么?即我写了一个 16 位块。然后我又写了一个16位。两个位块是共享一个字还是转移到单独的字?如果我读一个单词,我会得到两个 16 位块还是只得到前 16 位?我不明白 FIFO 如何知道我填充到数据寄存器中的位序列的大小。还是每次写访问总是占用整个 32 位?