好的,这个问题可能有点宽,因为我真的不知道从哪里开始这一切。我会尽力说清楚。
我有一个带有已知显示驱动程序的手机显示器,因为我有数据表。该显示器将通过SPI与微控制器(msp430g类型)通信。
发送到显示器的一些命令不会产生响应,但有些命令,响应可能是几个“字节”(9位数据)。
我首先想到的是我应该有一个微控制器输入命令的fifo缓冲区,以便微控制器可以在命令移出时执行其他操作。但是我觉得在有响应的情况下会将命令与可能的响应“断开”。我不知道如何处理。
我的第二个想法是将所有命令作为执行(write-> [read * x])函数的函数来执行所讨论的命令。但这感觉就好像我会站在微处理器等待SPI接口的方式。
在这种情况下,做什么是“正常”的事情?我想有很多答案,但我确信已经编写了很多代码,这些代码使用了一些接口与某些设备进行通信,但在界面处于“工作”状态时执行其他操作。
如果对我要做的事情有任何含糊之处,请告诉我,我会尽力澄清。
答案 0 :(得分:0)
SPI是主从,因此对于来自从机的Rx(我假设显示器将是从机),您需要传输一个虚拟字节的数据(因此主机正在摇摆时钟线)你应该在你的Rx(In / Rx / MISO)引脚上输入Rx数据。
如果有一个硬件SPI接口可以自动处理这个,那么你可以把它全部留在后台工作&它应该在完成后得到一个中断。
我不能代表MSP,但是在Coldfire上,SPI硬件可以加载一些东西到Tx / Rx并且会去做,在你的例子中你会在Tx的末尾附加一个虚拟字节当“就绪”中断发生时,数据和应答字节将位于RX缓冲器的最后一个时隙中。
答案 1 :(得分:0)
为了有效地安排读写,我建议使用中断。 MSP430在发送字节和接收到字节时都有一个中断。当中断触发时,加载要发送的下一个字节(对于tx),或者存储接收到的字节(对于rx)。发送命令后,如果需要,可以设置获取响应的标志。收到回复后,您可以为主循环设置一个标志来处理响应。