打印
[ARM Linux入门与实践]

急,大家帮一把 关于S3C2440和CC2420的SPI通信

[复制链接]
4597|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nightmara|  楼主 | 2009-7-7 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用S3C2440的SPI和CC2420通信,我向寄存器中写数据,再想往出读,检测一下通信好不好用,可是总读不出我写的数据
下面是CC2420寄存器读写程序:
unsigned char CC2420_SetReg( char reg, unsigned short data)
{
char H_byte,L_byte;
H_byte=((data&0xFF00)>>8);
L_byte=(data&0x00FF);
CC2420_CS_ENABLE;
/* Write the address to the SPI */
WRITE_SPI(reg);     
/* Write the data to the spi, stop if there was a SPI error */
WRITE_SPI(H_byte);
WRITE_SPI(L_byte);
CC2420_CS_DISABLE;
return ( 0 ); }

unsigned char CC2420_ReadReg( char reg, char* data, unsigned char length )
{
char pos = 0;
CC2420_CS_ENABLE;
/* Write the address to the SPI */
WRITE_SPI((reg & 0x3F) | 0x40); 
/*读数据*/
WRITE_SPI(0xff);
RX[0]=Read_SPI(); 
WRITE_SPI(0xff);
RX[1]=Read_SPI();
CC2420_CS_DISABLE;
return ( 0 ); 
}
下面是S3C2440的SPI的程序:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "cc2420.h"

void spi_poll_done(void);

char RXdata[],TXdata[],test=0;
extern char RX[4];
/************SPI的初始化程序*************
    GPG2-----nSS0     GPE11-----MISO    
    GPE12----MOSI     GPE13-----SPICLK
    GPG0-----VREG_EN  GPG6------RSTn 
    GPG10-----SFD     GPG7------CCA     
    GPG11----FIFO     GPG5-----FIFO_P  
    GPG1-----CSn
*****************************************/
void Init_SPI(void)
   {
    int t;
     //初始化相关io端口设置
     rGPECON=rGPECON&~(3<<22)&~(3<<24)&~(3<<26)|(2<<26)|(2<<24)|(2<<22);//SPI0 configued 
     rGPGCON=rGPGCON&~(3<<10)&~(3<<14)&~(3<<22)&~(3<<20)&~(3<<0)&~(3<<12)&~(3<<2)|(1<<0)|(1<<12)|(1<<2);
     //nSS0 bit is input,GPG2->nSS0,直接接地

     rGPGUP=(~(1<<1));   //disable GPG pull up function,只使能CSn的上拉
     rGPEUP=0xffff;     //disable GPE pull up function
     
     //初始化SPI设置
     rSPPRE0=0x18;          //PCLK=50M,SPICLK=50/2/(24+1)=1M
     //rCLKCON|=(1<<18);     //使能SPI的时钟模块
     rSPCON0=(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//enable ENSCK,master,CPOL=0,CPHA=0,normal mode
     rSPPIN0=(0<<2)|(1<<1)|(0<<0);                //dis-ENMUL,SBO,release    
     for(t=0;t<10;t++)
     rSPTDAT0=0xff;       //初始化设备
  }
  
/************SPI发送一个字节**************/
void WRITE_SPI(unsigned char data)
   {
   spi_poll_done();
   rSPTDAT0=data;
   spi_poll_done();
   }
/**************轮询SPI状态***************/
void spi_poll_done(void)
   {
    while(!(rSPSTA0&0x01));  //SPSTA0的READY是否置位
    }
    
/**************SPI接收数据***************/
char Read_SPI(void)
   {
    RXdata[0]=rSPRDAT0;
    return(RXdata[0]);
    
   }

弄了将近一个星期了,还是读不出来我写的数据,希望用过SPI和CC2420的朋友给点建议,或者给我S3C2440的SPI的例程也行,感激不尽

相关帖子

沙发
阿南| | 2009-7-7 22:46 | 只看该作者

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

使用特权

评论回复
板凳
nightmara|  楼主 | 2009-7-7 23:53 | 只看该作者

谢谢,明天试一试

使用特权

评论回复
地板
megaf| | 2010-2-21 11:15 | 只看该作者
楼主,现在问题解决了没

使用特权

评论回复
5
mercury2008| | 2012-5-20 17:34 | 只看该作者
楼主的问题解决了吗?我这儿有SPI的例程,最近在研究S3C2440A的SPI,想要的话发个邮件给我,我发给你,mercury2008@126.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

95

帖子

0

粉丝