Arduino / AVR:中断串行/ I2C通信是否安全

时间:2015-04-21 10:11:45

标签: arduino avr i2c atmel

我想在Atmega328上进行一些中断驱动的信号处理,它可能没有足够的SRAM(2K)来存储整个运行的数据。这意味着我必须在仍然收集数据的同时将部分缓冲区写入外部存储器。

我的问题是,在仍然触发中断的同时进行串行写入或I2C通信(例如SD卡)是否安全。我认为串行通信本身是中断驱动的,所以这可能成为一个问题。这是真的? I2C怎么样?如果两者都可能导致问题,那么在收集数据的同时刷新缓冲区的建议方法是什么(如果有的话)?

1 个答案:

答案 0 :(得分:1)

这是一种常见的情况,实际上取决于您对每项任务的准确处理时间以及您对设备通信的时序限制有多紧张。

认为你应该回顾/考虑:

  • 您必须能够比外部RAM更快地将数据写入外部RAM - >你收集数据的速度有多快?
  • 看到你在中断处理程序中花费的时间尽可能少
  • 关注中断饥饿。如果ISR B更频繁地触发AND并且具有更高优先级,则优先级可以导致不执行ISR A.如果可能,请调整执行间隔。
  • 检查必须按顺序或短时间发送哪些串行数据以满足时序要求。您可能需要在短时间内暂停/延迟其他处理。