summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-02-18 13:50:46 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-02-18 13:50:46 -0600
commit871f5cbf4c2f6f675982023256638074c0fb51d0 (patch)
treed904fadc68206044607425b9827cbd7dabea57f9
parentd616b960af7df08ec8e8e7ceb6904a422ab87582 (diff)
downloadnuttx-871f5cbf4c2f6f675982023256638074c0fb51d0.tar.gz
nuttx-871f5cbf4c2f6f675982023256638074c0fb51d0.tar.bz2
nuttx-871f5cbf4c2f6f675982023256638074c0fb51d0.zip
STM32 Timer: Set CCMR wehn selecting timer channel. From David Sidrane
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_tim.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_tim.c b/nuttx/arch/arm/src/stm32/stm32_tim.c
index 14099cdb0..45cffe773 100644
--- a/nuttx/arch/arm/src/stm32/stm32_tim.c
+++ b/nuttx/arch/arm/src/stm32/stm32_tim.c
@@ -485,8 +485,10 @@ static int stm32_tim_setmode(FAR struct stm32_tim_dev_s *dev, stm32_tim_mode_t m
static int stm32_tim_setchannel(FAR struct stm32_tim_dev_s *dev, uint8_t channel,
stm32_tim_channel_t mode)
{
- uint16_t ccmr_val = 0;
- uint16_t ccer_val = stm32_getreg16(dev, STM32_GTIM_CCER_OFFSET);
+ uint16_t ccmr_orig = 0;
+ uint16_t ccmr_val = 0;
+ uint16_t ccmr_mask = 0xff;
+ uint16_t ccer_val = stm32_getreg16(dev, STM32_GTIM_CCER_OFFSET);
uint8_t ccmr_offset = STM32_GTIM_CCMR1_OFFSET;
ASSERT(dev);
@@ -543,7 +545,8 @@ static int stm32_tim_setchannel(FAR struct stm32_tim_dev_s *dev, uint8_t channel
if (channel & 1)
{
- ccmr_val <<= 8;
+ ccmr_val <<= 8;
+ ccmr_mask <<= 8;
}
if (channel > 1)
@@ -551,7 +554,10 @@ static int stm32_tim_setchannel(FAR struct stm32_tim_dev_s *dev, uint8_t channel
ccmr_offset = STM32_GTIM_CCMR2_OFFSET;
}
- stm32_putreg16(dev, ccmr_offset, ccmr_val);
+ ccmr_orig = stm32_getreg16(dev, ccmr_offset);
+ ccmr_orig &= ~ccmr_mask;
+ ccmr_orig |= ccmr_val;
+ stm32_putreg16(dev, ccmr_offset, ccmr_orig);
stm32_putreg16(dev, STM32_GTIM_CCER_OFFSET, ccer_val);
/* set GPIO */