读写SYS0寄存器代码如下
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0x43); // 写 SYS0 寄存器
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0x00); // 写 1 个寄存器
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0x05); // 向 SYS0 寄存器写入 0x05, (PGA=1,160SPS)
for(i = 0; i < 10; i++) // 连续读寄存器10次
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x23);
Delayus(100);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00);
Delayus(100);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xFF);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
USART3_SendByte(SPI_I2S_ReceiveData(SPI1));
}
以上代码实现:复位后,写SYS0寄存器,连续读SYS0寄存器10次,结果如下:
00 9C 9C 9C 9C 9C 9C 9C 9C 9C
或00 90 90 90 90 90 91 91 91 91
或00 82 82 82 82 82 82 82 82 82
或00 96 96 96 96 96 96 96 96 96
或00 88 88 88 88 88 88 88 88 88
假如复位后,不写SYS0寄存器,连续读SYS0寄存器10次,结果如下:
9C 00 00 00 00 00 00 00 00 00
或82 00 00 00 00 00 00 00 00 00
或81 00 00 00 00 00 00 00 00 00
或80 00 00 00 00 00 00 00 00 00
读写SYS0寄存器不正常,请问如何正确写SYS0寄存器?哪些方面的配置要注意的?
注:其他寄存器,包括MUX0、MUX1、IDAC0等等,采用以上类似方式读写,全部正确,只有SYS0寄存器不正常,此寄存器无法配置,直接导致PGA及转换速率无法设置。
另外根据数据手册34页建议,SYS0的操作在MUX0前面的。 这页还有一句话:When cycling through channels, care must be taken when configuring the ADS1246/7/8 to ensure that settling occurs within one cycle. 这个within one cycle的cycle是什么意思? 谢谢!
MichaelSheep:
手册35页有nCS操作说明
在一条command操作完前nCS需要一直拉低,但你的程序里读写寄存器的命令是分开写的,而且读命令期间有delayus的延时函数,可能造成了nCS变高而提前结束此条command。