blob: 84b75f07f1a98c3fec06b04a6f06d5199eacf03b [file] [log] [blame]
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
/*
* @addtogroup test_adc_basic_operations
* @{
* @defgroup t_adc_basic_basic_operations test_adc_sample
* @brief TestPurpose: verify ADC works well with different resolutions
* and sample mode
* @details
* - Test Steps
* -# Connect A0 to VCC3.3.
* -# Prepare ADC sequence table.
* -# Bind ADC device.
* -# Enable ADC device.
* -# Call adc_read() to fetch ADC sample.
* -# Dump the sample results.
* - Expected Results
* -# ADC will return the sample result for VCC3.3. Different resolutions
* will all return almost the biggest value in each sample width.
* @}
*/
#include <adc.h>
#include <zephyr.h>
#include <ztest.h>
#define BUFFER_SIZE 5
#if defined(CONFIG_BOARD_FRDM_K64F)
#define ADC_DEV_NAME CONFIG_ADC_1_NAME
#define ADC_CHANNEL 14
#elif defined(CONFIG_BOARD_FRDM_KL25Z)
#define ADC_DEV_NAME CONFIG_ADC_0_NAME
#define ADC_CHANNEL 12
#elif defined(CONFIG_BOARD_FRDM_KW41Z)
#define ADC_DEV_NAME CONFIG_ADC_0_NAME
#define ADC_CHANNEL 3
#elif defined(CONFIG_BOARD_HEXIWEAR_K64)
#define ADC_DEV_NAME CONFIG_ADC_0_NAME
#define ADC_CHANNEL 16
#elif defined(CONFIG_BOARD_HEXIWEAR_KW40Z)
#define ADC_DEV_NAME CONFIG_ADC_0_NAME
#define ADC_CHANNEL 1
#else
#define ADC_DEV_NAME CONFIG_ADC_0_NAME
#define ADC_CHANNEL 10
#endif
static u16_t seq_buffer[BUFFER_SIZE];
static struct adc_seq_entry entry = {
.sampling_delay = 30,
.channel_id = ADC_CHANNEL,
.buffer = (void *)seq_buffer,
.buffer_length = BUFFER_SIZE * sizeof(seq_buffer[0])
};
static struct adc_seq_table table = {
.entries = &entry,
.num_entries = 1,
};
static int test_task(void)
{
int i;
int ret;
struct device *adc_dev = device_get_binding(ADC_DEV_NAME);
if (!adc_dev) {
TC_PRINT("Cannot get ADC device\n");
return TC_FAIL;
}
/* 1. Verify adc_enable() */
adc_enable(adc_dev);
k_sleep(500);
/* 2. Verify adc_read() */
ret = adc_read(adc_dev, &table);
if (ret != 0) {
TC_PRINT("Failed to fetch sample data from ADC controller\n");
return TC_FAIL;
}
TC_PRINT("Channel %d ADC Sample: ", ADC_CHANNEL);
for (i = 0; i < BUFFER_SIZE; i++) {
TC_PRINT("%d ", seq_buffer[i]);
}
TC_PRINT("\n");
/* 3. Verify adc_disable() */
adc_disable(adc_dev);
return TC_PASS;
}
void test_adc_sample(void)
{
zassert_true(test_task() == TC_PASS, NULL);
}