c - 哪种 MCU(Cortex-M) 适用于时间关键的 GPIO 应用?

标签 c performance assembly gpio cortex-m

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

3 行简短的应用程序: 处理输入引脚 确定输入引脚处理中的模式 根据接收到的模式写入输出引脚

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

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

谢谢! br

最佳答案

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

目前还不清楚识别模式会消耗多少周期,以及中断在执行此操作时有何用处 - 通常,像这样的低延迟接口(interface)函数将是专用硬件的明显目标,但因为您有现有的软件解决方案似乎问题指定错误。

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

恩智浦有一个 application note其中描述了如何衡量正在发生的事情的一些细节。

关于c - 哪种 MCU(Cortex-M) 适用于时间关键的 GPIO 应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863937/

相关文章:

performance - 使用谷歌托管的 jQuery-ui 或自托管自定义下载的 jQuery UI?

java - 如何加速 Java Google App Engine 部署?

assembly - 为什么 pop 在汇编中需要一个参数?

c++ - 函数返回后程序被终止

c - 将字符添加到现有的字符/字符指针数组?

c++ - 调用常量复杂度 O(1) 5 行函数会显着影响性能,为什么?

c - 如何为工具栏中的 GtkToolItem 创建监听器?

assembly - VA(虚拟地址)和 RVA(相对虚拟地址)

c - #includes 在 C 文件中用于处理器特定的实现

c - 矩阵乘积 c,核心转储错误