[ZLG-ARM] 谁能帮我解决一下SPI问题

[复制链接]
2972|6
 楼主| lyzjq410 发表于 2007-6-3 14:42 | 显示全部楼层 |阅读模式
spi, pd, ps, se, ui
我用的SSP的SPI发送数据后,读取不到发送的数据怎么回事?读写都用这个函数对吗?&nbsp;<br />void&nbsp;SSP_SendData(uint8&nbsp;data)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SSPDR&nbsp;=&nbsp;data;&nbsp;<br />&nbsp;&nbsp;&nbsp;while((SSPSR&nbsp;&&nbsp;0x01)&nbsp;==&nbsp;0);&nbsp;//等待TFE置位,即发送寄存器为空&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />如果我连续发送四个字节的数,回读最后两个字节的数,读出来都是零,怎么回事?<br />谁给我讲讲呢,多谢指点
zlgarm 发表于 2007-6-3 21:13 | 显示全部楼层

Re

您的问题有两种可能:<br />1、外部器件确实没有发送数据<br />2、TFE位是发送FIFO为空,发送FIFO与发送移位寄存器是不同的。FIFO为空并不见得数据已经发送完毕!您可以继续查询一下Busy位!等待Busy为0时,再读取数据。
jshmlly 发表于 2007-6-3 21:19 | 显示全部楼层

re

void&nbsp;SSP_SendData(uint8&nbsp;data)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SSPDR&nbsp;=&nbsp;data;&nbsp;<br />&nbsp;&nbsp;&nbsp;while((SSPSR&nbsp;&&nbsp;0x01)&nbsp;==&nbsp;0);&nbsp;//等待TFE置位,即发送寄存器为空&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />看看void&nbsp;是不是定义错了,应该是unsigned&nbsp;char<br />
 楼主| lyzjq410 发表于 2007-6-4 09:35 | 显示全部楼层

SSP作为SPI使用作为主机时,SSEL能用做片选吗

SPI作为主机时,SSEL不能用做片选,那么SSP的SPI作主机时,SSEL能用做片选吗?我现在怀疑是这里的问题,好心人请帮我解答一下?而且SSP的SPI的SSPDR接收数据时,SSPDR的状态寄存器SSPSR中除了TFE位,其他为都不用吗?比如RFF、RNE、TNf位,我是初学者,觉得它跟SPI好像有差别,自己弄不懂,请高手指点,谢谢了
 楼主| lyzjq410 发表于 2007-6-4 09:43 | 显示全部楼层

那我用SSP的SPI如果要回读16位的数的话该怎么做呢

我如果设置发送8位数据,接收时连续回读两次接收8位数据,然后再判断BSY是否为空,会不会还出现问题呢,还是直接回读十六位的好些呢,我的意思是设置每次发送16位的数
luogs 发表于 2007-6-4 11:41 | 显示全部楼层

同情楼上

我用lpc2294,外借了一个只支持16位收发模式的芯片,此款arm只支持8位spi模式,后来放弃了这种方案,郁闷啊,有谁试通了共享一下经验啊,先谢谢了!
 楼主| lyzjq410 发表于 2007-6-4 15:10 | 显示全部楼层

忘记说明了 我用的是2131板

希望有实际用过的高人指点我,免得我误入歧途,谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部