STM32 SAI:理解FIFO

STM32 SAI:理解FIFO,stm32,stm32f7,Stm32,Stm32f7,据我所知,FIFO(在硬件环境中)是一个缓冲区,将根据先进先出原则进行管理。您可以按顺序将一些位放入其中,然后可以在达到所需阈值时按块读取它们。但我对STM32串行音频接口的FIFO管理感到困惑: 根据数据表,串行音频接口(SAI)支持多达8个字的FIFO。(8x32位)SAI的数据寄存器(SAI_xDR)为1个字(32位)。文件解释了 如果FIFO未满,写入该寄存器将加载FIFO 如果FIFO不为空,则从该寄存器读取的数据将清空FIFO 如何解读 我的猜测是:如果我对此寄存器进行写入访问,它将

据我所知,FIFO(在硬件环境中)是一个缓冲区,将根据先进先出原则进行管理。您可以按顺序将一些位放入其中,然后可以在达到所需阈值时按块读取它们。但我对STM32串行音频接口的FIFO管理感到困惑:

根据数据表,串行音频接口(SAI)支持多达8个字的FIFO。(8x32位)SAI的数据寄存器(SAI_xDR)为1个字(32位)。文件解释了

如果FIFO未满,写入该寄存器将加载FIFO

如果FIFO不为空,则从该寄存器读取的数据将清空FIFO

如何解读

我的猜测是:如果我对此寄存器进行写入访问,它将寄存器内容(32位块)作为第一个字加载到FIFO中,然后在第二次写入访问时,它将第二个字加载到FIFO中,依此类推。然后,当我进行读取访问时,它返回队列中的第一个字,然后返回第二个字,依此类推。是这样吗

如果是这样,当我将少于32位写入寄存器时会发生什么?也就是说,我写一个16位的块。然后我又写了16位。这两个位块是共享一个字还是转换成单独的字?如果我读一个单词,我会得到两个16位块还是只得到前16位?我不明白FIFO如何知道我填入数据寄存器的位序列的大小。还是每次写访问总是占用整个32位

我的猜测是:如果我对这个寄存器进行了写访问,……这是对的吗

是的,你说得对

据我所知,每个FIFO字包含一个SAI插槽的数据,与数据大小无关。FIFO连接32位移位寄存器,移位计数取决于数据大小。 例如,对于
8