目前有個TI-M4讀ADS1247的問題,在資料轉換完成,讀回來的24bit(MSB-Mid-Byte-LSB)前面的MSB-Mid-Byte二個資料完全一樣,
不管電位差怎麼改變,Dout回傳的值(MSB-Mid-Byte二個資料完全一樣),請問可能哪裡有錯呢???? 以下是我的流程~
我的Code一開始先配置register
Step1
Single_data(); // START PIN (HIGH—>LOW)
SPI2_Buffer_Tx[0] = 0x40; //write (register 0)
SPI2_Buffer_Tx[1] = 0x03; // nuber – 1 (4)
SPI2_Buffer_Tx[2] = 0x0B; //MUX0
SPI2_Buffer_Tx[3] = 0x00; //VBIAS
SPI2_Buffer_Tx[4] = 0x00; //MUX1
SPI2_Buffer_Tx[5] = 0x09;//0x06; //SYS0 320 SPS
SPI2_Send_Data(6);
while(SSIBusy(SSI3_BASE))
{
}
Step2
SPI2_Buffer_Tx[0] = 0x13; //改成單次 0x13(Read Data Once)
SPI2_Send_Data(1);
Step3
SysCtlDelay(20000);
SPI2_Send_Data(3); // NO Operation 3 bytes
SPI2_RxIdx = 0;
while(SSIBusy(SSI3_BASE))
{
}
Dout會回傳3 個 Byte (24bit) 結果前2個Byte是一樣的..謝謝
附件 綠色線是—–SCLK
黃色是——–DOUT
Janet Sun:
建议可以把DIN, DRDY的信号连同DOUT一起观察,贴一下波形。
为什么要加SysCtlDelay(20000);?
SPI2_Buffer_Tx[5] = 0x09;输出数据率为2K, 在此条件下,数据手册34页Single-Cycle Settling部分有一些具体的要求,SPI数据SCLK周期不得超过520ns,和一个字节的开始之间的时间 和随后的字节的开头必须不超过4.2μs。此外,当执行多个独立的写命令前四个寄存器,等待至少64个时钟周期开始之前另一个写命令。
现在怀疑是你的delay时间过长引起的,不能超过4.2us。建议修改SysCtlDelay(20000)函数。