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 时、RTOS 的 SVC 中断(用于任务切换的 portYIELD 触发器)会关闭 IRQ 中断、从而使 PWM 中断无法正确及时响应、导致控制中断延迟较高、这对于逆变器控制是不可接受的。
1.是否可以将 cortex-R5的 SVC 优先级配置为低于 IRQ、以确保低 PWM 中断延迟
或者、能够使用 IRQ 的中断之一来进行任务切换、而不是使用 SVC。
2.在哪里可以找到关于0xe000ed04中断控制寄存器的详细信息?
谢谢!
第一张图片是错误的。 它应该是这张图片
我之前发现过同样的问题、这对于逆变器控制非常重要。
我建议用两种方法来解决这个问题。 1.启用 Fiq 以支持中断嵌套、可由高优先级 Fiq 中断。 2.嵌套 SVC 中断支持,并可通过 IRQ 和 FIQ 中断。
e2e.ti.com/.../am2434-r5f-interrupt-handling-interrupt-nesting
您好!
让我来看看这个问题、给您回过来。
此致、
Shaunak
您好、Expert ~
我曾尝试在不使用 SWI 的情况下切换任务、但测试表明延迟仍然很重要。 同时、我还在没有 LWIP 的 FreeRTOS 演示中测试了 PWM 延迟、测试结果表明延迟小于2us。
我继续搜索原因、现在我推测 PWM 控制延迟过大的原因是否是 CPSW 中的 CPDMA 中断造成的、因为在 Cpsw_dmaTxIsr、Cpsw_dmaRxIsr 和其他地方禁用了全局中断、这可能会导致 PWM 中断延迟、如图1所示。 因此、电机控制环路无法正常运行。
此外、我测试了高延迟的频率、发现在固定的60ms 内发生了 PWM 高延迟、如图2所示。 TCP 球型摄像机中是否有一次修复60ms 的操作?
希望得到您的帮助~
谢谢!
此致、
Yuancheng
尊敬的 Yuancheng:
我们最近发现 CPSW 统计溢出(Misc)中断中存在一个问题、该问题会在 ISR 例程中执行大型代码并阻止中断。 周期性发生取决于数据速率。
您是否可以尝试禁用 CPSW 统计信息并重新运行测试。
请执行以下更改以禁用 CPSW 的统计信息模块。
初始文本文件 : mcu_plus_sdk/source/networking/enet/core/ocl/cpsw_stats.c: src
int32_t CpswStats_open(EnetMod_Handle hMod, Enet_Type enetType, uint32_t instId, const void *cfg, uint32_t cfgSize) { ... /* Enable statistics on all applicable ports */ - portStat.p0StatEnable = true; + portStat.p0StatEnable = false; if (enetType == ENET_CPSW_9G) { - portStat.p1StatEnable = true; - portStat.p2StatEnable = true; - portStat.p3StatEnable = true; - portStat.p4StatEnable = true; - portStat.p5StatEnable = true; - portStat.p6StatEnable = true; - portStat.p7StatEnable = true; - portStat.p8StatEnable = true; + portStat.p1StatEnable = false; + portStat.p2StatEnable = false; + portStat.p3StatEnable = false; + portStat.p4StatEnable = false; + portStat.p5StatEnable = false; + portStat.p6StatEnable = false; + portStat.p7StatEnable = false; + portStat.p8StatEnable = false; } else if (enetType == ENET_CPSW_5G) { - portStat.p1StatEnable = true; - portStat.p2StatEnable = true; - portStat.p3StatEnable = true; - portStat.p4StatEnable = true; + portStat.p1StatEnable = false; + portStat.p2StatEnable = false; + portStat.p3StatEnable = false; + portStat.p4StatEnable = false; } else if (enetType == ENET_CPSW_3G) { - portStat.p1StatEnable = true; - portStat.p2StatEnable = true; + portStat.p1StatEnable = false; + portStat.p2StatEnable = false; } else { - portStat.p1StatEnable = true; + portStat.p1StatEnable = false; } CSL_CPSW_setPortStatsEnableReg(regs, &portStat); /* Clear all statistics counters */ CpswStats_resetHostStats(hStats);
此致、
Pradeep
嗨 Pradeep~
我根据补丁更改了代码、并重新编译了 eth 库、最终测试结果与之前基本相同。
我最新的测试表明、高延迟每60ms 发生一次、我上传不同速率的数据、而当数据速率加倍时、高延迟每30ms 发生一次。
此外、我最新的测试发现、调用 netconn_write 来发送 TCP 时、总是会出现高延迟。 使用 Wireshark 捕获数据包 (如下图所示)、可以发现发送 TCP 数据时会出现高延迟。
因此、Cpsw_dmaTxIsr 中的 EnetOsal_disableAllIntr 有可能影响 PWM 中断的执行? 或其他一些可能的原因?
此外、是否有任何方式可以快速与您沟通、以便快速解决问题~
谢谢!
此致、
Yuancheng
你好,请看看我的答复,谢谢你~
您好!
几个问题可以帮助我更好地理解问题。
问题1。 您能否共享 Rx 和 Tx 任务的以太网数据速率(数据包速率)
问题2: 我们已经在 lwip-if 层中为轮询、Rx、Tx 等运行了一些任务 除此之外、应用将有一些用于发送数据的任务。 您可能也在应用程序中为 PWM 创建了任务。 您能否分享已创建的任务列表及其优先级。
问题3。 当您测量 PWM 中断延迟时、它的具体测量来源是哪里? 是来自 PWM ISR 上下文、还是这将创建另一个任务、您需要在该任务处对其进行测量。
问题4。 您是否在应用程序中或任何 Busy while 循环中创建了任何关键段或互斥体?
系统方框图可以帮助我更好地了解架构、以便找出问题的根本原因、从而增加 PWM 中断延迟
从很高的层面来说、由于关键段中的某种阻塞、这似乎是个问题。
此致、
Shaunak
很高兴见到你~
Tx 情况可从上图大致看出、平均速度为1Mb/s RX 速率约为5B/s、主要是检测信号数据包。
2、我还为输出传输创建了 TX 和 RX 两个任务。 该任务的优先级与该任务中的 Tcp_Server 3842a 的优先级相同。
3.在进入 ePWM 中断时通过读取 ePWM 的计数寄存器获得中断延迟、因为我使用 ePWM 的计数0来触发中断。
4.我在 eth 的 TCP 服务器演示中仅发送了1Mb/s 的数据并启用了 PWM 零中断、并且没有其他关键区域资源和其他互斥量或者 while。
请查看我之前的答案、我怀疑 eth 的 TX 具有关闭 CPU 的整个中断的操作、该操作会导致该问题。
此致、
yauncheng
我认为这个问题的本质是由 ETH 库或接口质量差造成的,而更改 ETH 库可能需要 ETH 团队这样做。
我建议的另一种解决方案是参考 ThreadX 使 CPU 能够支持 Fiq 嵌套、并且高度实时的任务在 Fiq 中执行。