【问题标题】:Microcontroller communication tasks in background后台微控制器通信任务
【发布时间】:2015-12-23 18:07:27
【问题描述】:

我正在使用 ARM Cortex M4,我想问一下是否可以从通信任务中卸载主程序并让它们在后台运行。

例如我在 ARM MCU 上使用这个外围设备:

  • ADC
  • I2C
  • UART
  • SPI

当 adc_start(ADC);调用,ADC在后台开始转换,所以我不需要等到ADC完成转换,我可以进入下一个指令,稍后读取ADC结果。

我想问一下是否可以对通信外围设备做同样的事情。 I2C 和 SPI 可以很快,但是由于这种 MCU 类型可以达到 50Mhz 甚至更高,如果我需要等到 I2C 完成以 400kHz 或 20Mhz 或更差的 UART 传输 SPI 时,这会浪费 MCU 的速度。此外,如果我执行一些任务并且我不想中断它们,我需要能够从外围设备的任何中断中卸载 MCU,并让它们接收数据包、缓冲它们以及何时需要读取它们。

这样的事情可能吗?

【问题讨论】:

  • 中断是避免浪费处理器时间等待事件的关键——尤其是当您有许多硬件事件时。不要在main 中编写硬件事件的细节。让中断处理它并标记主,或进行回调,当任务有与主流程相关的结论时,例如当 ADC 转换有结果时,或者当串行输入缓冲了完整的消息时,或者缓冲的串行输出已完成传输。但是这个问题太宽泛了,不容易回答。

标签: communication microcontroller


【解决方案1】:

如果我正确理解了这个问题,那么您正在寻找基于自动中断的快速通信外围设备(例如 I2C 和 SPI)处理。据我所知,是的!至少在德州仪器基于 TIVA 的 ARM CORTEX M4 系列 MCU 上是可以实现的。当您在处理计算密集型算法并且没有让 CPU 陷入等待 SPI 完成其任务时,这是一个相当不错的小功能。 为了获得有关 CORTEX M4 外设编程的良好参考,我建议将这本书放在手边: http://www.amazon.com/TI-ARM-Peripherals-Programming-Interfacing-ebook/dp/B00L9DRAI2

本书第 6 章中的表 6-7 详细介绍了 TM4C123G MCU(TIVA 启动板随附)上的中断向量表。中断 50 和 53 分别是 SSI/SPI 和 I2C 外设的分配。一旦你揭露了正确的中断,过程应该是相当直接的。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2015-02-10
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多