请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:ADS7953EVM-PDK 嘿,
我尝试从nRF5.2832万通过SPI与ADS7953通信。 我正在Auto2模式下对其进行编程,并使用下面的代码对其进行编程。
首先,我尝试将Auto2模式的范围编程为5个通道,因此我发送了0x9140 (ADS7953_PROG_Auto2 | Auto2_CHANRNG_SEL_5)。
然后我发送模式控制寄存器数据为0x3C40 (ADS7953_AUTO_Mode2 | Auto2_PROG_ENABLE | Auto2_CHAN_COUNT_RESET | Auto2_5VRANGE_SEL | Auto2_NORM_OP_SEL | Auto2_CHAN_Addy_SEL)。
我开始看到数据流,但看到了所有通道(如屏幕截图所示)。 无论我尝试的信道范围值是多少,我总是能看到全部16个信道。 这也让我怀疑我看到的数据是否正确。 我还注意到,即使对于5V范围,我也会看到0x0FFF与4V。
我在这里做错了什么?
感谢您的帮助,
Vandita
nrf_drv_spi_config_t spi_config = nrf_DRV_spi_default_config; spi_config.ss_pin = spi_ss_PIN; spi_config.miso_pin = spi_miso_pin; spi_config.mosi_pin = spi_mosi_PIN; spi_config.sck_pin = spi_pin = spi_sck_pin; spi_config.frequency = NRF_DRV_SPI_FREQ_125K;;//减慢速度! SPI_CONFIG.MODE = NRF_DRV_SPI_MODE_1;//尝试不同模式 APP_ERROR_CHECK (nrf_drv_SPI_INIT (&SPI,&SPI_config,SPI_EVENT_handler)); printf("\r\n开始:\r\n"); //重置Rx缓冲器和传输完成标志 memset(m_rx_buf, 0, m_length); SPI_xfer_done = false; //请求自动模式2的编程访问,并将范围设置为所有通道 uint16_t PRG_WRD = ADS7953_PROG_Auto2 | Auto2_CHANRNG_SPI_5; APP_PRG_PRG_PR_8,PRG_PRG_PR_LENG_PR_PR_PR_8 0); 同时(!SPI_xfer_done) { __WFE(); } //编程自动模式2 memset (m_rx_Buf,0,m_length); SPI_xfer_done = FALSE; PRG_WRD = ADS7953_AUTO_Mode2 | Auto2_PROG_ENABLE | Auto2_CHAN_COUNT_RESET | Auto2_5VRANGE_SEL | Auto2_NORM_OP_Mode2 | Auto2_PROG_SEL_ADdy; app_error_check (nrf_drv_spi_transfer (&SPI,(uint8_t*)&PRG_WRD,m_length,NULL,0); 同时(!SPI_xfer_done) { __WFE(); } //将0x0000写入ADS7953以继续使用预设参数 PRG_WRD = ADS7953_CONT_OP; 而(1){ memset (m_rx_buf,0,m_length); SPI_xfer_done = FALSE; app_error_check (nrf_drv_spi_transfer (&SPI,(uint8_t*)&PRG_WRD,m_length,m_rx_buf,m_length); While (!SPI_xfer_done) { __WFE(); } }
屏幕截图-
2是收到的字节数,然后在下一行中打印数据,首先是MSB。