Microchip® Advanced Software Framework

adc_task.c File Reference

ADC Management Task.

Copyright (c) 2011-2018 Microchip Technology Inc. and its subsidiaries.

#include <stddef.h>
#include <stdio.h>
#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "gpio.h"
#include "pm_uc3c.h"
#include "scif_uc3c.h"
#include "adcifa.h"
#include "pdca.h"
#include "adc_task.h"
#include "sysclk.h"
#include "dsp.h"
#include "conf_demo.h"

Macros

#define ADC_TRIGGER_SYNC_MIN   1
 
#define ADC_TRIGGER_SYNC_NONE   0
 
#define ADC_TRIGGER_SYNC_ORDER   2
 
#define AVR32_ADCIFA_IRQ_GROUP   36
 The ADCIFA window monitor interrupt handler. More...
 

Functions

void adc_task (void)
 ADC Task: More...
 
void adc_task_init (void)
 main function : initialization and loop to display ADC values More...
 
 ISR (adc_int_window_handler, AVR32_ADCIFA_IRQ_GROUP, 0)
 
 ISR (pdca_int_handler_seq0, AVR32_PDCA_IRQ_GROUP0, 0)
 The PDCA interrupt handler. More...
 
void pdca_init (void)
 Configure the PDCA and register its interrupt pdca_int_handler. More...
 

Variables

adcifa_opt_t adc_config_t
 
adcifa_sequencer_conversion_opt_t adc_conversion_sequencer0_t [ADC_NUMBER_OF_CONV_SEQ0]
 
adcifa_sequencer_conversion_opt_t adc_conversion_sequencer1_t [ADC_NUMBER_OF_CONV_SEQ1]
 
adcifa_sequencer_opt_t adc_sequencer0_config_t
 
adcifa_sequencer_opt_t adc_sequencer1_config_t
 
int16_t adc_values_seq0 [ADC_PDCA_CHANNEL_NUMBER_OF_SAMPLES]
 
int16_t adc_values_seq1 [ADC_NUMBER_OF_CONV_SEQ1]
 
volatile
adcifa_window_monitor_opt_t 
adc_window_config_t
 
volatile avr32_adcifa_t * adcifa = &AVR32_ADCIFA
 
volatile bool flag_end_of_acquisition = false
 
static const pdca_channel_options_t pdca_channel0_config_t
 
volatile int16_t potentiometer_value
 
A_ALIGNED dsp16_t signalin_gui [GUI_BUFFER_LENGTH]
 
volatile float signalin_remote [GUI_BUFFER_LENGTH]
 
volatile int32_t trigger_process_state = ADC_TRIGGER_SYNC_NONE
 

#define ADC_TRIGGER_SYNC_MIN   1

Referenced by adc_task(), adc_task_init(), and ISR().

#define ADC_TRIGGER_SYNC_NONE   0
#define ADC_TRIGGER_SYNC_ORDER   2

Referenced by ISR().

#define AVR32_ADCIFA_IRQ_GROUP   36

The ADCIFA window monitor interrupt handler.

ISR ( pdca_int_handler_seq0  ,
AVR32_PDCA_IRQ_GROUP0  ,
 
)

The PDCA interrupt handler.

The handler disables the PDCA transfer. The interrupt will happen each time the transfer is completed.

References ADC_PDCA_CHANNEL_SEQ0, flag_end_of_acquisition, gpio_set_gpio_pin(), pdca_disable(), pdca_enable_interrupt_transfer_complete(), and pdca_init_channel().

void pdca_init ( void  )

Configure the PDCA and register its interrupt pdca_int_handler.

References ADC_PDCA_CHANNEL_SEQ0, cpu_irq_restore(), cpu_irq_save(), irq_register_handler, pdca_enable_interrupt_transfer_complete(), and pdca_init_channel().

Referenced by adc_task_init().

adcifa_opt_t adc_config_t
Initial value:
= {
.frequency = 1000000,
.reference_source = ADCIFA_REF06VDD,
.sample_and_hold_disable = false,
.single_sequencer_mode = false,
.free_running_mode_enable = false,
.sleep_mode_enable = false,
.mux_settle_more_time = false
}
#define ADCIFA_REF06VDD
Definition: adcifa.h:109

Referenced by main().

Initial value:
= {
{
.channel_p = ADC_EXT_INPUT_INP,
.channel_n = ADC_EXT_INPUT_INN,
.gain = ADCIFA_SHG_1
}
}
#define ADCIFA_SHG_1
Definition: adcifa.h:137
#define ADC_EXT_INPUT_INN
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:76
#define ADC_EXT_INPUT_INP
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:75

Referenced by adc_task_init().

Initial value:
= {
{
.channel_p = ADC_POTENTIOMETER_INP,
.channel_n = ADC_POTENTIOMETER_INN,
.gain = ADCIFA_SHG_1
},
{
.channel_p = ADC_POTENTIOMETER_INP,
.channel_n = ADC_POTENTIOMETER_INN,
.gain = ADCIFA_SHG_1
},
{
.channel_p = ADC_POTENTIOMETER_INP,
.channel_n = ADC_POTENTIOMETER_INN,
.gain = ADCIFA_SHG_1
},
{
.channel_p = ADC_POTENTIOMETER_INP,
.channel_n = ADC_POTENTIOMETER_INN,
.gain = ADCIFA_SHG_1
}
}
#define ADC_POTENTIOMETER_INP
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:80
#define ADC_POTENTIOMETER_INN
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:81
#define ADCIFA_SHG_1
Definition: adcifa.h:137

Referenced by adc_task_init().

adcifa_sequencer_opt_t adc_sequencer0_config_t
Initial value:
= {
.resolution = ADCIFA_SRES_10B,
.trigger_selection = ADCIFA_TRGSEL_ITIMER,
.start_of_conversion = ADCIFA_SOCB_ALLSEQ,
.half_word_adjustment = ADCIFA_HWLA_NOADJ,
.software_acknowledge = ADCIFA_SA_NO_EOS_SOFTACK
}
#define ADCIFA_SOCB_ALLSEQ
Definition: adcifa.h:149
#define ADCIFA_SRES_10B
Definition: adcifa.h:130
#define ADCIFA_SA_NO_EOS_SOFTACK
Definition: adcifa.h:185
#define ADCIFA_TRGSEL_ITIMER
Definition: adcifa.h:119
#define ADCIFA_HWLA_NOADJ
Definition: adcifa.h:177
#define ADC_NUMBER_OF_CONV_SEQ0
ADC Task Configuration Parameters.
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:72
#define ADCIFA_SH_MODE_STANDARD
Definition: adcifa.h:168
adcifa_sequencer_opt_t adc_sequencer1_config_t
Initial value:
= {
.resolution = ADCIFA_SRES_10B,
.trigger_selection = ADCIFA_TRGSEL_SOFT,
.start_of_conversion = ADCIFA_SOCB_ALLSEQ,
.half_word_adjustment = ADCIFA_HWLA_NOADJ,
.software_acknowledge = ADCIFA_SA_NO_EOS_SOFTACK
}
#define ADCIFA_TRGSEL_SOFT
Definition: adcifa.h:118
#define ADCIFA_SOCB_ALLSEQ
Definition: adcifa.h:149
#define ADCIFA_SRES_10B
Definition: adcifa.h:130
#define ADCIFA_SA_NO_EOS_SOFTACK
Definition: adcifa.h:185
#define ADC_NUMBER_OF_CONV_SEQ1
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:73
#define ADCIFA_HWLA_NOADJ
Definition: adcifa.h:177
#define ADCIFA_SH_MODE_STANDARD
Definition: adcifa.h:168
int16_t adc_values_seq0[ADC_PDCA_CHANNEL_NUMBER_OF_SAMPLES]

Referenced by adc_process_task(), and adc_task().

int16_t adc_values_seq1[ADC_NUMBER_OF_CONV_SEQ1]

Referenced by adc_process_task(), and adc_task().

volatile adcifa_window_monitor_opt_t adc_window_config_t
Initial value:
= {
.low_threshold = 0,
.high_threshold = 0,
.source_index = ADC_NUMBER_OF_CONV_SEQ0-1
}
#define ADCIFA_WINDOW_MODE_ABOVE
Definition: adcifa.h:201
#define ADC_NUMBER_OF_CONV_SEQ0
ADC Task Configuration Parameters.
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:72
volatile avr32_adcifa_t* adcifa = &AVR32_ADCIFA
volatile bool flag_end_of_acquisition = false

Referenced by adc_task(), and ISR().

const pdca_channel_options_t pdca_channel0_config_t
static
Initial value:
= {
.addr = (void *)adc_values_seq0,
.pid = AVR32_ADCIFA_PDCA_ID_RX_CH0,
.r_addr = NULL,
.r_size = 0,
.transfer_size = PDCA_TRANSFER_SIZE_HALF_WORD
}
#define ADC_PDCA_CHANNEL_NUMBER_OF_SAMPLES
Definition: uc3c-scope-meter-and-filtering/conf/conf_demo.h:87
#define NULL
Definition: lwip-1.4.1/src/include/lwip/def.h:47
#define PDCA_TRANSFER_SIZE_HALF_WORD
Size of PDCA transfer: half-word.
Definition: pdca.h:61
int16_t adc_values_seq0[ADC_PDCA_CHANNEL_NUMBER_OF_SAMPLES]
Definition: adc_task.c:64
volatile int16_t potentiometer_value

Referenced by adc_task(), gui_task(), and ISR().

Referenced by adc_task(), and gui_task().

volatile float signalin_remote[GUI_BUFFER_LENGTH]

Referenced by adc_task(), and noise_task().

volatile int32_t trigger_process_state = ADC_TRIGGER_SYNC_NONE

Referenced by adc_task(), adc_task_init(), and ISR().