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