This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/AM5728:EMAC 中断起搏

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587605/rtos-am5728-emac-interrupt-pacing

器件型号: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。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。