【问题标题】:Sending commands from microcontroller to display via SPI and receiving results从微控制器发送命令以通过 SPI 显示并接收结果
【发布时间】:2013-04-22 20:29:38
【问题描述】:

好的,这个问题可能有点宽泛,因为我真的不知道从哪里开始。我会尽量说清楚。

我有一个带有已知显示驱动程序的手机显示器,我有数据表。此显示器将通过 SPI 与微控制器(msp430g 类型)通信。

发送到显示器的某些命令不会产生响应,但有些会产生响应,响应可能是几个“字节”(9 位数据)。

我首先认为我应该有一个 fifo 缓冲区,微控制器向其提供命令,以便微控制器可以在命令被移出时执行其他操作。但是我觉得在有响应的情况下,命令会与可能的响应“断开”。我不知道如何处理。

我的第二个想法是将所有命令作为函数来执行相关命令所需的 (write->[read*x])。但这感觉就像我会让微机站在那里等待 SPI 接口。

在这种情况下,“正常”的做法是什么?我想有很多答案,但我确信已经编写了很多代码,它们使用某些接口与某些设备进行通信,但在接口“工作”时执行其他操作。

如果对我想要做的事情有任何含糊之处,请告诉我,我会尽力澄清。

【问题讨论】:

  • 答案最终将取决于诸如您将根据显示器的潜在响应采取什么行动、延迟可能是什么以及您对处理器还有哪些其他任务等因素。
  • 我没有将其发布为答案,但总的来说(至少在我的项目中)我考虑采用以下方法。在大多数硬件(如显示器、传感器等)中,数据表描述了您可以期待响应的时间范围。在一天结束时,硬件和 MCU 之间的通信不能保证 TCP 的交付。所以如果你遵循一个策略,在答案到达之前等待指定的时间量,然后读取它(或考虑没有答案/错误),以防它不是到了你应该没事。
  • 您不必阻止主循环等待,只需使用计时器或任何类似的标记,您希望从某个设备得到答案,然后实现简单的状态机,如(IDLE,AWAITING ANSWER , ERROR 等),将由主循环或计时器维护
  • @evilruff 所以基本上只是发送命令(不超过写入两个寄存器),等待发送完成后的设定时间,然后采取行动。
  • 这正是我的意思

标签: c interface embedded microcontroller msp430


【解决方案1】:

SPI 是主从,所以从从机接收(我假设显示器将是从机)您需要 传输 一个虚拟数据字节(所以主机正在摇摆时钟线),您应该在您的 Rx (In/Rx/MISO) 引脚上输入 Rx 数据。

如果有一个硬件 SPI 接口可以自主处理,那么您可以将其全部留在后台工作,并且在完成后应该会得到一个中断。

我不能代表 MSP,但在 Coldfire 上,SPI 硬件可以加载一些东西到 Tx/Rx 并且会去做,在你的例子中,你会在 Tx 的末尾附加一个虚拟字节当“就绪”中断发生时,数据和回复字节将位于 RX 缓冲区的最后一个槽中。

【讨论】:

  • 感谢您抽出宝贵时间回答。我知道 SPI 是如何工作的,我的问题是(至少打算)更多关于如何以有效的方式安排读取和写入。
【解决方案2】:

为了以有效的方式安排读取和写入,我建议使用中断。 MSP430 在发送字节和接收字节时都会产生中断。当中断触发时,加载下一个要发送的字节(用于 tx),或存储接收到的字节(用于 rx)。发送命令后,您可以设置一个标志以获取响应(如果您期望得到响应)。当您收到回复后,您可以为您的主循环设置一个标志来处理回复。

【讨论】:

  • 我已经想到了这一点。问题是,我可能会以与 micro 相同的频率运行 spi。而且中断的 6 个 clk 开销让我觉得不值得。但我仍然不确定。不过,在中断中处理 CS 线会很方便,所以也许吧。
猜你喜欢
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多