Files
@ d98fd1240e20
Branch filter:
Location: protofuse-firmware/src/adc.c - annotation
d98fd1240e20
3.1 KiB
text/plain
fixed bug that caused all analogs to read same ADC value.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 ec79a7a31ac7 48ae84f03494 48ae84f03494 48ae84f03494 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 3324e1dda444 3324e1dda444 3324e1dda444 3324e1dda444 3324e1dda444 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 48ae84f03494 ec79a7a31ac7 48ae84f03494 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 48ae84f03494 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 d98fd1240e20 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 ec79a7a31ac7 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 48ae84f03494 | /*
* adc.c
*
* Created on: Aug 9, 2016
* Author: Nicholas Orlando
*/
/* Includes ------------------------------------------------------------------*/
#include "adc.h"
#include "gpio.h"
#include "dma.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
// Peripheral Handles
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;
// Private Variables
static uint16_t adc_readings[3];
uint16_t get_viout_counts(void)
{
return adc_readings[ADC_CHAN_VIOUT];
}
uint16_t get_vgiout_counts(void)
{
return adc_readings[ADC_CHAN_GAIN_VIOUT];
}
uint16_t get_vbat_counts(void)
{
return adc_readings[ADC_CHAN_VBAT];
}
/* ADC1 init function */
void adc_init(void)
{
/* Peripheral clock enable */
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
/**ADC1 GPIO Configuration
PA0 ------> ADC1_IN1
PA1 ------> ADC1_IN2
PA2 ------> ADC1_IN3
*/
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/**Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 3;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
HAL_ADC_Init(&hadc1);
/* Peripheral DMA init*/
hdma_adc1.Instance = DMA1_Channel1;
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_adc1.Init.Mode = DMA_CIRCULAR;
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(&hdma_adc1);
__HAL_LINKDMA(&hadc1,DMA_Handle,hdma_adc1);
ADC_ChannelConfTypeDef sConfig;
// Configure VIOUT channel
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_601CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
// Configure VIOUT-GAINS channel
sConfig.Channel = ADC_CHANNEL_2;
sConfig.Rank = ADC_REGULAR_RANK_2;
sConfig.SamplingTime = ADC_SAMPLETIME_601CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
// Configure VBAT channel
sConfig.Channel = ADC_CHANNEL_3;
sConfig.Rank = ADC_REGULAR_RANK_3;
sConfig.SamplingTime = ADC_SAMPLETIME_601CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_readings, 3);
// HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
// HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
}
|