ZHCSPR9 December 2023 AFE782H1 , AFE882H1
PRODUCTION DATA
MODEM_STATUS、FIFO_STATUS 和 FIFO_H2U_RD 寄存器中存在发送和接收 FIFO 缓冲器的状态位,其中包括满标志、空标志和级别标志。缓冲器级别标志用于触发 HART 通信的 IRQ;另请参阅节 6.3.5.8。FIFO_H2U_RD 寄存器中的状态字段表示在执行读取并使数据字节出队之前的 FIFO_H2U 状态。这种实现方式意味着如果设置了 EMPTY_ FLAG,则该帧中接收到的数据字节无效。同样,LEVEL 字段表示在出队之前 FIFO_H2U 级别的 4 个 MSB。LSB 不在报告之列,只有五个内部位用于表示 32 个级别;因此,当实际级别为 0、1 或 32 时,报告的 LEVEL = 0。当 LEVEL = 0 时,需使用 FULL_FLAG 和 EMPTY_FLAG 来区分这三种情况。
FIFO_H2U 和 FIFO_U2H 缓冲器有 32 个级别;但是,用于生成 IRQ 事件的级别设置仅使用四个位。对于接收 FIFO_H2U 缓冲器,FIFO 级别阈值比较中的 LSB 始终为 1 (FIFO_CFG.H2U_LEVEL_SET[3:0], 1)。该配置的目的是在 FIFO_H2U 几乎满容时提醒用户,以便及时启用数据出队,并防止由于 FIFO 过载而丢失传入的 HART 数据。因此,FIFO_H2U_LEVEL_FLAG 也是与 FIFO_CFG.H2U_LEVEL_SET 的大于 (>) 比较。例如,如果 FIFO_CFG.H2U_LEVEL_SET = 4’b1000,则当 FIFO_H2U 的级别 > 5’b10001 时,便会设置 FIFO_H2U_LEVEL_FLAG。设置 FIFO_CFG.H2U_LEVEL_SET = 4’b1111(默认值)即可有效禁用该标志。使用 FIFO_H2U_FULL_FLAG 可以检测 FIFO_H2U 满事件。当 FIFO_H2U 已满时,新传入的数据将被阻止进入 FIFO 的队列并被忽略,从而保留现有数据。
同样,对于发送 FIFO_U2H 缓冲器,FIFO 级别阈值比较中的 LSB 始终为 0 (FIFO_CFG.U2H_LEVEL_SET[3:0], 0)。该配置的目的是在 FIFO_U2H 接近清空时提醒用户,以便及时启用数据排队,并防止 FIFO_U2H 过早变空而导致 HART 总线上出现间隙错误。因此,FIFO_U2H_LEVEL_FLAG 也是与 FIFO_CFG.U2H_LEVEL_SET 的小于 (<) 比较。例如,如果 FIFO_CFG.U2H_LEVEL_SET = 4’b1000,则当 FIFO_U2H 的级别 < 5’b10000 时,便会设置 FIFO_U2H_LEVEL_FLAG。设置 FIFO_CFG.U2H_LEVEL_SET = 4’b0000(默认值)即可有效禁用该标志。使用 FIFO_U2H_EMPTY_FLAG 可以检测 FIFO_U2H 空事件。
为了避免缓冲器溢出,请通过观察缓冲器满容或缓冲器阈值事件来监控 FIFO_U2H 的级别。如果 MODEM_STATUS_MASK 寄存器中的 FIFO_U2H_LEVEL_FLAG 位设置为 0,则会在超过阈值时切换 IRQ 引脚。同样,可以根据 MODEM_STATUS 寄存器中的 FIFO_U2H_FULL_FLAG 位触发警报。当 FIFO_U2H 已满时,新传入的数据将被阻止进入 FIFO 的队列并被忽略,从而保留现有数据。