From 3262155f7d3afa5f69ae98b4744018dec03484eb Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 26 Aug 2016 08:41:04 +0000 Subject: Added automatic number of channels initialization for ADCv2. Implemented IRQ hooks for ADC drivers. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9741 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c | 4 ++++ os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c | 11 ++++++++++- os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'os') diff --git a/os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c index 3fd005a49..55d0d2d44 100644 --- a/os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv1/hal_adc_lld.c @@ -114,6 +114,10 @@ OSAL_IRQ_HANDLER(STM32_ADC1_HANDLER) { adc_lld_serve_interrupt(&ADCD1); +#if defined(STM32_ADC_ADC1_IRQ_HOOK) + STM32_ADC_ADC1_IRQ_HOOK +#endif + OSAL_IRQ_EPILOGUE(); } #endif diff --git a/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c index e25f2b5c8..b2e651eb2 100644 --- a/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.c @@ -125,6 +125,9 @@ OSAL_IRQ_HANDLER(STM32_ADC_HANDLER) { _adc_isr_error_code(&ADCD1, ADC_ERR_OVERFLOW); } /* TODO: Add here analog watchdog handling.*/ +#if defined(STM32_ADC_ADC1_IRQ_HOOK) + STM32_ADC_ADC1_IRQ_HOOK +#endif #endif /* STM32_ADC_USE_ADC1 */ #if STM32_ADC_USE_ADC2 @@ -139,6 +142,9 @@ OSAL_IRQ_HANDLER(STM32_ADC_HANDLER) { _adc_isr_error_code(&ADCD2, ADC_ERR_OVERFLOW); } /* TODO: Add here analog watchdog handling.*/ +#if defined(STM32_ADC_ADC2_IRQ_HOOK) + STM32_ADC_ADC2_IRQ_HOOK +#endif #endif /* STM32_ADC_USE_ADC2 */ #if STM32_ADC_USE_ADC3 @@ -153,6 +159,9 @@ OSAL_IRQ_HANDLER(STM32_ADC_HANDLER) { _adc_isr_error_code(&ADCD3, ADC_ERR_OVERFLOW); } /* TODO: Add here analog watchdog handling.*/ +#if defined(STM32_ADC_ADC3_IRQ_HOOK) + STM32_ADC_ADC3_IRQ_HOOK +#endif #endif /* STM32_ADC_USE_ADC3 */ OSAL_IRQ_EPILOGUE(); @@ -341,7 +350,7 @@ void adc_lld_start_conversion(ADCDriver *adcp) { adcp->adc->SR = 0; adcp->adc->SMPR1 = grpp->smpr1; adcp->adc->SMPR2 = grpp->smpr2; - adcp->adc->SQR1 = grpp->sqr1; + adcp->adc->SQR1 = grpp->sqr1 | ADC_SQR1_NUM_CH(grpp->num_channels); adcp->adc->SQR2 = grpp->sqr2; adcp->adc->SQR3 = grpp->sqr3; diff --git a/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c index a9f3240f1..664a05a66 100644 --- a/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv3/hal_adc_lld.c @@ -313,6 +313,9 @@ static void adc_lld_serve_interrupt(ADCDriver *adcp, uint32_t isr) { /* Analog watchdog error.*/ _adc_isr_error_code(adcp, ADC_ERR_AWD3); } +#if defined(STM32_ADC_IRQ_HOOK) + STM32_ADC_IRQ_HOOK +#endif } } -- cgit v1.2.3