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.

[参考译文] TDA4VH-Q1:TDA4VH-Q1 C7x 中断延迟

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1646732/tda4vh-q1-tda4vh-q1-c7x-interrupt-latency

器件型号: 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 探头看到(自触发中断单元测试):

image.png

延迟取决于堆栈使用的内存:

  • DDR 中的堆栈:延迟= 4us
  • MSMC 中的堆栈:延迟= 3、4us
  • EL2 中的栈:延迟= 2、1us

我们的堆栈太大、无法移动到 L1D 或 L2。

我们已经完成了一种将 c7x 寄存器保存到 L1D 而不是堆栈的权变措施(我们实现了“ISR 堆栈“)。 我们每次中断都实现了 700ns 的延迟。 权变措施处理嵌套中断。 但它不稳定、有几个 FreeRTOS 任务、我们认为这来自保存不同任务的上下文。

您能帮助我们减少这种延迟吗? 通过提供您的解决方案或帮助我们改进我们的变通办法。

此致、  

Charles

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

    尊敬的 Charles:

    [引述 userid=“545647“ url=“~/support/processors-group/processors/f/processors-forum/1646732/tda4vh-q1-tda4vh-q1-c7x-interrupt-latency

    权变措施处理嵌套中断。 但它不稳定、有几个 FreeRTOS 任务、我们认为这来自保存不同任务的上下文。

    [/报价]

    请回答以下问题:

    1.多个 FreeRTOS 任务(数据损坏,堆栈溢出,ISR 返回时的 CPU 异常或挂起)的“不稳定“是什么意思?
    您是否尝试过将 ISR 栈放置在 L2 SRAM 而不是 L1D SRAM 中? 问题是否仍然出现?

    您能帮助我们减少这种延迟吗? 通过提供您的解决方案或帮助我们改进解决方法。

    作为基准、您是否可以尝试使用刚刚 .stack 从移动 DDR_C7x_1 到 L2RAM_C7x_1 (在中) linker_mem_map.cmd的库存 SDK 并共享延迟? 这是否与您为 STACK‑IN‑L2 测得的~2.1µs 匹配?

    此致、
    Shabary S Sundar

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

    您好、

    根据我之前与团队的讨论、减少延迟的一些方法是。

    将 ISR 放置在 L2 SRAM 中。

    在保护模式下运行 c7x。 您能否确认系统是在受保护模式下运行还是在不受保护模式下运行。

     在 L1D 中为 ISR 栈分配的大小是多少。

    此致、

    Manojna