我正在尝试使用 SPI 通信读取 ADC( ADS8320 ) 值。我正在为 ARM 和 SM470R1B1 控制器使用 IAR 嵌入式工作台。在数据表中,它说前 6 位是虚拟读取,接下来的 16 位是 actval 数据。我正在尝试读取 24 位并忽略前 6 位和后 2 位。当我尝试使用以下代码时,我得到了错误的值。
unsigned int readADC8320(void)
{
value = AD8320_16(0xFFFFFF); // read registe
return value;
}
unsigned int AD8320_16(unsigned int value)
{
unsigned int data;
AD8320_CS_Status(0);
SW_Delay(DELAY_10US);
while(GIODOUTA&X2);
data = spi2(value >> 16); //read high 8 bits
data = (data << 6)| spi2(value >> 8); //read next 8 bits but 6+8 =14
data = (data << 8)| spi2(value >> 2); //add last two bits only
SW_Delay(DELAY_10US);
AD8320_CS_Status(1);
return data;
}
unsigned char spi2(unsigned char data)
{
// Write byte to SPI2DAT1 register
SPI2DAT1 = data;
while(!(SPI2CTRL3 & 0x01)){} // Wait for RxFlag to get set
return (SPI2BUF & 0x000000FF); // Read SPIBUF
}
谁能建议我在哪里做错了。我的轮班操作很差。