【问题标题】:Which MCU(Cortex-M) for time critical GPIO application?哪个 MCU(Cortex-M) 用于时间关键的 GPIO 应用?
【发布时间】:2019-09-15 18:01:27
【问题描述】:

我们有一个在 PIC24H 上运行的应用程序,我们想将它移植到另一个 MCU,最好是 ARM Cortex。应用程序对时间非常关键,这意味着我们需要极其确定的代码行为。简而言之,有通过特殊硬件获得的脉冲到 GPIO 引脚,数据立即被分析。数据处理并不复杂(我们不需要强大的 cpu/mcu 来完成它)。在分析数据后,GPIO 输出引脚被写入它们的值。

应用程序只需 3 行: 处理输入引脚 确定输入引脚处理中的模式 基于接收到的模式写入输出引脚

PIC24H 工作在 40MHz,我们可以在 25ns 内切换引脚,我们将不胜感激至少 2 倍的速度以供将来升级。因此,可以运行确定性代码并以至少 80MHz(12.5ns)的频率切换引脚的 MCU 就可以了。我们不需要以恒定的快速速率切换引脚,我们需要一个可以在 25ns 内切换的单片机。我们不能在切换时浪费循环,如果一个循环关闭,我们就会失去同步。一切都必须在一个周期精度(或两个但恒定的两个周期)内完成,因此代码应该是 100% 确定性的。

如果我遗漏了什么,或者我们需要的内容是否可以在 Cortex-M 上使用其他一些方法来完成,请告诉我。请记住,如果一个周期丢失(由于缓存或类似原因),我们会失去信号同步,应用程序将无法正常工作或根本无法正常工作。

谢谢! Br

【问题讨论】:

  • 3 短行中的应用程序:1.) 处理输入引脚 2.) 确定输入引脚处理中的模式 3.) 基于接收到的模式写入输出引脚
  • 除非您当前使用的硬件平台已经过时,否则为什么要更改?或者您的应用程序要求的其他部分是否需要更改硬件?请记住,创建新硬件(尤其是定制硬件)既耗时又昂贵。
  • 除了系统时钟之外还有两个瓶颈:中断延迟和 GPIO 切换速度。我有点怀疑这两个加起来太小以至于在您当前的应用程序中可以忽略不计?如果是这样,您当前的延迟是多少以及您是如何指定它的。如果这是您“嗯”的地方,请忘记整个规范。
  • 您需要 ARM 吗? FPGA?
  • 嗯,我是 dsPIC 的 RTFM,你有“端口输出上升时间”,典型值为 5ns,最大 10ns。 “INTx 引脚高电平或低电平时间(输入)”最少 20ns。您的规范没有加起来,您当前的应用程序确实在 25ns 内切换引脚。在考虑移植之前,直接在当前应用程序中获取时序规范。好吧,投资示波器……

标签: c performance assembly gpio cortex-m


【解决方案1】:

根据blog post,Cortex-M 的中断延迟范围为 12 到 16 个周期(假设您不使用 FPU 寄存器),具有最佳情况的内存。 M0 和 M0+ 比 M3/M4/M7 慢。最重要的是,您需要添加 GPIO 访问时间(并注意内核和外设之间的不同时钟频率。Cortex-M7 将支持比 M3/M4 更高的时钟速度。

目前还不清楚识别模式消耗了多少周期,以及中断在这样做时如何有用 - 通常,像这样的低延迟接口函数将是专用硬件的明显目标,但既然你有一个现有的软件解决方案,问题似乎是错误指定的。

如果您避免访问任何可能使总线停止的“慢速”外围设备,中断延迟应该是确定性的 - 任何特定设备都应该有涵盖这一点的文档。

NXP 有一个application note,它描述了如何衡量正在发生的事情的一些细节。

【讨论】:

  • Sean:我们能够在工作频率为 168Mhz 的 STM32F407 上在 6ns 内切换引脚。所以我们已经涵盖了切换速度,现在只是为了处理确定性或抖动,如果你愿意的话。在某些情况下,我们必须与信号保持同步(同步),而在某些情况下我们不需要。至少我们现在可以使用 F4 并编写一些测试软件来看看它的行为。
  • 应该可能写到输入延迟不需要以纳秒为单位,它可以以微秒为单位。我们有时间处理信号,只有引脚输出应该是无抖动的。
猜你喜欢
  • 2018-12-02
  • 2019-11-13
  • 2016-06-19
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2022-12-18
相关资源
最近更新 更多