diff options
| author | gdisirio <gdisirio@110e8d01-0319-4d1e-a829-52ad28d1bb01> | 2018-10-13 19:10:22 +0000 | 
|---|---|---|
| committer | gdisirio <gdisirio@110e8d01-0319-4d1e-a829-52ad28d1bb01> | 2018-10-13 19:10:22 +0000 | 
| commit | 1ca01403b48e0cadb8712d4e4a8024ea62300cad (patch) | |
| tree | 9f72fe317f1461a27389d19bd058d034fbf74899 /os | |
| parent | 062b4f7d37eab6c2deea02732e19eb641764a31e (diff) | |
| download | ChibiOS-1ca01403b48e0cadb8712d4e4a8024ea62300cad.tar.gz ChibiOS-1ca01403b48e0cadb8712d4e4a8024ea62300cad.tar.bz2 ChibiOS-1ca01403b48e0cadb8712d4e4a8024ea62300cad.zip  | |
Added support for TIM21 and TIM22 in STM32 GPT driver. Reinforced checks in TIM-related drivers.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12360 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os')
| -rw-r--r-- | os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c | 118 | ||||
| -rw-r--r-- | os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h | 111 | ||||
| -rw-r--r-- | os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.h | 28 | ||||
| -rw-r--r-- | os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.h | 28 | ||||
| -rw-r--r-- | os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.h | 24 | 
5 files changed, 308 insertions, 1 deletions
diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c index 0de6ac49d..f943a567c 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c @@ -130,6 +130,22 @@ GPTDriver GPTD12;  GPTDriver GPTD14;
  #endif
 +/**
 + * @brief   GPTD21 driver identifier.
 + * @note    The driver GPTD21 allocates the timer TIM21 when enabled.
 + */
 +#if STM32_GPT_USE_TIM21 || defined(__DOXYGEN__)
 +GPTDriver GPTD21;
 +#endif
 +
 +/**
 + * @brief   GPTD22 driver identifier.
 + * @note    The driver GPTD22 allocates the timer TIM22 when enabled.
 + */
 +#if STM32_GPT_USE_TIM22 || defined(__DOXYGEN__)
 +GPTDriver GPTD22;
 +#endif
 +
  /*===========================================================================*/
  /* Driver local variables and types.                                         */
  /*===========================================================================*/
 @@ -394,6 +410,48 @@ OSAL_IRQ_HANDLER(STM32_TIM14_HANDLER) {  #endif /* !defined(STM32_TIM14_SUPPRESS_ISR) */
  #endif /* STM32_GPT_USE_TIM14 */
 +#if STM32_GPT_USE_TIM21 || defined(__DOXYGEN__)
 +#if !defined(STM32_TIM21_SUPPRESS_ISR)
 +#if !defined(STM32_TIM21_HANDLER)
 +#error "STM32_TIM21_HANDLER not defined"
 +#endif
 +/**
 + * @brief   TIM21 interrupt handler.
 + *
 + * @isr
 + */
 +OSAL_IRQ_HANDLER(STM32_TIM21_HANDLER) {
 +
 +  OSAL_IRQ_PROLOGUE();
 +
 +  gpt_lld_serve_interrupt(&GPTD21);
 +
 +  OSAL_IRQ_EPILOGUE();
 +}
 +#endif /* !defined(STM32_TIM21_SUPPRESS_ISR) */
 +#endif /* STM32_GPT_USE_TIM21 */
 +
 +#if STM32_GPT_USE_TIM22 || defined(__DOXYGEN__)
 +#if !defined(STM32_TIM22_SUPPRESS_ISR)
 +#if !defined(STM32_TIM22_HANDLER)
 +#error "STM32_TIM22_HANDLER not defined"
 +#endif
 +/**
 + * @brief   TIM22 interrupt handler.
 + *
 + * @isr
 + */
 +OSAL_IRQ_HANDLER(STM32_TIM22_HANDLER) {
 +
 +  OSAL_IRQ_PROLOGUE();
 +
 +  gpt_lld_serve_interrupt(&GPTD22);
 +
 +  OSAL_IRQ_EPILOGUE();
 +}
 +#endif /* !defined(STM32_TIM22_SUPPRESS_ISR) */
 +#endif /* STM32_GPT_USE_TIM22 */
 +
  /*===========================================================================*/
  /* Driver exported functions.                                                */
  /*===========================================================================*/
 @@ -476,6 +534,18 @@ void gpt_lld_init(void) {    GPTD14.tim = STM32_TIM14;
    gptObjectInit(&GPTD14);
  #endif
 +
 +#if STM32_GPT_USE_TIM21
 +  /* Driver initialization.*/
 +  GPTD21.tim = STM32_TIM21;
 +  gptObjectInit(&GPTD21);
 +#endif
 +
 +#if STM32_GPT_USE_TIM22
 +  /* Driver initialization.*/
 +  GPTD22.tim = STM32_TIM22;
 +  gptObjectInit(&GPTD22);
 +#endif
  }
  /**
 @@ -669,6 +739,36 @@ void gpt_lld_start(GPTDriver *gptp) {  #endif
      }
  #endif
 +
 +#if STM32_GPT_USE_TIM21
 +    if (&GPTD21 == gptp) {
 +      rccEnableTIM21(true);
 +      rccResetTIM21();
 +#if !defined(STM32_TIM21_SUPPRESS_ISR)
 +      nvicEnableVector(STM32_TIM21_NUMBER, STM32_GPT_TIM21_IRQ_PRIORITY);
 +#endif
 +#if defined(STM32_TIM21CLK)
 +      gptp->clock = STM32_TIM21CLK;
 +#else
 +      gptp->clock = STM32_TIMCLK1;
 +#endif
 +    }
 +#endif
 +
 +#if STM32_GPT_USE_TIM22
 +    if (&GPTD22 == gptp) {
 +      rccEnableTIM22(true);
 +      rccResetTIM22();
 +#if !defined(STM32_TIM22_SUPPRESS_ISR)
 +      nvicEnableVector(STM32_TIM22_NUMBER, STM32_GPT_TIM22_IRQ_PRIORITY);
 +#endif
 +#if defined(STM32_TIM22CLK)
 +      gptp->clock = STM32_TIM22CLK;
 +#else
 +      gptp->clock = STM32_TIMCLK1;
 +#endif
 +    }
 +#endif
    }
    /* Prescaler value calculation.*/
 @@ -806,6 +906,24 @@ void gpt_lld_stop(GPTDriver *gptp) {        rccDisableTIM14();
      }
  #endif
 +
 +#if STM32_GPT_USE_TIM21
 +    if (&GPTD21 == gptp) {
 +#if !defined(STM32_TIM21_SUPPRESS_ISR)
 +      nvicDisableVector(STM32_TIM21_NUMBER);
 +#endif
 +      rccDisableTIM21();
 +    }
 +#endif
 +
 +#if STM32_GPT_USE_TIM22
 +    if (&GPTD22 == gptp) {
 +#if !defined(STM32_TIM22_SUPPRESS_ISR)
 +      nvicDisableVector(STM32_TIM22_NUMBER);
 +#endif
 +      rccDisableTIM22();
 +    }
 +#endif
    }
  }
 diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h index df6645c12..add2a4d8a 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h @@ -232,12 +232,78 @@  #if !defined(STM32_GPT_TIM14_IRQ_PRIORITY) || defined(__DOXYGEN__)
  #define STM32_GPT_TIM14_IRQ_PRIORITY        7
  #endif
 +
 +/**
 + * @brief   GPTD21 interrupt priority level setting.
 + */
 +#if !defined(STM32_GPT_TIM21_IRQ_PRIORITY) || defined(__DOXYGEN__)
 +#define STM32_GPT_TIM21_IRQ_PRIORITY        7
 +#endif
 +
 +/**
 + * @brief   GPTD22 interrupt priority level setting.
 + */
 +#if !defined(STM32_GPT_TIM22_IRQ_PRIORITY) || defined(__DOXYGEN__)
 +#define STM32_GPT_TIM22_IRQ_PRIORITY        7
 +#endif
  /** @} */
  /*===========================================================================*/
  /* Derived constants and error checks.                                       */
  /*===========================================================================*/
 +#if !defined(STM32_HAS_TIM1)
 +#define STM32_HAS_TIM1                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM2)
 +#define STM32_HAS_TIM2                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM3)
 +#define STM32_HAS_TIM3                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM4)
 +#define STM32_HAS_TIM4                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM5)
 +#define STM32_HAS_TIM5                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM6)
 +#define STM32_HAS_TIM6                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM7)
 +#define STM32_HAS_TIM7                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM8)
 +#define STM32_HAS_TIM8                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM11)
 +#define STM32_HAS_TIM11                     FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM12)
 +#define STM32_HAS_TIM12                     FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM14)
 +#define STM32_HAS_TIM14                     FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM21)
 +#define STM32_HAS_TIM21                     FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM22)
 +#define STM32_HAS_TIM22                     FALSE
 +#endif
 +
  #if STM32_GPT_USE_TIM1 && !STM32_HAS_TIM1
  #error "TIM1 not present in the selected device"
  #endif
 @@ -286,12 +352,21 @@  #error "TIM14 not present in the selected device"
  #endif
 +#if STM32_GPT_USE_TIM21 && !STM32_HAS_TIM21
 +#error "TIM14 not present in the selected device"
 +#endif
 +
 +#if STM32_GPT_USE_TIM22 && !STM32_HAS_TIM22
 +#error "TIM14 not present in the selected device"
 +#endif
 +
  #if !STM32_GPT_USE_TIM1 && !STM32_GPT_USE_TIM2 &&                           \
      !STM32_GPT_USE_TIM3 && !STM32_GPT_USE_TIM4 &&  \
      !STM32_GPT_USE_TIM5 && !STM32_GPT_USE_TIM6 &&  \
      !STM32_GPT_USE_TIM7 && !STM32_GPT_USE_TIM8 &&  \
      !STM32_GPT_USE_TIM9 && !STM32_GPT_USE_TIM11 && \
 -    !STM32_GPT_USE_TIM12 && !STM32_GPT_USE_TIM14
 +    !STM32_GPT_USE_TIM12 && !STM32_GPT_USE_TIM14 && \
 +    !STM32_GPT_USE_TIM21 && !STM32_GPT_USE_TIM22
  #error "GPT driver activated but no TIM peripheral assigned"
  #endif
 @@ -392,6 +467,22 @@  #endif
  #endif
 +#if STM32_GPT_USE_TIM21
 +#if defined(STM32_TIM21_IS_USED)
 +#error "GPTD21 requires TIM21 but the timer is already used"
 +#else
 +#define STM32_TIM21_IS_USED
 +#endif
 +#endif
 +
 +#if STM32_GPT_USE_TIM22
 +#if defined(STM32_TIM22_IS_USED)
 +#error "GPTD22 requires TIM22 but the timer is already used"
 +#else
 +#define STM32_TIM22_IS_USED
 +#endif
 +#endif
 +
  /* IRQ priority checks.*/
  #if STM32_GPT_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) &&              \
      !OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM1_IRQ_PRIORITY)
 @@ -453,6 +544,16 @@  #error "Invalid IRQ priority assigned to TIM14"
  #endif
 +#if STM32_GPT_USE_TIM21 && !defined(STM32_TIM21_SUPPRESS_ISR) &&            \
 +    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM21_IRQ_PRIORITY)
 +#error "Invalid IRQ priority assigned to TIM21"
 +#endif
 +
 +#if STM32_GPT_USE_TIM22 && !defined(STM32_TIM22_SUPPRESS_ISR) &&            \
 +    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM22_IRQ_PRIORITY)
 +#error "Invalid IRQ priority assigned to TIM22"
 +#endif
 +
  /*===========================================================================*/
  /* Driver data structures and types.                                         */
  /*===========================================================================*/
 @@ -620,6 +721,14 @@ extern GPTDriver GPTD12;  extern GPTDriver GPTD14;
  #endif
 +#if STM32_GPT_USE_TIM21 && !defined(__DOXYGEN__)
 +extern GPTDriver GPTD21;
 +#endif
 +
 +#if STM32_GPT_USE_TIM22 && !defined(__DOXYGEN__)
 +extern GPTDriver GPTD22;
 +#endif
 +
  #ifdef __cplusplus
  extern "C" {
  #endif
 diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.h index e516da6b9..90c984fc4 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.h @@ -158,6 +158,34 @@  /* Derived constants and error checks.                                       */
  /*===========================================================================*/
 +#if !defined(STM32_HAS_TIM1)
 +#define STM32_HAS_TIM1                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM2)
 +#define STM32_HAS_TIM2                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM3)
 +#define STM32_HAS_TIM3                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM4)
 +#define STM32_HAS_TIM4                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM5)
 +#define STM32_HAS_TIM5                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM8)
 +#define STM32_HAS_TIM8                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM9)
 +#define STM32_HAS_TIM9                      FALSE
 +#endif
 +
  #if STM32_ICU_USE_TIM1 && !STM32_HAS_TIM1
  #error "TIM1 not present in the selected device"
  #endif
 diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.h index 24ca5c430..f54aa97c5 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.h @@ -208,6 +208,34 @@  /* Configuration checks.                                                     */
  /*===========================================================================*/
 +#if !defined(STM32_HAS_TIM1)
 +#define STM32_HAS_TIM1                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM2)
 +#define STM32_HAS_TIM2                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM3)
 +#define STM32_HAS_TIM3                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM4)
 +#define STM32_HAS_TIM4                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM5)
 +#define STM32_HAS_TIM5                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM8)
 +#define STM32_HAS_TIM8                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM9)
 +#define STM32_HAS_TIM9                      FALSE
 +#endif
 +
  #if STM32_PWM_USE_TIM1 && !STM32_HAS_TIM1
  #error "TIM1 not present in the selected device"
  #endif
 diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.h index f4febb6c8..e9e1a83c8 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_st_lld.h @@ -65,6 +65,30 @@  /* Derived constants and error checks.                                       */
  /*===========================================================================*/
 +#if !defined(STM32_HAS_TIM2)
 +#define STM32_HAS_TIM2                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM3)
 +#define STM32_HAS_TIM3                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM4)
 +#define STM32_HAS_TIM4                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM5)
 +#define STM32_HAS_TIM5                      FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM21)
 +#define STM32_HAS_TIM21                     FALSE
 +#endif
 +
 +#if !defined(STM32_HAS_TIM22)
 +#define STM32_HAS_TIM22                     FALSE
 +#endif
 +
  #if STM32_ST_USE_TIMER == 2
  #if !STM32_HAS_TIM2
  #error "TIM2 not present"
  | 
