后台微控制器通信任务

Microcontroller communication tasks in background

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

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

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

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

这样的事情可能吗?

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

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