IIO firmware for the AD717x and AD411x family of devices.

Dependencies:   sdp_k1_sdram

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) {