AM389x TRM (SPRUGX7C)介绍了以下有关 EMAC 接收阈值中断的信息:
- 接收阈值中断使用与流控制相同的自由缓冲器计数和阈值逻辑、但中断与流控制是独立启用的。 阈值中断旨在向主机指示特定通道的资源正在运行低电平。
我想在 我的设计中添加接收阈值通知(不带流控制)、该设计目前仅对接收通道实施接收数据包完成中断、以避免 EMAC 耗尽可用的 Rx 缓冲区(导致 HOSTPEND 错误)。 但是、到目前为止、我尝试使用 Rx 阈值功能的尝试未成功。
根据 TRM 中的指令、看起来应该相当简单。 为了按照 我的理解使用、配置 Rx 阈值功能所需的步骤如下:
- 用为接收通道分配的 Rx 缓冲器总数初始化接收通道 n 空闲缓冲器计数寄存器(RXnFREEBUFFER)。
- 通过 RXnFLOWTHRESH 寄存器建立触发阈值。
- 使能 接收中断屏蔽置位寄存器(RXINTMASKSET)中的接收通道中断位、该位已经为接收数据包完成中断完成。
- 通过 CMRXTHRESHINTEN 寄存器启用中断。
设置所有这些之后(包括修改我的代码以针对主机回收的每个缓冲区更新 RxnFREEBUFFER)、我可以看到 RxnFREEBUFFER 按预期更新(EMAC 正在使用缓冲区、主机正在回收缓冲区)。 但是、即使 RXnFLOWTHRESH 缓冲器设置为人为的高阈值、也不会看到 CMRXTHRESHINTSTAT 寄存器指示通道上的 Rx 阈值条件。 是否缺少一些设置步骤?
谢谢!