diff options
Diffstat (limited to 'app/adc.c')
-rw-r--r-- | app/adc.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/app/adc.c b/app/adc.c new file mode 100644 index 0000000..1565af5 --- /dev/null +++ b/app/adc.c @@ -0,0 +1,51 @@ +#include "project.h" + +int host_has_power; + +void +adc_tick (void) +{ + uint16_t v; + + if (adc_eoc (ADC1)) + { + v = adc_read_regular (ADC1); + + host_has_power = ! !(v > 1000); + + } + + adc_start_conversion_direct (ADC1); +} + + + +static uint8_t channels[] = { ADC_CHANNEL0 }; + +#define n_channels (sizeof(channels)/sizeof(channels[0])) + +void +adc_init (void) +{ + + rcc_periph_clock_enable (RCC_ADC1); + + //gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_DOWN, GPIO0); + gpio_set_mode (GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_ANALOG, GPIO0); + + adc_off (ADC1); + adc_disable_scan_mode (ADC1); + adc_set_single_conversion_mode (ADC1); + adc_disable_external_trigger_regular (ADC1); + adc_set_right_aligned (ADC1); + adc_set_sample_time_on_all_channels (ADC1, ADC_SMPR_SMP_28DOT5CYC); + + adc_power_on (ADC1); + + adc_reset_calibration (ADC1); + adc_calibration (ADC1); + adc_set_regular_sequence (ADC1, n_channels, channels); + adc_start_conversion_direct (ADC1); + + host_has_power = 0; +} |