器件型号: TDA4VH-Q1
尊敬的专家:
我们目前将 J784S4 EVM 与 SDK 11.2 配合使用
我们在 c7x 内核上使用 FreeRTOS 和 5 个任务。 我们的应用对时间要求严格、基于中断。
我们注意到 c7x 中断延迟约为 3us 至 5us。 该延迟是从触发发生的时刻到上下文切换到等待中断的任务之间测量的。
每个 c7x 中断都相关(GPIO、DMA 等)。
MSMC 配置为 8MB SRAM、L1D 为 16KB SRAM + 32KB 高速缓存(满足我们的应用需求)。
85%的延迟来自 Hwi_dispatchAlways 函数。 它是一个将 c7x 寄存器复制到堆栈中的 asm 函数。
似乎延迟来自于将 c7x 寄存器复制到堆栈的时间。 性能受到高速缓存的影响:
- 案例 1 我们中断 c7x 一次:延迟~3 到 5us
- 用例 2 我们中断 c7x 几次:平均延迟~750ns(前一个 5us 延迟除外)
- 案例 3 我们中断 c7x 几次,缓存失效+ asm 代码:延迟是~3 到 5us 每一次
从 Lauterbach 探头看到(自触发中断单元测试):

延迟取决于堆栈使用的内存:
- DDR 中的堆栈:延迟= 4us
- MSMC 中的堆栈:延迟= 3、4us
- EL2 中的栈:延迟= 2、1us
我们的堆栈太大、无法移动到 L1D 或 L2。
我们已经完成了一种将 c7x 寄存器保存到 L1D 而不是堆栈的权变措施(我们实现了“ISR 堆栈“)。 我们每次中断都实现了 700ns 的延迟。 权变措施处理嵌套中断。 但它不稳定、有几个 FreeRTOS 任务、我们认为这来自保存不同任务的上下文。
您能帮助我们减少这种延迟吗? 通过提供您的解决方案或帮助我们改进我们的变通办法。
此致、
Charles