您好,现在在调试ads1258,按照手册上的步骤对其进行配置,但是读出来的寄存器数据和写入的不一样,请高手指点一下。
ads1258的初始化配置如下:
void ADS1258_INIT()
{
int i;
int temp;
PINSEL1 &= 0xFFFFF03C; // P0.16、P0.19、P0.20、P0.21配置为普通GPIO
IO0DIR = IO0DIR| (1 << 16); //cs输出
IO0DIR = IO0DIR& (~(1 << 19)); //drdy输入
IO0DIR = IO0DIR| (3 << 20); // satrt and rest输出
IO0SET =IO0SET | (1 << 16); //cs=1
Delayms(30);
IO0CLR =IO0CLR | (1 << 16); //cs=0
Delayms(30);
//stop the converter
IO0CLR =IO0CLR | (1 << 20); //start=0,stop converter
Delayms(10);
//reset the converter
IO0SET =IO0SET | (1 << 21); // rest=1
Delayms(10);
IO0CLR = IO0CLR | (1 << 21); // rest=0
Delayms(30);
IO0SET =IO0SET | (1 << 21); // rest=1 abort reset signal
Delayms(10);
//configure the registers
SPI_SendData(0x70); // write register command
SPI_SendData(0x42); // configer register0 SPI_SendData(0x23); // configer register 1
SPI_SendData(0x00); // configer register 2
SPI_SendData(0x00); // configer register 3
SPI_SendData(0xFF); // configer register 4 SPI_SendData(0xFF); // configer register 5 SPI_SendData(0x00); // configer register 6
SPI_SendData(0xff); // configer register 7
SPI_SendData(0x00); // configer register 8
SPI_SendData(0x8b); // reg 9
Delayms(10);
//test the registers
SPI_SendData(0x50); // write register command
for(i=0;i<10;i++)
{
temp=SPI_SendData(0x00);
send_char(temp);// configer register0 Auto-ScanMode;时钟外接;
}
}
读出来寄存器的值为 00 00 A1 00 00 00 00 00 00 00,而不是上面所写入的寄存器数值~
Decapton Wang:
1. 看不懂C代码,可否把你的C代码转化成类似于手册图1那样的时序图?这样方便分析。
2. 看上去你的~CS和~DRDY是同时跳低的,不过从手册图57看,~DRDY先跳,然后才是~CS跳,会不会是这方面的问题?
newta:
回复 Decapton Wang:
问题已解决,谢谢~
yanhui huang:
回复 newta:
怎么解决的啊,能不能讲一下