用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]);
}
关于S3C2440和CC2420的SPI通信(转载的问题博客)
最新推荐文章于 2022-02-25 19:38:17 发布