|
发表于 2011-9-27 13:21:54
|
显示全部楼层
回复【3楼】machao
spi的模式0:
在时钟下降沿时移出数据,是指把自己内部移位寄存器中一端的1位数据送到数据线上(mosi);
在时钟上升沿时锁存数据,是指把数据线上(miso)数据锁入到自己内部移位寄存器中另一端中;
与164配合:spi口下降沿时,将自己内部移位寄存器中一端的一位数据送到数据线上(mosi口,也就是164的a1/a1口);在clk低电平阶段,这个mosi和a1/a1连线为稳定的低电平(输出0)或高电平(输出1),当clk上升沿时,这个电平(数据)移入到164内部移位寄存器中。而这个例子中,miso没有连接,内部上拉有效的话,因此,当clk上升沿时在164把mosi线上数据移入自己内部的同时,spi也把“1”锁入到自己内部移位寄存器中另一端。
如果你问,使用spi的模式2可以吗?在时钟上升沿时移出数据,并同时打入164?
我说:不可以。
你又要问了,为什么?很多代码是使用模式2的,......
-----------------------------------------------------------------------
我刚刚开始学avr,正看到spi这里,说一下自己的看法,手头连164器件都没有,请马老师和大家看看对不对?
我的看法和马老师一样(假设我理解的是一样的),164的时序规定了上升沿时从MOSI线上读入OA,OA-OB...OH,那么意思就是说,只在上升沿数据稳定时才能读取,而模式1,2是下降沿触发采样(锁存),上升沿是将数据送到数据线上(做好准备),所以模式1,2就不可以了。
模式3是用在164上面的。因为遵循上升沿读入164的原则。但模式0和3的主要区别是,0上升沿之前,认为数据已在线上;而模式3要在sck下降沿的时候先将数据送到线上准备好,然后等待上升沿读入164.
下面的* 是有疑问的
* 如果使用马老师第二版教材445页上面的,利用写spi的SPDR寄存器启动自动发送过程的话(不使能spi中断,但利用轮询中断标志的方法,等待发送1字节完毕),那么模式3和0是没有区别的,因为都是SPDR准备。
* 如果是通过软件模拟spi的sck,以及自定义任意端口作为MOSI的话,那么使用模式3时,要先clear sck,再将数据送到MOSI上,然后再rise sck;模式0是假定已经准备好,直接rise sck。这时模式0和模式3的区别就出现了。 |
|