我是一名学生,现在正在用AFE4490来做毕业设计。自己画了板子,写了SPI的程序来配置寄存器,但是一直没有配置成功,因为写进寄存器数据后,读出来一直是0,然读允许位我已经置1了。调了好久了,也不知道是硬件有问题还是软件有错,硬件我是仿照demo板上的画的,控制器我用的是FPGA,在内部建了个nios ii的内核,用来配置AFE4490。我贴出我的程序,大神们能不能帮我看看有什么问题么。。。。。。或者可不可以把配置程序发我一下。。。。。。毕业设计做的真心蛋疼啊,,,,,好人一生平安!!!!谢谢了
nios ii内核的工作频率是100m的
//spi WRITE a byte.
void SPI_WRITE_BYTE(int data)
{
int i;
for(i=0;i<8;i++){
if(data&0x80)SIMO->DATA=1;
else SIMO->DATA=0;
usleep(10); //set up time SCLK->DATA=1;
data<<=1;
usleep(10); //hold time
SCLK->DATA=0;
}
}
//SPI read a byte
char SPI_READ_BYTE()
{
int i;
char data;
data=0;
for(i=0;i<8;i++){
data<<=1;
SCLK->DATA=1;
usleep(10);
data |=SOMI->DATA;
// printf("the SOMI is %d \n",SOMI->DATA);
SCLK->DATA=0;
usleep(10);
}
SIMO->DATA=0;
return(data);
}
//addr is a byte,but value is a 24-bit data
void SPI_WRITE_REG(int addr,int value)
{
int value1,value2;
STE->DATA=0;
usleep(1);
SPI_WRITE_BYTE(addr);
value1=value>>16;
SPI_WRITE_BYTE(value1);
value2=value>>8;
SPI_WRITE_BYTE(value2);
SPI_WRITE_BYTE(value);
usleep(1);
STE->DATA=1;
}
//READ THE REGISTER
int SPI_READ_REG(int addr)
{
int value=0;
STE->DATA=0;
usleep(1);
SPI_WRITE_BYTE(addr);
value |=SPI_READ_BYTE();
value<<=8;
value |=SPI_READ_BYTE();
value<<=8;
value |=SPI_READ_BYTE();
usleep(1);
STE->DATA=1;
return(value);
}
yu fan1:
我邮箱是cat.fan@qq.com
大神们帮下忙吧~~~
yu fan1:
问题解决了。。。。。程序没有问题,而是我看datasheet的时候理解错了一个地方:
我开始以为只要把read_bit一次性置为1,以后就可以读寄存器了。。。。但是datasheet的要求是每读一次寄存器之前都要把read_bit置为1,然后再读。。。。。
好吧。。。大家见笑了。。。。
jinsong zhu:
回复 yu fan1:
请问你是不是参考血氧模块评估板进行电路设计的啊?如果是的话有些问题想请教一下
fan wu2:
回复 yu fan1:
你好!我现在也在调这个芯片,寄存器配置按的是你贴的参数,不过芯片读不出数据,一直是0,不知道是时序问题还是程序问题,spi测试波形是有的