From 60f0ba5fcbe3ab1d291aa5a0173f112b1dd3bb92 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 22 Dec 2011 03:09:25 +0000 Subject: [PATCH] Disable interrupts while accessing the APB2RTSR register git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4212 42af7a65-404d-4744-a932-0658087f49c3 --- arch/arm/src/stm32/stm32_adc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm/src/stm32/stm32_adc.c b/arch/arm/src/stm32/stm32_adc.c index 5cd22582dad..b71ef6df923 100644 --- a/arch/arm/src/stm32/stm32_adc.c +++ b/arch/arm/src/stm32/stm32_adc.c @@ -823,6 +823,7 @@ static void adc_startconv(struct stm32_dev_s *priv, bool enable) static void adc_rccreset(struct stm32_dev_s *priv, bool reset) { + irqstate_t flags; uint32_t regval; uint32_t adcbit; @@ -860,6 +861,12 @@ static void adc_rccreset(struct stm32_dev_s *priv, bool reset) adcbit = RCC_APB2RSTR_ADCRST; #endif + /* Disable interrupts. This is necessary because the APB2RTSR register + * is used by several different drivers. + */ + + flags = irqsave(); + /* Set or clear the selected bit in the APB2 reset register */ regval = getreg32(STM32_RCC_APB2RSTR); @@ -876,6 +883,7 @@ static void adc_rccreset(struct stm32_dev_s *priv, bool reset) regval &= ~adcbit; } putreg32(regval, STM32_RCC_APB2RSTR); + irqrestore(flags); } /*******************************************************************************