cc1100使用FIFO问题

[复制链接]
4778|10
 楼主| zjjp 发表于 2008-6-20 22:59 | 显示全部楼层 |阅读模式
CC1100里面有一共64字节fifo,如果要发送100字节到fifo,那么是不是先发64字节,等有溢出信号时清除fifo,再发送余下的36字节啊?&nbsp;或是可以一直发,不用管溢出信号呢?<br /><br />另外CRC字节是指fifo中64字节的还是指一次发送中所有数据的?
chunyang 发表于 2008-6-21 12:42 | 显示全部楼层

可以分两次输入,也可以连续输入

但连续输入的速度不能令FIFO溢出
 楼主| zjjp 发表于 2008-6-21 15:41 | 显示全部楼层

回chunyang

两次输入和连续输入的速度不一样的吗?为什么啊?<br />datasheet里面好像没有介绍多次输入和连续输入,只有突发位访问,能不能详细讲解一下cc1100的FIFO操作啊?谢谢了!!!!
chunyang 发表于 2008-6-21 18:12 | 显示全部楼层

你要理解什么是FIFO,跟什么芯片反而无关

&nbsp;&nbsp;&nbsp;&nbsp;FIFO是一种特殊的缓存,你可以理解为一个“水池”,有了这个水池,你可以不用管出水速度的要求从而在很大范围内根据实际需要或条件调节进水速度,但有个原则,不能让水溢出,也不能让水流干,至于水池的水位则完全不用关心。<br />&nbsp;&nbsp;&nbsp;&nbsp;你理解了FIFO的特性,自然就清楚答案了。
平常人 发表于 2008-6-21 19:01 | 显示全部楼层

FIFO = 管子

假定有一个与乒乓球直径相当的管子,允许一个乒乓球通过;这个管子长度可以容下64个乒乓球;如果想通过这个管子向另一端送100个乒乓球,但是出口的速度慢于入口,入口就会溢出,你需要等管子中空出地方后才能继续向里面放乒乓球。
 楼主| zjjp 发表于 2008-6-21 23:25 | 显示全部楼层

关于CC1100的FIFO

谢谢楼上两位作答,对FIFO的工作原理也大致清楚,下面有段关于CC1100&nbsp;FIFO的写操作,看得不明白,程序是把数据先填入FIFO,再开始发送,如果发送超过100个bytes,那么当FIFO达到64&nbsp;bytes被填满时,剩下的36&nbsp;bytes是不是被抛弃了?<br />我的方法是,要发送100&nbsp;bytes,首先设置GDO引脚中断信号(当FIFO溢出时有警告),接着MCU向FIFO发送数据,当检测到溢出信号时,将CC1100设置为发射模式,当发送完FIFO的数据时在清理FIFO,然后再把剩下36&nbsp;bytes发送出去,请问我的方法正确吗?<br /><br /><font color=#0040FF>void&nbsp;halRfSendPacket(INT8U&nbsp;*txBuffer,&nbsp;INT8U&nbsp;size)&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;size+2);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;ID_Opponent);<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteReg(CCxxx0_TXFIFO,&nbsp;ID_Oneself);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiWriteBurstReg(CCxxx0_TXFIFO,&nbsp;txBuffer,&nbsp;size);&nbsp;&nbsp;&nbsp;&nbsp;//写入要发送的数据<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiStrobe(CCxxx0_STX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入发送模式发送数据<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;for&nbsp;GDO0&nbsp;to&nbsp;be&nbsp;set&nbsp;-&nbsp;&gt&nbsp;sync&nbsp;transmitted<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;for&nbsp;GDO0&nbsp;to&nbsp;be&nbsp;set&nbsp;-&nbsp;&gt&nbsp;sync&nbsp;transmitted&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(GDO0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;halSpiStrobe(CCxxx0_SFTX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清洗发送缓冲区<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /></font><br />
chunyang 发表于 2008-6-21 23:58 | 显示全部楼层

分两次送数据,等第一次FIFO刚刚空时要立刻送入

  
 楼主| zjjp 发表于 2008-6-22 10:11 | 显示全部楼层

回chunyang

你说的&quot;刚刚空&quot;是不是指FIFO数据全部发射完成然后清理FIFO时的刚刚空啊?我上面那条程序好像没对&quot;刚刚空&quot;进行判断,请问这是不是有问题?<br /><br />
chunyang 发表于 2008-6-23 00:02 | 显示全部楼层

那当然可能会出现问题

如果FIFO中的数据流中断,接收侧的数据流自然也会中断,后果就不用多说可吧。
 楼主| zjjp 发表于 2008-6-23 18:46 | 显示全部楼层

请问89S52能控制CC1100吗?要不要加上拉电阻?

  
chunyang 发表于 2008-6-24 21:35 | 显示全部楼层

不需要

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

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