aboutsummaryrefslogtreecommitdiffstats
path: root/os/io/adc.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-19 19:03:18 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-19 19:03:18 +0000
commit2ab27d3c01ce51a26587e6aaafcef23b2dda4afe (patch)
treea97665aa4e865b8156164478b77551aa34d281b9 /os/io/adc.c
parenta943eaecc7cd56c2a49521bf702b0524bb834aa1 (diff)
downloadChibiOS-2ab27d3c01ce51a26587e6aaafcef23b2dda4afe.tar.gz
ChibiOS-2ab27d3c01ce51a26587e6aaafcef23b2dda4afe.tar.bz2
ChibiOS-2ab27d3c01ce51a26587e6aaafcef23b2dda4afe.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1315 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/io/adc.c')
-rw-r--r--os/io/adc.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/os/io/adc.c b/os/io/adc.c
index ac003bc31..2fc64f561 100644
--- a/os/io/adc.c
+++ b/os/io/adc.c
@@ -42,9 +42,12 @@ void adcInit(void) {
*/
void adcObjectInit(ADCDriver *adcp) {
- adcp->ad_state = ADC_STOP;
- adcp->ad_config = NULL;
+ adcp->ad_state = ADC_STOP;
+ adcp->ad_config = NULL;
adcp->ad_callback = NULL;
+ adcp->ad_samples = NULL;
+ adcp->ad_depth = 0;
+ adcp->ad_grpp = NULL;
chSemInit(&adcp->ad_sem, 0);
}
@@ -119,7 +122,7 @@ void adcStop(ADCDriver *adcp) {
*/
bool_t adcStartConversion(ADCDriver *adcp,
ADCConversionGroup *grpp,
- void *samples,
+ adcsample_t *samples,
size_t depth,
adccallback_t callback) {
@@ -137,7 +140,10 @@ bool_t adcStartConversion(ADCDriver *adcp,
return TRUE;
}
adcp->ad_callback = callback;
- adc_lld_start_conversion(adcp, grpp, samples, depth);
+ adcp->ad_samples = samples;
+ adcp->ad_depth = depth;
+ adcp->ad_grpp = grpp;
+ adc_lld_start_conversion(adcp);
adcp->ad_state = ADC_RUNNING;
chSysUnlock();
return FALSE;
@@ -157,8 +163,11 @@ void adcStopConversion(ADCDriver *adcp) {
(adcp->ad_state == ADC_RUNNING),
"adcStopConversion(), #1",
"invalid state");
- adc_lld_stop_conversion(adcp);
- adcp->ad_state = ADC_READY;
+ if (adcp->ad_state == ADC_RUNNING) {
+ adc_lld_stop_conversion(adcp);
+ adcp->ad_grpp = NULL;
+ adcp->ad_state = ADC_READY;
+ }
chSysUnlock();
}