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.

[参考译文] TMS320F28377D:CPU1设置 IPC 标志与 CPU2进入 ISR 之间的延时时间

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/881280/tms320f28377d-time-delay-between-cpu1-sets-ipc-flag-and-cpu2-enters-isr

器件型号:TMS320F28377D

您好!

我在 CPU1中有一个频率为31.2kHz 的 DMA ISR、在该 ISR 内部、CPU1设置 IPC 标志0。 然后、我在 CPU2代码中有另一个 ISR FLAG0-IPC。 我想知道 CPU1设置标志和 CPU2进入 ISR 之间的时间。 我使用 GPIO 通过示波器测量此时间、并得到大约1.3us 的延迟、根据数据表、我认为该延迟太大、我认为它涉及2个时钟周期。  

我以200MHz 时钟运行。 我修改了我的代码、以便在 CPU2中只有一个中断(这个 IPC 标志0中断)、而在(1) bucle 期间没有在 main 中有任何中断、因为首先我认为这个大时间是由于 CPU2造成的、可能是在执行其他具有更高优先级的任务。 但现在 CPU2不执行任何操作、除了该中断。 CPU1也是如此、现在我只有 DMA 中断服务例程来设置 IPC 标志0、而只有看门狗清除 while (1) bucle。

我出了什么问题? 如何测量这一次?

非常感谢

Maite

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

    Maite、

    IPC 具有 IPCCOUNTERH / IPCCOUNTERL 寄存器、用于对 IPC 事件进行时间戳记。 您可以使用此选项来检查延时时间、而不是使用 GPIO。

    此外、我的理解是、我们没有记录 CPU1设置 IPC 标志和 CPU2进入 ISR 之间的时间延迟? 您在哪里获得了2个时钟周期信息? 您能告诉我您在哪里获得了这些信息吗?

    此致、

    曼诺伊

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

    Manoj、您好!

    感谢您的回答、我这次将尝试使用 IPCCOUNTERH/IPCCOUNTERL 进行检查。 正如昨天我在阅读大量文档时所看到的、我认为我在数据表或 TRM 中已经阅读过"两个周期的延迟"、但您的回答是正确的、我在本论坛的一篇文章中阅读了这篇文章: "IPCFLG 和 IPCSTS 位将在写入后以几个周期进行设置" https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/642258?tisearch=e2e-sitesearch&keymatch=28377d%2520ipc%2520flag%2520delay 、但现在我看到这不是我要求的延迟。 很抱歉我的错误。

    顺便说一下、我面临的另一个问题是、CPU2执行的 ISR Flag0以2.1us 为例执行 CPU1 (针对同一代码)花费120ns 的任务、我既不知道原因也不知道如何检查错误的位置。 我会使用 GPIO 和示·波器来检查这一次。 我还比较了两个.asm 文件(来自 CPU1和 CPU2)、并且在 CPU2文件中看不到任何额外的指令、因此我不知道还可以检查什么。

    在 CPU2中、我只具有该中断和 CpuTimer1 中断、但我已检查它们不会同时被调用。

    非常感谢

    此致、

    Maite

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

    Manoj、您好!

    我发现了错误、我不记得将这些函数加载到 CPU2中的 RAM 中、在 CPU1中、它们是从 RAM 执行的、因此时间比较不正确。 现在工作正常。

    谢谢你

    Maite