FIFO可以通过写入FIFO配置寄存器FIFO_CFG0和FIFO_CRG1(寄存器0x30和寄存器0x31)来配置。FIFO模式、FIFO条目的数量和通道ID启用都可以配置,以优化各种应用中的性能。
FIFO模式
ADXL382具有以下FIFO模式:
FIFO已禁用
正常(也称为最旧保存或第一个N)
流(也称为Last N)
触发器
当FIFO被禁用时(寄存器0x30,比特[5:4](FIFO_MODE)=0b00),没有数据样本被存储,FIFO读取返回0。
当处于正常模式(寄存器0x30,位[5:4](FIFO_mode)=0b01)时,FIFO会累积数据,直到数据满,然后停止,这由FIFO_full(寄存器0x11,位1)=1表示。只有当从FIFO缓冲区中读取样本并腾出空间时,才会收集额外的数据。
当处于流模式(寄存器0x30,比特[5:4](FIFO_mode)=0b10)时,无论FIFO是否已满,新数据都会连续写入FIFO。
当FIFO已满时,最旧的数据集(例如,X、Y、Z和T数据样本)将被丢弃,为新数据集腾出空间。这样,最新的数据总是保存在FIFO缓冲区中。流模式对于减轻主机处理器的负担很有用。在FIFO中收集数据时,处理器可以处理其他任务。当FIFO填充到一定数量的样本时(由寄存器0x30,位0和寄存器0x31,位[7:0]中的FIFO_samples指定),它会触发FIFO水印中断(如果启用此中断)。此时,主处理器可以读取整个FIFO的内容,然后在FIFO再次填充时返回到其他任务。
当处于触发模式(寄存器0x30,位[5:4](FIFO_mode)=0b11)时,FIFO保存触发事件前后的样本。此触发事件可以是活动事件或外部中断。在这种模式下,无论FIFO是否已满,都会连续收集新的数据样本(类似于流模式)。一旦触发事件发生(活动事件或外部中断),FIFO将继续收集一定数量的数据样本。它在触发事件后收集的数据样本数量由FIFO_samples位(寄存器0x30,位0和寄存器0x31,位[7:0])中的值设置。
要启用外部中断触发的FIFO模式,请将FIFO_EXT_TRIG位(寄存器0x30,位3)设置为1。一旦该位设置为1,发送到FSYNC引脚的外部中断就会触发FIFO捕获。
FIFO中断
FIFO有几个中断,可以映射到INT0和INT1引脚。中断映射是通过使用寄存器0x2B(INT0_MAP0)到寄存器0x2E(INT1_MAP1)来控制的。
FIFO水印
当FIFO中存储的样本数量等于或超过FIFO_samples位(寄存器0x30,位0和寄存器0x31,位[7:0])指定的样本数量时,设置FIFO_WTERMARK位(寄存器0x%11,位3)。为了触发中断,ADXL382必须处于FIFO正常模式或FIFO流模式,并且FIFO_WTERMARK位必须映射到INT0或INT1。
当从FIFO读取足够的样本时,FIFO_WTERMARK位会自动清除,使得剩余的样本数量低于用户在FIFO_samples位中设置的值。
FIFO就绪
FIFO READY位(寄存器0x11,位4)断言FIFO输出缓冲区中是否至少有一个有效样本可用。当FIFO中没有有效数据时,此位被清除。
超出
当FIFO发生溢出或溢出时,设置FIFO_OVERRUN位(寄存器0x11,位2),表示新数据已替换未读数据,这可能表示FIFO已满但尚未清空,或者SPI事务缓慢导致的时钟错误。FIFO_OVERRUN位仅适用于FIFO正常模式和触发模式。
当读取FIFO的内容时,FIFO_OVERRUN位会自动清除。同样,当FIFO被禁用时,FIFO_OVERRUN位被清除。
整理自规格书内容,仅供参考