From 653a7e9ad0f0d946cb277258933043f3c9c442c2 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 14 Sep 2014 07:52:27 +0000 Subject: Fixed bug #534. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7271 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/TIMv1/gpt_lld.c | 2 +- os/hal/ports/STM32/LLD/TIMv1/icu_lld.c | 8 ++++---- os/hal/ports/STM32/LLD/TIMv1/pwm_lld.c | 5 ++--- os/hal/src/pwm.c | 1 + 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'os') diff --git a/os/hal/ports/STM32/LLD/TIMv1/gpt_lld.c b/os/hal/ports/STM32/LLD/TIMv1/gpt_lld.c index 414677d80..998fa59c7 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/gpt_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/gpt_lld.c @@ -604,9 +604,9 @@ void gpt_lld_start(GPTDriver *gptp) { gptp->tim->CR1 = 0; /* Initially stopped. */ gptp->tim->CR2 = gptp->config->cr2; gptp->tim->PSC = psc; /* Prescaler value. */ + gptp->tim->SR = 0; /* Clear pending IRQs. */ gptp->tim->DIER = gptp->config->dier & /* DMA-related DIER bits. */ ~STM32_TIM_DIER_IRQ_MASK; - gptp->tim->SR = 0; /* Clear pending IRQs. */ } /** diff --git a/os/hal/ports/STM32/LLD/TIMv1/icu_lld.c b/os/hal/ports/STM32/LLD/TIMv1/icu_lld.c index c11736884..dfdce05f9 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/icu_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/icu_lld.c @@ -495,21 +495,21 @@ void icu_lld_start(ICUDriver *icup) { else { /* Driver re-configuration scenario, it must be stopped first.*/ icup->tim->CR1 = 0; /* Timer disabled. */ - icup->tim->DIER = icup->config->dier &/* DMA-related DIER settings. */ - ~STM32_TIM_DIER_IRQ_MASK; - icup->tim->SR = 0; /* Clear eventual pending IRQs. */ icup->tim->CCR[0] = 0; /* Comparator 1 disabled. */ icup->tim->CCR[1] = 0; /* Comparator 2 disabled. */ icup->tim->CNT = 0; /* Counter reset to zero. */ } /* Timer configuration.*/ + icup->tim->SR = 0; /* Clear eventual pending IRQs. */ + icup->tim->DIER = icup->config->dier & /* DMA-related DIER settings. */ + ~STM32_TIM_DIER_IRQ_MASK; psc = (icup->clock / icup->config->frequency) - 1; osalDbgAssert((psc <= 0xFFFF) && ((psc + 1) * icup->config->frequency) == icup->clock, "invalid frequency"); icup->tim->PSC = (uint16_t)psc; - icup->tim->ARR = 0xFFFF; + icup->tim->ARR = 0xFFFF; if (icup->config->channel == ICU_CHANNEL_1) { /* Selected input 1. diff --git a/os/hal/ports/STM32/LLD/TIMv1/pwm_lld.c b/os/hal/ports/STM32/LLD/TIMv1/pwm_lld.c index 50884c5c8..9742f1e02 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/pwm_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/pwm_lld.c @@ -510,9 +510,6 @@ void pwm_lld_start(PWMDriver *pwmp) { else { /* Driver re-configuration scenario, it must be stopped first.*/ pwmp->tim->CR1 = 0; /* Timer disabled. */ - pwmp->tim->DIER = pwmp->config->dier &/* DMA-related DIER settings. */ - ~STM32_TIM_DIER_IRQ_MASK; - pwmp->tim->SR = 0; /* Clear eventual pending IRQs. */ pwmp->tim->CCR[0] = 0; /* Comparator 1 disabled. */ pwmp->tim->CCR[1] = 0; /* Comparator 2 disabled. */ pwmp->tim->CCR[2] = 0; /* Comparator 3 disabled. */ @@ -609,6 +606,8 @@ void pwm_lld_start(PWMDriver *pwmp) { pwmp->tim->CCER = ccer; pwmp->tim->EGR = STM32_TIM_EGR_UG; /* Update event. */ pwmp->tim->SR = 0; /* Clear pending IRQs. */ + pwmp->tim->DIER = pwmp->config->dier & /* DMA-related DIER settings. */ + ~STM32_TIM_DIER_IRQ_MASK; #if STM32_PWM_USE_TIM1 || STM32_PWM_USE_TIM8 #if STM32_PWM_USE_ADVANCED pwmp->tim->BDTR = pwmp->config->bdtr | STM32_TIM_BDTR_MOE; diff --git a/os/hal/src/pwm.c b/os/hal/src/pwm.c index eb35e434e..fe277353e 100644 --- a/os/hal/src/pwm.c +++ b/os/hal/src/pwm.c @@ -100,6 +100,7 @@ void pwmStart(PWMDriver *pwmp, const PWMConfig *config) { pwmp->config = config; pwmp->period = config->period; pwm_lld_start(pwmp); + pwmp->enabled = 0; pwmp->state = PWM_READY; osalSysUnlock(); } -- cgit v1.2.3