This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

lmp90098无法使用SPI接口读取数据

Other Parts Discussed in Thread: LMP90098

我按照DATASHEET中的时序对LMP90098进行性读取,但是读取回来的数据全部是0xff,用示波器测量SDO脚,是高电平。我用的是atmega128主控IC,SPI接口是IC内部自动产生时序,用(1/128)MHZ的时序频率,这个接口上还带有其他IC,那些IC工作正常。LMP90098采用内部振荡器,留有外部振荡器接入方式,我估计是程序时序有问题:

lmp90098写操作如下:

void Wtlmp90098(unsigned char regAdd,unsigned char*val,unsigned char ct)//寄存器地址、数据、数据量

{

unsigned char ha;

unsigned cahr ch=0;

ha=(regAdd&0xf0)>>4;

if((ct-1)<0x04) ch=(ct-1);  else ch=3;

ch<<=5;//设置数据尺寸

ch|=(regAdd&0x0f)//设置数据低地址

adc_on()//拉低csb信号

SPI_WR(0X10);//高地址写入命令

SPI_WR(ha);//写入高地址

SPI_WR(ch);//写入低地址

for(int i=0;i<ct;i++)

SPI_WR(val[i]);//写入数据

adc_off();//拉高csb信号

}

LMP90098读操作如下:

void Wtlmp90098(unsigned char regAdd,unsigned char*val,unsigned char ct)//寄存器地址、数据、数据量

{

unsigned char ha;

unsigned cahr ch=0;

ha=(regAdd&0xf0)>>4;

if((ct-1)<0x04) ch=(ct-1);  else ch=3;

ch<<=5;

ch|=(regAdd&0x0f);

ch|=0x80;//设置读信号

adc_on()//拉低csb信号

SPI_WR(0X10);//高地址写入命令

SPI_WR(ha);//写入高地址

SPI_WR(ch);//写入低地址

for(int i=0;i<ct;ct++) val[i]=SPI_WR(0);

adc_off();//拉高csb信号

}