/**
  @page ADC_SingleConversion_TriggerTimer_DMA ADC example started by Linux Remote Processor Framework

  @verbatim
  ******************** (C) COPYRIGHT 2019 STMicroelectronics *******************
  * @file    ADC/ADC_SingleConversion_TriggerTimer_DMA/Remoteproc/README
  * @author  MCD Application Team
  * @brief   How to run example using Linux Remote Processor Framework
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  @endverbatim

@par Description of M4 Cube example with Linux Remote Processor Framework

When Cube firmware is running on Cortex-M4, System Clock tree and regulators(vrefbuf) are configured by Cortex-A7
Besides, clock source for each peripheral assigned to Cortex-M4 is done by Cortex-A7.


@par How to use it ?

In order to make the program work with Linux running on Cortex-A7, you must do the following :
Before running M4 Cube example, you have to
1) interrupt uboot
2) choose the right configuration to make sure that M4 resources are assigned to Linux Resource Manager driver

Then,
 - Start example using the following command: "fw_cortex_m4.sh start" under example directory installed in userfs partition
     * it will load and start firmware using Linux Remote Processor
 - Stop example using the following command: "fw_cortex_m4.sh stop" under example directory installed in userfs partition
     * it will stop firmware using Linux Remote Processor

@par Example Description
Use ADC to convert a single channel at each trig from timer, 
conversion data are transferred by DMA into an array, indefinitely (circular mode).

Example configuration:
ADC is configured to convert a single channel, in single conversion mode,
from HW trigger: timer peripheral.
DMA is configured to transfer conversion data in an array, in circular mode.
A timer is configured in time base and to generate TRGO events.

Example execution:
From the start, the ADC converts the selected channel at each trig from timer.
DMA transfers conversion data to the array, DMA transfer complete interruption occurs.
Results array is updated indefinitely (DMA in circular mode).
phyCORE Red LED is turned on when the DMA transfer is completed (results array full)
and turned off at next DMA half-transfer (result array first half updated).

For debug: variables to monitor with debugger watch window:
 - "aADCxConvertedData": ADC group regular conversion data (array of data)
 - "aADCxConvertedData_Voltage_mVolt": ADC conversion data computation to physical values (array of data)

Connection needed:
None, if ADC channel and DAC channel are selected on the same GPIO.
Otherwise, connect a wire between DAC channel output and ADC input.

Other peripherals used:
  1 GPIO for LED
  1 GPIO for analog input: PA4
  DAC
  1 GPIO for DAC channel output PA4
  1 GPIO for push button
  DMA
  Timer

Board settings:
 - ADC is configured to convert ADC2_CHANNEL_16 (PA4).
 - The voltage input on ADC channel is provided from DAC (DAC_CHANNEL_1).
   ADC input from pin PA4 and DAC ouput to pin PA4:
   If same pin is used no connection is required, it is done internally. Otherwise, user need to connect a wire between No connector Access and PA4
 - Voltage is increasing at each click on "S5" push-button, from 0 to maximum range in 4 steps.
   Clicks on "S5" push-button follow circular cycles: At clicks counter maximum value reached, counter is set back to 0.


To observe voltage level applied on ADC channel through GPIO, connect a voltmeter on
pin PA4 (No connector Access on this board).

STM32MP157C-phyBOARD-Sargas board Red LED is be used to monitor the program execution status:
 - Normal operation: LED is turned-on/off in function of ADC conversion
   result.
    - Toggling: "On" upon conversion completion (full DMA buffer filled)
                "Off" upon half conversion completion (half DMA buffer filled)
 - Error: In case of error, LED is toggling twice at a frequency of 1Hz.

@par Directory contents 

  - ADC/ADC_SingleConversion_TriggerTimer_DMA/Inc/stm32mp1xx_it.h          Interrupt handlers header file
  - ADC/ADC_SingleConversion_TriggerTimer_DMA/Inc/main.h                  Header for main.c module  
  - ADC/ADC_SingleConversion_TriggerTimer_DMA/Src/stm32mp1xx_it.c          Interrupt handlers
  - ADC/ADC_SingleConversion_TriggerTimer_DMA/Src/main.c                  Main program
  - ADC/ADC_SingleConversion_TriggerTimer_DMA/Src/system_stm32mp1xx.c      STM32MP1xx system source file


@par Hardware and Software environment

  - This example runs on STM32MP15xx devices.
    
  - This example has been tested with STM32MP15-phyBOARD-Sargas board and can be
    easily tailored to any other supported device and development board.


@par How to use it ? 

In order to make the program work, you must do the following :
 - Open your preferred toolchain
 - Rebuild all files and load your image into target memory
 - Run the example

 * <h3><center>&copy; COPYRIGHT STMicroelectronics</center></h3>
 */
