请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM5728 工具/软件:TI-RTOS
您好!
我无法使 EMAC 中断起搏正常工作。 在 drv/emac/src/v4/emac_cpsw.c 中、我们可以在 EMac_cpdmaOpen 中看到:
#ifdef CPSW3G_USE_INTERRUPT_Pacing
/* 在 包装程序中启用中断起搏逻辑 */
EMAC_cpswWrSetRxIntPerSec (cpsw3gCfg->baseConfig.wrpr_BASE、 0、 EMAC_RX_ISR_PER_SEC);
EMAC_cpswWrSetIntPacingEnable (cpsw3gCfg->baseConfig.wr_BASE、 CSL_ECTL_INT_CONTRAINT_INT_PACE_EN_C0_RX);
EMAC_cpswWrSetIntPrescaler (cpsw3gCfg->baseConfig.wrpr_BASE、0x370);
#endif
已定义 CPSW3G_USE_INTERRUPT_起 搏、并且正在调用此代码。 经过调查、我发现了几个潜在问题:
- EMAC_cpswWrSetRxIntPerSec 实际上会 将 EMAC_RX_ISR_PER_SEC 值直接传递到起搏寄存器、该寄存器的单位为"ISR /毫秒"(而非秒)、最大值为63。
-我的理解是 EMAC 接口时钟为125MHz,因此 int 预分频器值应为500 (0x1F4),而不是0x370。
我还为 Tx 中断起搏 EMAC_cpswWrSetTxIntPerSec 编写了一个等效函数、并通过以下方式额外启用了 Tx 中断起搏:
EMAC_cpswWrSetIntPacingEnable (cpsw3gCfg->baseConfig.wr_BASE、 CSL_ECTL_INT_CONTRAINT_INT_PACE_EN_C0_TX);
但是、即使已经纠正了假定的问题并添加了值为每毫秒8个中断的 TX 中断起搏、我也可以从执行图中看到(TX)中断起搏不起作用:
两个蓝色 dmtimer 中断之间的周期为125us、我希望在此期间内看到一个 EMAC TX 中断。 相反、我可以清楚地看到三个 EMAC TX 中断、每个发送的数据包一个(在此测试中、我每秒发送24000个数据包)。
我现在无法轻松地测试 Rx 中断起搏、但从 CPU 负载来看、我感觉这也不起作用...
谢谢、Kieran。
