Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 56 | Rev 61 | ||
|---|---|---|---|
| Line 1245... | Line 1245... | ||
| 1245 | /* Check if timeout is disabled (set to infinite wait) */ |
1245 | /* Check if timeout is disabled (set to infinite wait) */ |
| 1246 | if(Timeout != HAL_MAX_DELAY) |
1246 | if(Timeout != HAL_MAX_DELAY) |
| 1247 | { |
1247 | { |
| 1248 | if((Timeout == 0) || ((HAL_GetTick() - tickstart ) > Timeout)) |
1248 | if((Timeout == 0) || ((HAL_GetTick() - tickstart ) > Timeout)) |
| 1249 | { |
1249 | { |
| - | 1250 | /* New check to avoid false timeout detection in case of preemption */ |
|
| - | 1251 | if(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) |
|
| - | 1252 | { |
|
| 1250 | /* Update ADC state machine to timeout */ |
1253 | /* Update ADC state machine to timeout */ |
| 1251 | SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); |
1254 | SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); |
| 1252 | 1255 | ||
| 1253 | /* Process unlocked */ |
1256 | /* Process unlocked */ |
| 1254 | __HAL_UNLOCK(hadc); |
1257 | __HAL_UNLOCK(hadc); |
| 1255 | 1258 | ||
| 1256 | return HAL_TIMEOUT; |
1259 | return HAL_TIMEOUT; |
| - | 1260 | } |
|
| 1257 | } |
1261 | } |
| 1258 | } |
1262 | } |
| 1259 | } |
1263 | } |
| 1260 | 1264 | ||
| 1261 | /* Clear end of conversion flag of regular group if low power feature */ |
1265 | /* Clear end of conversion flag of regular group if low power feature */ |
| Line 1321... | Line 1325... | ||
| 1321 | /* Check if timeout is disabled (set to infinite wait) */ |
1325 | /* Check if timeout is disabled (set to infinite wait) */ |
| 1322 | if(Timeout != HAL_MAX_DELAY) |
1326 | if(Timeout != HAL_MAX_DELAY) |
| 1323 | { |
1327 | { |
| 1324 | if((Timeout == 0) || ((HAL_GetTick() - tickstart ) > Timeout)) |
1328 | if((Timeout == 0) || ((HAL_GetTick() - tickstart ) > Timeout)) |
| 1325 | { |
1329 | { |
| - | 1330 | /* New check to avoid false timeout detection in case of preemption */ |
|
| - | 1331 | if(__HAL_ADC_GET_FLAG(hadc, EventType) == RESET) |
|
| - | 1332 | { |
|
| 1326 | /* Update ADC state machine to timeout */ |
1333 | /* Update ADC state machine to timeout */ |
| 1327 | SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); |
1334 | SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); |
| 1328 | 1335 | ||
| 1329 | /* Process unlocked */ |
1336 | /* Process unlocked */ |
| 1330 | __HAL_UNLOCK(hadc); |
1337 | __HAL_UNLOCK(hadc); |
| 1331 | 1338 | ||
| 1332 | return HAL_TIMEOUT; |
1339 | return HAL_TIMEOUT; |
| - | 1340 | } |
|
| 1333 | } |
1341 | } |
| 1334 | } |
1342 | } |
| 1335 | } |
1343 | } |
| 1336 | 1344 | ||
| 1337 | switch(EventType) |
1345 | switch(EventType) |
| Line 1616... | Line 1624... | ||
| 1616 | /* Disable ADC DMA mode */ |
1624 | /* Disable ADC DMA mode */ |
| 1617 | hadc->Instance->CR2 &= ~ADC_CR2_DMA; |
1625 | hadc->Instance->CR2 &= ~ADC_CR2_DMA; |
| 1618 | 1626 | ||
| 1619 | /* Disable the DMA channel (in case of DMA in circular mode or stop while */ |
1627 | /* Disable the DMA channel (in case of DMA in circular mode or stop while */ |
| 1620 | /* DMA transfer is on going) */ |
1628 | /* DMA transfer is on going) */ |
| - | 1629 | if (hadc->DMA_Handle->State == HAL_DMA_STATE_BUSY) |
|
| - | 1630 | { |
|
| 1621 | HAL_DMA_Abort(hadc->DMA_Handle); |
1631 | HAL_DMA_Abort(hadc->DMA_Handle); |
| - | 1632 | ||
| - | 1633 | /* Check if DMA channel effectively disabled */ |
|
| - | 1634 | if (tmp_hal_status != HAL_OK) |
|
| - | 1635 | { |
|
| - | 1636 | /* Update ADC state machine to error */ |
|
| - | 1637 | SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA); |
|
| - | 1638 | } |
|
| - | 1639 | } |
|
| 1622 | 1640 | ||
| 1623 | /* Set ADC state */ |
1641 | /* Set ADC state */ |
| 1624 | ADC_STATE_CLR_SET(hadc->State, |
1642 | ADC_STATE_CLR_SET(hadc->State, |
| 1625 | HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, |
1643 | HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, |
| 1626 | HAL_ADC_STATE_READY); |
1644 | HAL_ADC_STATE_READY); |
| Line 2017... | Line 2035... | ||
| 2017 | { |
2035 | { |
| 2018 | if (READ_BIT(ADC->CCR, ADC_CCR_TSVREFE) == RESET) |
2036 | if (READ_BIT(ADC->CCR, ADC_CCR_TSVREFE) == RESET) |
| 2019 | { |
2037 | { |
| 2020 | SET_BIT(ADC->CCR, ADC_CCR_TSVREFE); |
2038 | SET_BIT(ADC->CCR, ADC_CCR_TSVREFE); |
| 2021 | 2039 | ||
| 2022 | if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)) |
2040 | if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) |
| 2023 | { |
2041 | { |
| 2024 | /* Delay for temperature sensor stabilization time */ |
2042 | /* Delay for temperature sensor stabilization time */ |
| 2025 | /* Compute number of CPU cycles to wait for */ |
2043 | /* Compute number of CPU cycles to wait for */ |
| 2026 | wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000)); |
2044 | wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000)); |
| 2027 | while(wait_loop_index != 0) |
2045 | while(wait_loop_index != 0) |
| Line 2209... | Line 2227... | ||
| 2209 | /* Wait for ADC effectively enabled */ |
2227 | /* Wait for ADC effectively enabled */ |
| 2210 | while(ADC_IS_ENABLE(hadc) == RESET) |
2228 | while(ADC_IS_ENABLE(hadc) == RESET) |
| 2211 | { |
2229 | { |
| 2212 | if((HAL_GetTick() - tickstart ) > ADC_ENABLE_TIMEOUT) |
2230 | if((HAL_GetTick() - tickstart ) > ADC_ENABLE_TIMEOUT) |
| 2213 | { |
2231 | { |
| - | 2232 | /* New check to avoid false timeout detection in case of preemption */ |
|
| - | 2233 | if(ADC_IS_ENABLE(hadc) == RESET) |
|
| - | 2234 | { |
|
| 2214 | /* Update ADC state machine to error */ |
2235 | /* Update ADC state machine to error */ |
| 2215 | SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); |
2236 | SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); |
| 2216 | 2237 | ||
| 2217 | /* Set ADC error code to ADC IP internal error */ |
2238 | /* Set ADC error code to ADC IP internal error */ |
| 2218 | SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); |
2239 | SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); |
| 2219 | 2240 | ||
| 2220 | /* Process unlocked */ |
2241 | /* Process unlocked */ |
| 2221 | __HAL_UNLOCK(hadc); |
2242 | __HAL_UNLOCK(hadc); |
| 2222 | 2243 | ||
| 2223 | return HAL_ERROR; |
2244 | return HAL_ERROR; |
| - | 2245 | } |
|
| 2224 | } |
2246 | } |
| 2225 | } |
2247 | } |
| 2226 | } |
2248 | } |
| 2227 | 2249 | ||
| 2228 | /* Return HAL status */ |
2250 | /* Return HAL status */ |
| Line 2252... | Line 2274... | ||
| 2252 | /* Wait for ADC effectively disabled */ |
2274 | /* Wait for ADC effectively disabled */ |
| 2253 | while(ADC_IS_ENABLE(hadc) != RESET) |
2275 | while(ADC_IS_ENABLE(hadc) != RESET) |
| 2254 | { |
2276 | { |
| 2255 | if((HAL_GetTick() - tickstart ) > ADC_DISABLE_TIMEOUT) |
2277 | if((HAL_GetTick() - tickstart ) > ADC_DISABLE_TIMEOUT) |
| 2256 | { |
2278 | { |
| - | 2279 | /* New check to avoid false timeout detection in case of preemption */ |
|
| - | 2280 | if(ADC_IS_ENABLE(hadc) != RESET) |
|
| - | 2281 | { |
|
| 2257 | /* Update ADC state machine to error */ |
2282 | /* Update ADC state machine to error */ |
| 2258 | SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); |
2283 | SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); |
| 2259 | 2284 | ||
| 2260 | /* Set ADC error code to ADC IP internal error */ |
2285 | /* Set ADC error code to ADC IP internal error */ |
| 2261 | SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); |
2286 | SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); |
| 2262 | 2287 | ||
| 2263 | return HAL_ERROR; |
2288 | return HAL_ERROR; |
| - | 2289 | } |
|
| 2264 | } |
2290 | } |
| 2265 | } |
2291 | } |
| 2266 | } |
2292 | } |
| 2267 | 2293 | ||
| 2268 | /* Return HAL status */ |
2294 | /* Return HAL status */ |