您好!
我在我的应用中使用 ADS1220。 我使用2对差分输入来读取模拟信号。 我的假设是尽可能优化电流、因此我会尽快断电。 假设还需要测量两个通道、一个通道比另一个通道高、然后在特定时间内将其置于睡眠状态。 我在 数据表中选择了连续模式和全双工模式(图66)。 同时发送 WREG 命令时读取数据的示例)。
我正在使用 CS 引脚(它未永久连接低电平)。 仅限 ADS1220器件。 在 UC 的 SPI 配置下:
#define NRF_DRV_SPI_DEFAULT_CONFIG \ { \ .frequency = NRF_DRV_SPI_FREQ_2M, \ .mode = NRF_DRV_SPI_MODE_1, \ .bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST, \ }
我已为 ADS1220准备了两种配置:
static uint8_t m_tx_buf_CONF_1[] = {(WREG | CONF0 | 0x02), (MUX_P_AIN1_N_AIN0 | GAIN_128 | PGA_ON), (DR_G | NORMAL_MODE | CONTINOUS), (AVDD_REFIN | FIR_50_60 | PSW_OPEN | IDAC_OFF)}; static uint8_t m_tx_buf_CONF_2[] = {(WREG | CONF0 | 0x02), (MUX_P_AIN3_N_AIN2 | GAIN_128 | PGA_ON), (DR_G | NORMAL_MODE | CONTINOUS), (AVDD_REFIN | FIR_50_60 | PSW_OPEN | IDAC_OFF)};
在 I present 伪代码下:
SEND_INIT_CONFIG (m_tx_buf_CONF_2)(CH2) loop: p.1 SEND_START (0x08) p.2 WAIT_FOR_DRDY_IRQ p.3 SEND_CONFIG ((m_tx_buf_CONF_1)(CH1) p.3.1 GET_CONVERSION_RESULT_DUPLEX(CH2) p.4 WAIT_FOR_DRDY_IRQ p.5 SEND_CONFIG ((m_tx_buf_CONF_2)(CH2) p.3.1 GET_CONVERSION_RESULT_DUPLEX(CH1) p.6 SEND_POWERDOWN (0x02) p.7 .... generic timer delay p.8. go to p.1
代码运行良好、但由于未定义的原因、SPI 在一些未定义的通信时间后死。 我的想法是正确的吗? 或者、我应该以不同的方式执行它吗? 这是否是 timimg 问题? 遗憾的是、这是一种难以调试的情况。 我很难等半天才会出现这种情况。
我将感谢你的任何帮助。