Files @ d98fd1240e20
Branch filter:

Location: protofuse-firmware/src/adc.c - annotation

NEO
fixed bug that caused all analogs to read same ADC value.
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);

}