| 
用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 /> |   
     
  
 |