[ARM Linux入门与实践] 急,大家帮一把 关于S3C2440和CC2420的SPI通信

[复制链接]
 楼主| nightmara 发表于 2009-7-7 20:21 | 显示全部楼层 |阅读模式
用S3C2440的SPI和CC2420通信,我向寄存器中写数据,再想往出读,检测一下通信好不好用,可是总读不出我写的数据<br />下面是CC2420寄存器读写程序:<br />unsigned&nbsp;char&nbsp;CC2420_SetReg(&nbsp;char&nbsp;reg,&nbsp;unsigned&nbsp;short&nbsp;data)<br />{<br />char&nbsp;H_byte,L_byte;<br />H_byte=((data&0xFF00)&gt&gt8);<br />L_byte=(data&0x00FF);<br />CC2420_CS_ENABLE;<br />/*&nbsp;Write&nbsp;the&nbsp;address&nbsp;to&nbsp;the&nbsp;SPI&nbsp;*/<br />WRITE_SPI(reg);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />/*&nbsp;Write&nbsp;the&nbsp;data&nbsp;to&nbsp;the&nbsp;spi,&nbsp;stop&nbsp;if&nbsp;there&nbsp;was&nbsp;a&nbsp;SPI&nbsp;error&nbsp;*/<br />WRITE_SPI(H_byte);<br />WRITE_SPI(L_byte);<br />CC2420_CS_DISABLE;<br />return&nbsp;(&nbsp;0&nbsp;);&nbsp;}<br /><br />unsigned&nbsp;char&nbsp;CC2420_ReadReg(&nbsp;char&nbsp;reg,&nbsp;char*&nbsp;data,&nbsp;unsigned&nbsp;char&nbsp;length&nbsp;)<br />{<br />char&nbsp;pos&nbsp;=&nbsp;0;<br />CC2420_CS_ENABLE;<br />/*&nbsp;Write&nbsp;the&nbsp;address&nbsp;to&nbsp;the&nbsp;SPI&nbsp;*/<br />WRITE_SPI((reg&nbsp;&&nbsp;0x3F)&nbsp;|&nbsp;0x40);&nbsp;<br />/*读数据*/<br />WRITE_SPI(0xff);<br />RX[0]=Read_SPI();&nbsp;<br />WRITE_SPI(0xff);<br />RX[1]=Read_SPI();<br />CC2420_CS_DISABLE;<br />return&nbsp;(&nbsp;0&nbsp;);&nbsp;<br />}<br />下面是S3C2440的SPI的程序:<br />#include&nbsp;&quot;def.h&quot;<br />#include&nbsp;&quot;option.h&quot;<br />#include&nbsp;&quot;2440addr.h&quot;<br />#include&nbsp;&quot;2440lib.h&quot;<br />#include&nbsp;&quot;cc2420.h&quot;<br /><br />void&nbsp;spi_poll_done(void);<br /><br />char&nbsp;RXdata[],TXdata[],test=0;<br />extern&nbsp;char&nbsp;RX[4];<br />/************SPI的初始化程序*************<br />&nbsp;&nbsp;&nbsp;&nbsp;GPG2-----nSS0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPE11-----MISO&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPE12----MOSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPE13-----SPICLK<br />&nbsp;&nbsp;&nbsp;&nbsp;GPG0-----VREG_EN&nbsp;&nbsp;GPG6------RSTn&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPG10-----SFD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPG7------CCA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPG11----FIFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPG5-----FIFO_P&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPG1-----CSn<br />*****************************************/<br />void&nbsp;Init_SPI(void)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化相关io端口设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPECON=rGPECON&~(3&lt&lt22)&~(3&lt&lt24)&~(3&lt&lt26)|(2&lt&lt26)|(2&lt&lt24)|(2&lt&lt22);//SPI0&nbsp;configued&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPGCON=rGPGCON&~(3&lt&lt10)&~(3&lt&lt14)&~(3&lt&lt22)&~(3&lt&lt20)&~(3&lt&lt0)&~(3&lt&lt12)&~(3&lt&lt2)|(1&lt&lt0)|(1&lt&lt12)|(1&lt&lt2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//nSS0&nbsp;bit&nbsp;is&nbsp;input,GPG2-&gtnSS0,直接接地<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPGUP=(~(1&lt&lt1));&nbsp;&nbsp;&nbsp;//disable&nbsp;GPG&nbsp;pull&nbsp;up&nbsp;function,只使能CSn的上拉<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rGPEUP=0xffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//disable&nbsp;GPE&nbsp;pull&nbsp;up&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化SPI设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rSPPRE0=0x18;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PCLK=50M,SPICLK=50/2/(24+1)=1M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//rCLKCON|=(1&lt&lt18);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能SPI的时钟模块<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rSPCON0=(1&lt&lt4)|(1&lt&lt3)|(0&lt&lt2)|(0&lt&lt1)|(0&lt&lt0);//enable&nbsp;ENSCK,master,CPOL=0,CPHA=0,normal&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rSPPIN0=(0&lt&lt2)|(1&lt&lt1)|(0&lt&lt0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dis-ENMUL,SBO,release&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(t=0;t&lt10;t++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rSPTDAT0=0xff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化设备<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />/************SPI发送一个字节**************/<br />void&nbsp;WRITE_SPI(unsigned&nbsp;char&nbsp;data)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;spi_poll_done();<br />&nbsp;&nbsp;&nbsp;rSPTDAT0=data;<br />&nbsp;&nbsp;&nbsp;spi_poll_done();<br />&nbsp;&nbsp;&nbsp;}<br />/**************轮询SPI状态***************/<br />void&nbsp;spi_poll_done(void)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!(rSPSTA0&0x01));&nbsp;&nbsp;//SPSTA0的READY是否置位<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />/**************SPI接收数据***************/<br />char&nbsp;Read_SPI(void)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;RXdata[0]=rSPRDAT0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(RXdata[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br /><br />弄了将近一个星期了,还是读不出来我写的数据,希望用过SPI和CC2420的朋友给点建议,或者给我S3C2440的SPI的例程也行,感激不尽<br /><br />
阿南 发表于 2009-7-7 22:46 | 显示全部楼层

用示波器扫一下波形,对着协议分析一下

  
 楼主| nightmara 发表于 2009-7-7 23:53 | 显示全部楼层

谢谢,明天试一试

  
megaf 发表于 2010-2-21 11:15 | 显示全部楼层
楼主,现在问题解决了没
mercury2008 发表于 2012-5-20 17:34 | 显示全部楼层
楼主的问题解决了吗?我这儿有SPI的例程,最近在研究S3C2440A的SPI,想要的话发个邮件给我,我发给你,mercury2008@126.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

95

帖子

0

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