comparison Small_CPU/Src/adc.c @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children
comparison
equal deleted inserted replaced
37:ccc45c0e1ea2 38:5f11787b4f42
1 /**
2 ******************************************************************************
3 * @file adc.c
4 * @author heinrichs weikamp gmbh
5 * @version V0.0.1
6 * @date 11-Dec-2014
7 * @brief ADC for ambient light sensor
8 *
9 @verbatim
10 ==============================================================================
11 ##### How to use #####
12 ==============================================================================
13 @endverbatim
14 ******************************************************************************
15 * @attention
16 *
17 * <h2><center>&copy; COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
18 *
19 ******************************************************************************
20 */
21
22 /* Includes ------------------------------------------------------------------*/
23
24 #include "stm32f4xx_hal.h"
25 #include "adc.h"
26
27 /* Exported variables --------------------------------------------------------*/
28 /* Private variables ---------------------------------------------------------*/
29 ADC_HandleTypeDef AdcHandle;
30 __IO uint16_t uhADCxConvertedValue = 0;
31
32 /* Private types -------------------------------------------------------------*/
33 #define ADCx ADC1
34 #define ADCx_CLK_ENABLE() __ADC1_CLK_ENABLE();
35 #define ADCx_CHANNEL_GPIO_CLK_ENABLE() __GPIOF_CLK_ENABLE()
36
37 #define ADCx_FORCE_RESET() __ADC_FORCE_RESET()
38 #define ADCx_RELEASE_RESET() __ADC_RELEASE_RESET()
39
40 /* Definition for ADCx Channel Pin */
41 #define ADCx_GPIO_PIN GPIO_PIN_0
42 #define ADCx_GPIO_PORT GPIOB
43 #define ADCx_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE()
44 #define ADCx_GPIO_CLK_DISABLE() __GPIOB_CLK_DISABLE()
45
46 /* Definition for ADCx's Channel */
47 #define ADCx_CHANNEL ADC_CHANNEL_8
48
49 /* Definition for ADCx's NVIC */
50 //#define ADCx_IRQn ADC_IRQn
51
52 /* Private function prototypes -----------------------------------------------*/
53 void ADC_Start_single_IT_Conversion(void);
54
55 /* Exported functions --------------------------------------------------------*/
56
57 uint16_t get_ambient_light_level(void)
58 {
59 #ifdef OSTC_ON_DISCOVERY_HARDWARE
60 return 800;
61 #endif
62
63 return uhADCxConvertedValue;
64 }
65
66
67 static void ADCx_MspInit(ADC_HandleTypeDef *hadc)
68 {
69 #ifdef OSTC_ON_DISCOVERY_HARDWARE
70 return;
71 #endif
72
73 GPIO_InitTypeDef GPIO_InitStruct;
74
75 ADCx_GPIO_CLK_ENABLE();
76
77 GPIO_InitStruct.Pin = ADCx_GPIO_PIN ;
78 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
79 GPIO_InitStruct.Pull = GPIO_NOPULL;
80 HAL_GPIO_Init(ADCx_GPIO_PORT, &GPIO_InitStruct);
81
82 ADCx_CLK_ENABLE();
83
84 // HAL_NVIC_SetPriority(ADCx_IRQn, 2, 0);
85 // HAL_NVIC_EnableIRQ(ADCx_IRQn);
86 }
87
88
89 void ADCx_DeInit(void)
90 {
91 // HAL_ADC_Stop_IT(&AdcHandle);
92 HAL_ADC_DeInit(&AdcHandle);
93 }
94
95
96 void ADCx_Init(void)
97 {
98 #ifdef OSTC_ON_DISCOVERY_HARDWARE
99 return;
100 #endif
101
102 ADC_ChannelConfTypeDef sConfig;
103
104 AdcHandle.Instance = ADCx;
105
106 AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;
107 AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
108 AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
109 AdcHandle.Init.ContinuousConvMode = DISABLE;
110 AdcHandle.Init.DiscontinuousConvMode = DISABLE;
111 AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
112 AdcHandle.Init.EOCSelection = EOC_SINGLE_CONV;
113 AdcHandle.Init.NbrOfConversion = 1;
114 AdcHandle.Init.DMAContinuousRequests = DISABLE;
115
116 ADCx_MspInit(&AdcHandle);
117 HAL_ADC_Init(&AdcHandle);
118
119 sConfig.Channel = ADCx_CHANNEL;
120 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
121 sConfig.Rank = 1;
122 sConfig.Offset = 0;
123
124 HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
125
126 // ADC_Start_single_IT_Conversion();
127 }
128
129
130 uint32_t adc_debug_status = 0;
131
132 void adc_ambient_light_sensor_get_data(void)
133 {
134 #ifdef OSTC_ON_DISCOVERY_HARDWARE
135 return;
136 #endif
137
138 HAL_ADC_Start(&AdcHandle);
139 HAL_ADC_PollForConversion(&AdcHandle, 10);
140 adc_debug_status = HAL_ADC_GetState(&AdcHandle);
141 if(adc_debug_status == HAL_ADC_STATE_EOC_REG + HAL_ADC_STATE_READY) // new HAL_ADC_STATE_READY 160613
142 // if(HAL_ADC_GetState(&AdcHandle) == HAL_ADC_STATE_EOC_REG)
143 uhADCxConvertedValue = HAL_ADC_GetValue(&AdcHandle);
144 HAL_ADC_Stop(&AdcHandle);
145 }
146
147
148 /* Private functions ---------------------------------------------------------*/
149 /*
150 void ADC_Start_single_IT_Conversion(void)
151 {
152 HAL_ADC_Start_IT(&AdcHandle);
153 }
154
155
156 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
157 {
158 extern void copyAmbientLightData(void);
159
160 uhADCxConvertedValue = HAL_ADC_GetValue(AdcHandle);
161 copyAmbientLightData();
162 ADC_Start_single_IT_Conversion();
163 }
164 */
165
166 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/