打印
[AVR单片机]

SPI缓冲处理后,如何确定发送值与哪一个接收值是对应的

[复制链接]
2021|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
daiqh|  楼主 | 2012-10-6 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送和接收都作buffer处理,有一堆数需要发送,而发送的数值当中有一个需要读取其返回的值,但怎么才知道在接收缓冲中其对应的返回值是那个位置呢?就是怎么确定这个接收buffer的读指针。因为SPI硬件加缓冲实现,不能确定这个数是什么时候发。

相关帖子

沙发
mohanwei| | 2012-10-6 15:16 | 只看该作者
可以确定。因为SPI的特点是发送完一字节就肯定接收完一字节。

使用特权

评论回复
板凳
daiqh|  楼主 | 2012-10-6 16:06 | 只看该作者
可以确定。因为SPI的特点是发送完一字节就肯定接收完一字节。
mohanwei 发表于 2012-10-6 15:16

发完一字节是肯定会接收到一个字节,但这个字节(需要读取其返回的值)发送之前也有一堆数据要发送,发送的个数也不确定,发送的数会放进发送缓冲区再由硬件自动发送。虽然返回的值都放到接收缓冲区了,但不知这一个字节是什么时候被写入接收缓冲区,也不能确定保存的位置。

使用特权

评论回复
地板
daiqh|  楼主 | 2012-10-6 16:12 | 只看该作者
可以确定。因为SPI的特点是发送完一字节就肯定接收完一字节。
mohanwei 发表于 2012-10-6 15:16

如果没这个缓冲,每发完一个再进入中断读取其接收到的值,这样是可以做到的。但加了缓冲又应该如何处理,还没想到办法。

使用特权

评论回复
5
mohanwei| | 2012-10-6 21:41 | 只看该作者
如果不是帧结构,是不能这样用的。
例如一些SPI接口的Flash,擦除、写入等操作,必须发送命令后,不停读取状态寄存器,直到查询到“空闲”才允许进行下一步操作……

使用特权

评论回复
6
daiqh|  楼主 | 2012-10-6 22:46 | 只看该作者
如果不是帧结构,是不能这样用的。
例如一些SPI接口的Flash,擦除、写入等操作,必须发送命令后,不停读取状态寄存器,直到查询到“空闲”才允许进行下一步操作…… ...
mohanwei 发表于 2012-10-6 21:41

已经放弃缓冲做法了,只能提速SPI,再发一字节,等待完成,再返回接收了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

95

帖子

2

粉丝