过两天要弄个AD7685的芯片采集数据,这两天芯片没到,就想通过2440的SPI接口进行一些数据发送,权当练手。从网上弄了一篇**来改了一改,可是不知道为什么数据出不来。
我现在SPI的数据时这样的:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
int datax,rxdat;
void init_spi(void)
{
int t;
//初始化相关io端口设置
rGPECON = rGPECON&~(3<<22)&~(3<<24)&~(3<<26)
|(2<<26)|(2<<24)|(2<<22); //GPE11-SPIMISO GPE12-SPIMOSI GPE13-SPICLK
rGPGCON = rGPGCON&~(3<<4)|(3<<4);
//nSS0 bit is input,GPG2-nSS0,直接接地
rGPGUP &= ~(1<<2); //enable GPG pull up ,只使能CSn的上拉
rGPEUP = 0xffff; //disable GPE pull up
//初始化SPI设置
rSPPRE0 = 0x18; //PCLK=50M,SPICLK=50/2/(24+1)=1M
rCLKCON|= (1<<18); //使能SPI的时钟模块
Uart_Printf("rCLKCON=%x\n",rCLKCON);
rSPCON0 = (0<<6)|(0<<5)|(1<<4)|(1<<3)
|(0<<2)|(0<<1)|(0<<0);
//polling mode ,enable ENSCK即enable sclk,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接收数据***************/
U8 read_spi()
{
rSPRDAT0 = 5;
while(!(rSPSTA0&0x01==0x01));
rxdat = rSPRDAT0;
return rxdat;
}
/************SPI的初始化程序*************
GPG2-----nSS0 GPE11-----MISO
GPE12----MOSI GPE13-----SPICLK
*****************************************/
void spi_7685(void)
{
U8 spi_byte;
init_spi();
Uart_Printf("spi initlized\n");
while(1)
{
spi_byte = read_spi();
Uart_Printf("spi_byte=%d\n",spi_byte);
Delay(1000);
}
}
可是出来的数字最后全是255;
1rCLKCON=fffff0
spi initlized
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
spi_byte=255
兄弟们,为什么呢 |