打印
[AVR单片机]

ATMEGA 作为主机的SPI接收数据疑问

[复制链接]
7858|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newmankinds|  楼主 | 2010-12-15 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直用ATMEGA的SPI做主机来发送数据给SPI设备(DAC.....等).现在忽然要来做为主机读SPI设备.

1:SPI设备只能做SLAVE. ATMEGA只好做MASTER.那么读的时候时钟只有MASTER才能产生
2:是否要写个数据(空数据0)到SPDR,以便产生CLK.同时读取到数据.

有用过的大侠确认下...多谢

SPDR=0x00;         
while(!(SPSR & (1<<SPIF)));
Rdata= SPDR;

相关帖子

沙发
chunyang| | 2010-12-15 17:11 | 只看该作者
不用事先写0,具体见器件手册。

使用特权

评论回复
板凳
newmankinds|  楼主 | 2010-12-15 17:15 | 只看该作者
手冊没说相关信息.明示啊.

如果不写.作为主机那来的CLK啊?

使用特权

评论回复
地板
newmankinds|  楼主 | 2010-12-15 17:35 | 只看该作者
AVR的SPI由一个16位的循环移位寄存器构成,当数据从主机方移出时,从机的数据同时也被移入,因此SPI的发送和接收在一个中断服务中完成。在SPI中断服务程序中,先从SPDR中读一个接收的字节存入接收数据缓冲器中,再从发送数据缓冲器取出一个字节写入SPDR中,由ISP发送到从机。数据一旦写入SPDR,ISP硬件开始发送数据。下一次ISP中断时,表示发送完成,并同时收到一个数据。


别的地方看到的.似乎就是发的同时才有接.否则我认为没有CLK.MISO无法采样到

使用特权

评论回复
5
airwill| | 2010-12-15 21:34 | 只看该作者
1:SPI设备只能做SLAVE. ATMEGA只好做MASTER.那么读的时候时钟只有MASTER才能产生
完全正确。

2:是否要写个数据(空数据0)到SPDR,以便产生CLK.同时读取到数据.
要写数据, 但是否写0,要看设备,因为这也是在给设备发送命令。

使用特权

评论回复
6
airwill| | 2010-12-15 21:34 | 只看该作者
1:SPI设备只能做SLAVE. ATMEGA只好做MASTER.那么读的时候时钟只有MASTER才能产生
完全正确。

2:是否要写个数据(空数据0)到SPDR,以便产生CLK.同时读取到数据.
要写数据, 但是否写0,要看设备,因为这也是在给设备发送命令。

使用特权

评论回复
7
newmankinds|  楼主 | 2010-12-16 12:59 | 只看该作者
谢谢啊....看来写数据/命令取决于SPI设备. 但是不写肯定是没的读..

使用特权

评论回复
8
areshan| | 2010-12-16 16:26 | 只看该作者
喜欢用IO口模拟的SPI,主机可以读写,都一样,不过是时序不一样呢!
AVR的SPI接口很好用。SPI就是数据交换,你在给SPI从机发送命令时,从机也同时把数据传给主机,只不过是无用的你们读出罢了,就是一个双向的移位器!

使用特权

评论回复
9
newmankinds|  楼主 | 2010-12-18 14:27 | 只看该作者
看来要读.写才是硬道理..
知道了..PCB来了就可以实验了...

使用特权

评论回复
10
xwj| | 2010-12-18 15:09 | 只看该作者
呵呵,要明白硬件SPI的读写实际上是一起完成的:)
——当然,另一半可以丢弃:lol

使用特权

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

本版积分规则

42

主题

99

帖子

4

粉丝