From af65d01d0a76f9a0593dd36326c100d4f26f4c0d Mon Sep 17 00:00:00 2001 From: gdisirio Date: Thu, 5 Nov 2009 20:57:24 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1269 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/io/adc.c | 3 +- os/io/adc.h | 9 +++++ os/io/templates/adc_lld.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 os/io/templates/adc_lld.h diff --git a/os/io/adc.c b/os/io/adc.c index 1860f88aa..0c215d61a 100644 --- a/os/io/adc.c +++ b/os/io/adc.c @@ -44,6 +44,7 @@ void adcObjectInit(ADCDriver *adcp) { adcp->adc_state = ADC_STOP; adcp->adc_config = NULL; + chSemInit(&adcp->adc_sem, 0); } /** @@ -132,7 +133,7 @@ void adcStopConversion(ADCDriver *adcp) { "adcStopConversion(), #1", "invalid state"); - adc_lld_start_conversion(adcp, grpp, samples); + adc_lld_stop_conversion(adcp); adcp->adc_state = ADC_READY; chSysUnlock(); diff --git a/os/io/adc.h b/os/io/adc.h index a7506f636..07fc19074 100644 --- a/os/io/adc.h +++ b/os/io/adc.h @@ -27,6 +27,10 @@ #ifndef _ADC_H_ #define _ADC_H_ +#if !CH_USE_SEMAPHORES +#error "ADC driver requires CH_USE_SEMAPHORES" +#endif + /** * @brief Driver state machine possible states. */ @@ -46,6 +50,11 @@ extern "C" { void adcObjectInit(ADCDriver *adcp); void adcStart(ADCDriver *adcp, const ADCDriver *config); void adcStop(ADCDriver *adcp); + bool_t adcStartConversion(ADCDriver *adcp, + ADCConversionGroup *grpp, + void *samples); + void adcStopConversion(ADCDriver *adcp); + msg_t adcWaitConversion(ADCDriver *adcp, systme_t timeout); #ifdef __cplusplus } #endif diff --git a/os/io/templates/adc_lld.h b/os/io/templates/adc_lld.h new file mode 100644 index 000000000..ab8a48bf9 --- /dev/null +++ b/os/io/templates/adc_lld.h @@ -0,0 +1,84 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file templates/adc_lld.h + * @brief ADC Driver subsystem low level driver header template + * @addtogroup ADC_LLD + * @{ + */ + +#ifndef _ADC_LLD_H_ +#define _ADC_LLD_H_ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver configuration structure. + */ +typedef struct { + +} ADCConfig; + +/** + * @brief Structure representing a MAC driver. + */ +typedef struct { + /** + * @brief Driver state. + */ + adcstate_t adc_state; + /** + * @brief Current configuration data. + */ + const ADCConfig *adc_config; + /** + * @brief Semaphore for completion synchronization. + */ + Semaphore adc_sem; + /* End of the mandatory fields.*/ +} ADCDriver; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void adc_lld_init(void); + void adc_lld_start(ADCDriver *adcp); + void adc_lld_stop(ADCDriver *adcp); + void adc_lld_start_conversion(ADCDriver *adcp, + ADCConversionGroup *grpp, + void *samples); + void adc_lld_stop_conversion(ADCDriver *adcp); +#ifdef __cplusplus +} +#endif + +#endif /* _ADC_LLD_H_ */ + +/** @} */ -- cgit v1.2.3