您好!
我是 Dhiren、目前正在从事16位 ADC ADS8860的工作、该 ADC 在其 UCA2的 SPI 线路上与 MSP430连接。 我使用的是不带忙指示器的3线 CS 模式、其中 ADS8860的 DI 引脚通过4.7K 上拉至 DVDD、CNV 引脚(P5.7)连接至 ADS8860的 CONVST 引脚、CLK 引脚连接至 ADS8860的 SCLK 引脚、 MSP430的 SOMI 引脚连接到 ADS8860的 DOUT 引脚。
我尝试按如下方式读取 ADC 计数(SCLK = 4MHz):
设置 CONV 引脚、并在延迟1毫秒后复位 CONV 引脚(转换时间= 1us)。 CONV 引脚复位后、我 将 UCA2TXBUF 设置为0xff 并将数据发送到 SIMO 引脚、然后等待 UCRXIFG 被置位。 现在该位 UCRXIFG 被置位、但即使在将 AINP 引脚上的电压更改为1 V w.r.t 之后、我也只接收到数据= 0。 我的基准是3.3V
我有以下问题:
1) 1) 根据 MSP430的 SPI 状态机、是否每次都需要写入缓冲器 UCA2TXBUF 来从 RXBUF 读取数据、即使按照 ADS8860 SDI 引脚需要上拉且无法向其发送数据?
2) 2)我已通过4.7K 上拉 SDI 引脚、但未将其直接连接到 DVDD。 它会影响 DOUT 上的输出吗?
2) 2) 现在、在通过 MISO 引脚发送数据并等待 UCRXIFG 置位后、输入= 1V 时、我仍然会得到数据= 0。 还发现我没有根据需要获得 DOUT 波形、因为振幅低于预期。 我正在发送软件和 SCLK (绿色波形)、DOUT (蓝色波形)和 CONV 引脚(黄色波形)的波形。 在此、我想告诉我、我的连接和读取数据的方法是否正确?
连接: MSP430的 SOMI 连接到 ADS8860的 DOUT、MSP430的 CLK 连接到 ADS8860的 SCLK、MSP430的 P5.7连接到 ADS8860的 CONVST 引脚
为了检查、我们没有按照建议使用 ref0063、并将 REF 引脚、AVDD、DVDD 连接到3.3V、ADS8860的 DI 引脚通过4.7K 的上拉电阻连接到3.3V
while 循环中调用用于 SPI 通信的软件:
P5OUT |= 1 << 7;//CONV 引脚被置位并在100us 延迟后复位
_DELAY_CYCLES (240000);//100US 延迟
P5OUT &=~(1 << 7);
UCA2TXBUF = 0xFF;//data = 0xff 通过 MOSI 引脚发送
while (!(UCA2IFG & UCTXIFG));//等待发送 TX 数据
UCA2IFG &=~UCTXIFG;//清除 TXIFG 标志
while (!(UCA2IFG & UCRXIFG));//等待 RX 缓冲区上的数据准备就绪
ADC_READ_VAL_MSB = UCA2RXBUF;//读取 MSB 的 RXBUF
UCA2TXBUF = 0xFF;//数据= 0xff 通过 MOSI 引脚发送
while (!(UCA2IFG & UCTXIFG));//等待发送 TX 数据
UCA2IFG &=~UCTXIFG;
while (!(UCA2IFG & UCRXIFG));//等待 RX 缓冲区上的数据准备就绪
ADC_READ_VAL_lsb = UCA2RXBUF;//读取 LSB 的 RXBUF