【发布时间】: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