
IIO firmware for the AD717x and AD411x family of devices.
Dependencies: sdp_k1_sdram
Diff: app/ad717x_data_capture.c
- Revision:
- 2:d0c2d3e1fb93
- Parent:
- 0:5ad86d8d396a
diff -r f71de62b7179 -r d0c2d3e1fb93 app/ad717x_data_capture.c --- a/app/ad717x_data_capture.c Fri Jun 10 09:37:03 2022 +0530 +++ b/app/ad717x_data_capture.c Thu Sep 29 09:02:39 2022 +0530 @@ -23,6 +23,7 @@ #include "ad717x_support.h" #include "no_os_error.h" #include "ad717x_user_config.h" +#include "no_os_delay.h" /******************************************************************************/ /********************* Macros and Constants Definition ************************/ @@ -37,6 +38,8 @@ * is tested for SDP-K1 platform @180Mhz default core clock */ #define BUF_READ_TIMEOUT 0xffffffff +#define AD717x_CONV_TIMEOUT 10000 + /******************************************************************************/ /******************** Variables and User Defined Data Types *******************/ /******************************************************************************/ @@ -156,7 +159,7 @@ int32_t prepare_data_transfer(uint32_t ch_mask, uint8_t num_of_chns, uint8_t sample_size) { - uint8_t mask = 0x1; + uint32_t mask = 0x1; int32_t ret; uint8_t ch_id; @@ -223,10 +226,36 @@ */ int32_t end_data_transfer(void) { - int32_t ret; + int32_t ret = 0; start_cont_data_capture = false; + uint32_t adc_raw_data; + uint8_t rdy_value = NO_OS_GPIO_LOW; + uint32_t timeout = AD717x_CONV_TIMEOUT; #if (DATA_CAPTURE_MODE == CONTINUOUS_DATA_CAPTURE) + ret = no_os_irq_disable(external_int_desc, IRQ_INT_ID); + if (ret) { + return ret; + } + + /* Read the data register when RDY is low to exit continuous read mode */ + do { + ret = no_os_gpio_get_value(rdy_gpio, &rdy_value); + if (ret) { + return ret; + } + timeout--; + } while ((rdy_value != NO_OS_GPIO_LOW) && (timeout > 0)); + + if (timeout == 0) { + return -ETIMEDOUT; + } + + ret = AD717X_ReadData(p_ad717x_dev_inst, &adc_raw_data); + if (ret) { + return ret; + } + /* Disable continous read mode */ ret = ad717x_enable_cont_read(p_ad717x_dev_inst, false); if (ret) {