我正在使用 具有 I2C 的北欧平台使用 ADS7142器件。
这是我的配置:
sbac201a 。中使用 ADS7142RegisterMap.h 的头文件
IIC 频率为400K
静态 uint8_t const offset_cal[]={single_REG_WRITE、ADS7142_REG_OFFSET_CAL、ADS7142_VAL_TRIG_OFFCAL};
静态 uint8_t const CHANNEL_INPUT_cfg[3]={SINGLE_REG_WRITE、ADS7142_REG_CHANNEL_INPUT_CFG、ADS7142_VAL_CHANNEL_INPUT_CFG_1_CHANNEL_伪 差分};
静态 uint8_t const operation_mode_SEL[]={single_REG_WRITE、ADS7142_REG_OPMODE_SEL、ADS7142_VAL_OPMODE_SEL_I2C_CMD_MODE_W_AUTO_SEQ_EN};
静态 uint8_t const auto_seq_channel_cfg[]={single_REG_WRITE、ADS7142_REG_AUTO_SEQ_CHEN、ADS7142_VAL_AUTO_SEQ_CHENAUTO_SEQ_CH0};
静态 uint8_t const start_convertion_cfg[]={single_REG_WRITE、ADS7142_REG_start_sequence、ADS7142_VAL_START_sequence};//开始
静态 uint8_t const abort_convertion_cfg[]={single_REG_WRITE、ADS7142_REG_ABORT_sequence、ADS7142_VAL_ABORT_sequence};//中止
/ /
app_twi_transfer_t const ads7142_init_param[]={
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、ABORT_ENABLE_cfg、sizeof (ABORT_ENABLE_cfg)、0)、
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、OFFSET_cal、sizeof (OFFSET_cal)、0)、
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、CHANGE_INPUT_cfg、sizeof (CHANGE_INPUT_cfg)、0)、
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、OPERAL_MODE_SEL、sizeof (OPERAT_MODE_SEL)、0)、
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、auto_Seq_channel_cfg、sizeof (auto_Seq_channel_cfg)、0)、
APP_TWI_WRITE (ADS7142_SLAVE_ADDR、START_conversion _cfg、sizeof (start_conversion _cfg)、0)、
};
nrf_drv_gpioote_in_config_t ads_config = GPIOTE_CONFIG_IN_SENSE_HITOLO (真);
nrf_drv_gpioT_in_init (ADS7142_Busy_PIN、&ADS_CONFIG、Mg_ADC_READ_handler); //and Busy/RDY PIN, 下降沿触发 中断。
Mg_gpioT_enable ()
静态空 read_ads7142_CB_handler (ret_code_t 结果、void* p_user_data){
nrf_log_info ("aaaaaaaaaaa\n");
for (;i < 4;i++){
nrf_log_info ("adc:%#x\n"、m_adc_buffer[i]);
}
}
void ads7142_data_read (void){
静态 app_twi_transfer_t const 传输[]={
ADS7142_Read (ADS7142_SLAVE_ADDR、m_ADC_buffer、4)、
};
静态 app_twi_transaction_t const 事务={
.callback = read_ads7142_CB_handler、
.p_user_data =空、
.p_transfers =传输、
.number_of_transfers = sizeof (transfers)/sizeof (transfers [0])};
app_error_check (app_twi_schedule (&m_twi_ads7142、事务));
}
我可以 正确读取寄存器值。
完成此配置后、读取 ADS7142_SLAVE_ADDR 4个字节。
无论我 是启动转换 cfg 还是 中止转换 cfg、都不会触发我的中断。
手动调用 ads7142_data_read() 读取转换功能四次,获取结果。
:info:busy pin:0:info:aaaaaaaaaaa
信息:ADC:0xe0
:info:adc:0x40
:info:adc:0xFF
:info:adc:0x10
:info:busy pin:0:info:aaaaaaaaaaa
:info:adc:0xee
:info:adc:0x40
:info:adc:0xeb
信息:ADC:0xe0
:info:busy pin:0:info:aaaaaaaaaaa
:info:adc:0xf8
:info:adc:0
:info:adc:0xf6
信息:ADC:0xe0
:info:busy pin:0:info:aaaaaaaaaaa
:info:adc:0xf7
:info:adc:0x70
:info:adc:0xFF
:info:adc:0x50
接收到的值一直在变化、该值太 大。