Example Program for EVAL-AD7606

Dependencies:   platform_drivers

app/app_config.c

Committer:
Kjansen
Date:
2021-08-03
Revision:
7:054dbd5e1f45
Parent:
6:32de160dce43

File content as of revision 7:054dbd5e1f45:

/***************************************************************************//**
 *   @file    app_config.c
 *   @brief   Application configurations module (platform-agnostic)
 *   @details This module performs the system configurations
********************************************************************************
 * Copyright (c) 2020-2021 Analog Devices, Inc.
 * All rights reserved.
 *
 * This software is proprietary to Analog Devices, Inc. and its licensors.
 * By using this software you agree to the terms of the associated
 * Analog Devices Software License Agreement.
*******************************************************************************/

/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/

#include <stdbool.h>

#include "app_config.h"
#include "adc_data_capture.h"
#include "error.h"
#include "uart.h"
#include "gpio.h"
#include "irq.h"
#include "pwm.h"

/******************************************************************************/
/************************ Macros/Constants ************************************/
/******************************************************************************/

/******************************************************************************/
/******************** Variables and User Defined Data Types *******************/
/******************************************************************************/

/* UART init parameters */
struct uart_init_param uart_init_params = {
	.device_id = NULL,
	.baud_rate = IIO_UART_BAUD_RATE,
	.extra = &uart_extra_init_params
};

/* LED GPO init parameters */
static struct gpio_init_param led_gpio_init_params = {
	.number = LED_GPO,
	.extra = NULL
};

/* External interrupt init parameters */
static struct irq_init_param ext_int_init_params = {
	.irq_ctrl_id = EXTERNAL_INT_ID1,
	.extra = &ext_int_extra_init_params
};

/* External interrupt callback descriptor */
static struct callback_desc ext_int_callback_desc = {
	data_capture_callback,
	NULL,
	NULL
};

/* PWM init parameters */
static struct pwm_init_param pwm_init_params = {
	.id = PWM_TRIGGER,								// GPIO used for PWM
	.period_ns = CONV_TRIGGER_PERIOD_NSEC,			// PWM period in nsec
	.duty_cycle_ns = CONV_TRIGGER_DUTY_CYCLE_NSEC	// PWM duty cycle in nsec
};

/* LED GPO descriptor */
gpio_desc *led_gpio_desc;

/* External interrupt descriptor */
struct irq_ctrl_desc *ext_int_desc;

/* PWM descriptor */
struct pwm_desc *pwm_desc;

/******************************************************************************/
/************************** Functions Declarations ****************************/
/******************************************************************************/

/******************************************************************************/
/************************** Functions Definitions *****************************/
/******************************************************************************/

/**
 * @brief 	Initialize the GPIOs
 * @return	SUCCESS in case of success, FAILURE otherwise
 * @details	This function initialize the GPIOs used by application
 */
static int32_t init_gpio(void)
{
	do {
		/* Initialize the LED GPO */
		if (gpio_get_optional(&led_gpio_desc, &led_gpio_init_params) != SUCCESS) {
			break;
		}

		if (gpio_direction_output(led_gpio_desc, GPIO_HIGH) != SUCCESS) {
			break;
		}

		return SUCCESS;
	} while (0);

	return FAILURE;
}


/**
 * @brief 	Initialize the IRQ contoller
 * @return	SUCCESS in case of success, FAILURE otherwise
 * @details	This function initialize the interrupts for system peripherals
 */
static int32_t init_interrupt(void)
{
	do {
		/* Init interrupt controller for external interrupt */
		if (irq_ctrl_init(&ext_int_desc, &ext_int_init_params) != SUCCESS) {
			break;
		}

		/* Register a callback function for external interrupt */
		if (irq_register_callback(ext_int_desc,
					  EXTERNAL_INT_ID1,
					  &ext_int_callback_desc) != SUCCESS) {
			break;
		}

		return SUCCESS;
	} while (0);

	return FAILURE;
}


/**
 * @brief 	Initialize the PWM contoller
 * @return	SUCCESS in case of success, FAILURE otherwise
 */
static int32_t init_pwm(void)
{
	do {
		/* Initialize the PWM interface to generate PWM signal
		 * on conversion trigger event pin */
		if (pwm_init(&pwm_desc, &pwm_init_params) != SUCCESS) {
			break;
		}

		if (pwm_enable(pwm_desc) != SUCCESS) {
			break;
		}

		return SUCCESS;
	} while (0);

	return FAILURE;
}


/**
 * @brief 	Initialize the system peripherals
 * @return	SUCCESS in case of success, FAILURE otherwise
 */
int32_t init_system(void)
{
	if (init_gpio() != SUCCESS) {
		return FAILURE;
	}

	if (init_interrupt() != SUCCESS) {
		return FAILURE;
	}

	if (init_pwm() != SUCCESS) {
		return FAILURE;
	}

	return SUCCESS;
}