Add support for TIM12 as well as TIM15 to ICU Topic is solved

Use this forum for requesting small changes in ChibiOS. Large changes should be discussed in the development forum. This forum is NOT for support.
Post Reply
User avatar
FXCoder
Posts: 403
Joined: Sun Jun 12, 2016 4:10 am
Has thanked: 188 times
Been thanked: 134 times

Add support for TIM12 as well as TIM15 to ICU

Post by FXCoder »

In addition to TIM15 which was for L4+ also add TIM12 for F4...
Plus change documentation of default ICU setting.

Code: Select all

Index: hal_icu_lld.c
===================================================================
--- hal_icu_lld.c   (revision 12394)
+++ hal_icu_lld.c   (working copy)
@@ -94,6 +94,21 @@
 ICUDriver ICUD9;
 #endif
 
+/**
+ * @brief   ICUD12 driver identifier.
+ * @note    The driver ICUD12 allocates the timer TIM12 when enabled.
+ */
+#if STM32_ICU_USE_TIM12 || defined(__DOXYGEN__)
+ICUDriver ICUD12;
+#endif
+
+/**
+ * @brief   ICUD15 driver identifier.
+ * @note    The driver ICUD15 allocates the timer TIM15 when enabled.
+ */
+#if STM32_ICU_USE_TIM15 || defined(__DOXYGEN__)
+ICUDriver ICUD15;
+#endif
 /*===========================================================================*/
 /* Driver local variables and types.                                         */
 /*===========================================================================*/
@@ -323,6 +338,48 @@
 #endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */
 #endif /* STM32_ICU_USE_TIM9 */
 
+#if STM32_ICU_USE_TIM12 || defined(__DOXYGEN__)
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+#if !defined(STM32_TIM12_HANDLER)
+#error "STM32_TIM12_HANDLER not defined"
+#endif
+/**
+ * @brief   TIM12 interrupt handler.
+ *
+ * @isr
+ */
+OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) {
+
+  OSAL_IRQ_PROLOGUE();
+
+  icu_lld_serve_interrupt(&ICUD12);
+
+  OSAL_IRQ_EPILOGUE();
+}
+#endif /* !defined(STM32_TIM12_SUPPRESS_ISR) */
+#endif /* STM32_ICU_USE_TIM12 */
+
+#if STM32_ICU_USE_TIM15 || defined(__DOXYGEN__)
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+#if !defined(STM32_TIM15_HANDLER)
+#error "STM32_TIM15_HANDLER not defined"
+#endif
+/**
+ * @brief   TIM15 interrupt handler.
+ *
+ * @isr
+ */
+OSAL_IRQ_HANDLER(STM32_TIM15_HANDLER) {
+
+  OSAL_IRQ_PROLOGUE();
+
+  icu_lld_serve_interrupt(&ICUD15);
+
+  OSAL_IRQ_EPILOGUE();
+}
+#endif /* !defined(STM32_TIM15_SUPPRESS_ISR) */
+#endif /* STM32_ICU_USE_TIM15 */
+
 /*===========================================================================*/
 /* Driver exported functions.                                                */
 /*===========================================================================*/
@@ -375,6 +432,18 @@
   icuObjectInit(&ICUD9);
   ICUD9.tim = STM32_TIM9;
 #endif
+
+#if STM32_ICU_USE_TIM12
+  /* Driver initialization.*/
+  icuObjectInit(&ICUD12);
+  ICUD12.tim = STM32_TIM12;
+#endif
+
+#if STM32_ICU_USE_TIM15
+  /* Driver initialization.*/
+  icuObjectInit(&ICUD15);
+  ICUD15.tim = STM32_TIM15;
+#endif
 }
 
 /**
@@ -499,6 +568,36 @@
 #endif
     }
 #endif
+
+#if STM32_ICU_USE_TIM12
+    if (&ICUD12 == icup) {
+      rccEnableTIM12(true);
+      rccResetTIM12();
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+      nvicEnableVector(STM32_TIM12_NUMBER, STM32_ICU_TIM12_IRQ_PRIORITY);
+#endif
+#if defined(STM32_TIM12CLK)
+      icup->clock = STM32_TIM12CLK;
+#else
+      icup->clock = STM32_TIMCLK1;
+#endif
+    }
+#endif
+
+#if STM32_ICU_USE_TIM15
+    if (&ICUD15 == icup) {
+      rccEnableTIM15(true);
+      rccResetTIM15();
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+      nvicEnableVector(STM32_TIM15_NUMBER, STM32_ICU_TIM15_IRQ_PRIORITY);
+#endif
+#if defined(STM32_TIM15CLK)
+      icup->clock = STM32_TIM15CLK;
+#else
+      icup->clock = STM32_TIMCLK2;
+#endif
+    }
+#endif
   }
   else {
     /* Driver re-configuration scenario, it must be stopped first.*/
@@ -650,6 +749,24 @@
       rccDisableTIM9();
     }
 #endif
+
+#if STM32_ICU_USE_TIM12
+    if (&ICUD12 == icup) {
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+      nvicDisableVector(STM32_TIM12_NUMBER);
+#endif
+      rccDisableTIM12();
+    }
+#endif
+
+#if STM32_ICU_USE_TIM15
+    if (&ICUD15 == icup) {
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+      nvicDisableVector(STM32_TIM15_NUMBER);
+#endif
+      rccDisableTIM15();
+    }
+#endif
   }
 }
 
Index: hal_icu_lld.h
===================================================================
--- hal_icu_lld.h   (revision 12394)
+++ hal_icu_lld.h   (working copy)
@@ -44,7 +44,7 @@
 /**
  * @brief   ICUD1 driver enable switch.
  * @details If set to @p TRUE the support for ICUD1 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM1) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM1                  FALSE
@@ -53,7 +53,7 @@
 /**
  * @brief   ICUD2 driver enable switch.
  * @details If set to @p TRUE the support for ICUD2 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM2) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM2                  FALSE
@@ -62,7 +62,7 @@
 /**
  * @brief   ICUD3 driver enable switch.
  * @details If set to @p TRUE the support for ICUD3 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM3) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM3                  FALSE
@@ -71,7 +71,7 @@
 /**
  * @brief   ICUD4 driver enable switch.
  * @details If set to @p TRUE the support for ICUD4 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM4) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM4                  FALSE
@@ -80,7 +80,7 @@
 /**
  * @brief   ICUD5 driver enable switch.
  * @details If set to @p TRUE the support for ICUD5 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM5) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM5                  FALSE
@@ -89,7 +89,7 @@
 /**
  * @brief   ICUD8 driver enable switch.
  * @details If set to @p TRUE the support for ICUD8 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM8) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM8                  FALSE
@@ -98,7 +98,7 @@
 /**
  * @brief   ICUD9 driver enable switch.
  * @details If set to @p TRUE the support for ICUD9 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM9) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM9                  FALSE
@@ -105,6 +105,24 @@
 #endif
 
 /**
+ * @brief   ICUD12 driver enable switch.
+ * @details If set to @p TRUE the support for ICUD12 is included.
+ * @note    The default is @p FALSE.
+ */
+#if !defined(STM32_ICU_USE_TIM12) || defined(__DOXYGEN__)
+#define STM32_ICU_USE_TIM12                  FALSE
+#endif
+
+/**
+ * @brief   ICUD15 driver enable switch.
+ * @details If set to @p TRUE the support for ICUD15 is included.
+ * @note    The default is @p FALSE.
+ */
+#if !defined(STM32_ICU_USE_TIM15) || defined(__DOXYGEN__)
+#define STM32_ICU_USE_TIM15                  FALSE
+#endif
+
+/**
  * @brief   ICUD1 interrupt priority level setting.
  */
 #if !defined(STM32_ICU_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
@@ -152,6 +170,20 @@
 #if !defined(STM32_ICU_TIM9_IRQ_PRIORITY) || defined(__DOXYGEN__)
 #define STM32_ICU_TIM9_IRQ_PRIORITY         7
 #endif
+
+/**
+ * @brief   ICUD12 interrupt priority level setting.
+ */
+#if !defined(STM32_ICU_TIM12_IRQ_PRIORITY) || defined(__DOXYGEN__)
+#define STM32_ICU_TIM12_IRQ_PRIORITY        7
+#endif
+
+/**
+ * @brief   ICUD15 interrupt priority level setting.
+ */
+#if !defined(STM32_ICU_TIM15_IRQ_PRIORITY) || defined(__DOXYGEN__)
+#define STM32_ICU_TIM15_IRQ_PRIORITY         7
+#endif
 /** @} */
 
 /*===========================================================================*/
@@ -186,6 +218,14 @@
 #define STM32_HAS_TIM9                      FALSE
 #endif
 
+#if !defined(STM32_HAS_TIM12)
+#define STM32_HAS_TIM12                     FALSE
+#endif
+
+#if !defined(STM32_HAS_TIM15)
+#define STM32_HAS_TIM15                     FALSE
+
+#endif
 #if STM32_ICU_USE_TIM1 && !STM32_HAS_TIM1
 #error "TIM1 not present in the selected device"
 #endif
@@ -214,10 +254,19 @@
 #error "TIM9 not present in the selected device"
 #endif
 
+#if STM32_ICU_USE_TIM12 && !STM32_HAS_TIM12
+#error "TIM12 not present in the selected device"
+#endif
+
+#if STM32_ICU_USE_TIM15 && !STM32_HAS_TIM15
+#error "TIM15 not present in the selected device"
+#endif
+
 #if !STM32_ICU_USE_TIM1 && !STM32_ICU_USE_TIM2 &&                           \
     !STM32_ICU_USE_TIM3 && !STM32_ICU_USE_TIM4 &&                           \
     !STM32_ICU_USE_TIM5 && !STM32_ICU_USE_TIM8 &&                           \
-    !STM32_ICU_USE_TIM9
+    !STM32_ICU_USE_TIM9 && !STM32_ICU_USE_TIM12                             \
+    !STM32_ICU_USE_TIM15
 #error "ICU driver activated but no TIM peripheral assigned"
 #endif
 
@@ -278,6 +327,22 @@
 #endif
 #endif
 
+#if STM32_ICU_USE_TIM12
+#if defined(STM32_TIM12_IS_USED)
+#error "ICUD12 requires TIM12 but the timer is already used"
+#else
+#define STM32_TIM12_IS_USED
+#endif
+#endif
+
+#if STM32_ICU_USE_TIM15
+#if defined(STM32_TIM15_IS_USED)
+#error "ICUD15 requires TIM15 but the timer is already used"
+#else
+#define STM32_TIM15_IS_USED
+#endif
+#endif
+
 /* IRQ priority checks.*/
 #if STM32_ICU_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) &&              \
     !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM1_IRQ_PRIORITY)
@@ -314,6 +379,16 @@
 #error "Invalid IRQ priority assigned to TIM9"
 #endif
 
+#if STM32_ICU_USE_TIM12 && !defined(STM32_TIM12_SUPPRESS_ISR) &&            \
+    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM12_IRQ_PRIORITY)
+#error "Invalid IRQ priority assigned to TIM12"
+#endif
+
+#if STM32_ICU_USE_TIM15 && !defined(STM32_TIM15_SUPPRESS_ISR) &&              \
+    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM15_IRQ_PRIORITY)
+#error "Invalid IRQ priority assigned to TIM9"
+#endif
+
 /*===========================================================================*/
 /* Driver data structures and types.                                         */
 /*===========================================================================*/
@@ -492,6 +567,14 @@
 extern ICUDriver ICUD9;
 #endif
 
+#if STM32_ICU_USE_TIM12 && !defined(__DOXYGEN__)
+extern ICUDriver ICUD12;
+#endif
+
+#if STM32_ICU_USE_TIM15 && !defined(__DOXYGEN__)
+extern ICUDriver ICUD15;
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
User avatar
FXCoder
Posts: 403
Joined: Sun Jun 12, 2016 4:10 am
Has thanked: 188 times
Been thanked: 134 times

Re: Add support for TIM12 as well as TIM15 to ICU

Post by FXCoder »

Typo... missing && following check with STM32_ICU_USE_TIM12

Code: Select all

Index: hal_icu_lld.c
===================================================================
--- hal_icu_lld.c   (revision 12394)
+++ hal_icu_lld.c   (working copy)
@@ -94,6 +94,21 @@
 ICUDriver ICUD9;
 #endif
 
+/**
+ * @brief   ICUD12 driver identifier.
+ * @note    The driver ICUD12 allocates the timer TIM12 when enabled.
+ */
+#if STM32_ICU_USE_TIM12 || defined(__DOXYGEN__)
+ICUDriver ICUD12;
+#endif
+
+/**
+ * @brief   ICUD15 driver identifier.
+ * @note    The driver ICUD15 allocates the timer TIM15 when enabled.
+ */
+#if STM32_ICU_USE_TIM15 || defined(__DOXYGEN__)
+ICUDriver ICUD15;
+#endif
 /*===========================================================================*/
 /* Driver local variables and types.                                         */
 /*===========================================================================*/
@@ -323,6 +338,48 @@
 #endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */
 #endif /* STM32_ICU_USE_TIM9 */
 
+#if STM32_ICU_USE_TIM12 || defined(__DOXYGEN__)
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+#if !defined(STM32_TIM12_HANDLER)
+#error "STM32_TIM12_HANDLER not defined"
+#endif
+/**
+ * @brief   TIM12 interrupt handler.
+ *
+ * @isr
+ */
+OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) {
+
+  OSAL_IRQ_PROLOGUE();
+
+  icu_lld_serve_interrupt(&ICUD12);
+
+  OSAL_IRQ_EPILOGUE();
+}
+#endif /* !defined(STM32_TIM12_SUPPRESS_ISR) */
+#endif /* STM32_ICU_USE_TIM12 */
+
+#if STM32_ICU_USE_TIM15 || defined(__DOXYGEN__)
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+#if !defined(STM32_TIM15_HANDLER)
+#error "STM32_TIM15_HANDLER not defined"
+#endif
+/**
+ * @brief   TIM15 interrupt handler.
+ *
+ * @isr
+ */
+OSAL_IRQ_HANDLER(STM32_TIM15_HANDLER) {
+
+  OSAL_IRQ_PROLOGUE();
+
+  icu_lld_serve_interrupt(&ICUD15);
+
+  OSAL_IRQ_EPILOGUE();
+}
+#endif /* !defined(STM32_TIM15_SUPPRESS_ISR) */
+#endif /* STM32_ICU_USE_TIM15 */
+
 /*===========================================================================*/
 /* Driver exported functions.                                                */
 /*===========================================================================*/
@@ -375,6 +432,18 @@
   icuObjectInit(&ICUD9);
   ICUD9.tim = STM32_TIM9;
 #endif
+
+#if STM32_ICU_USE_TIM12
+  /* Driver initialization.*/
+  icuObjectInit(&ICUD12);
+  ICUD12.tim = STM32_TIM12;
+#endif
+
+#if STM32_ICU_USE_TIM15
+  /* Driver initialization.*/
+  icuObjectInit(&ICUD15);
+  ICUD15.tim = STM32_TIM15;
+#endif
 }
 
 /**
@@ -499,6 +568,36 @@
 #endif
     }
 #endif
+
+#if STM32_ICU_USE_TIM12
+    if (&ICUD12 == icup) {
+      rccEnableTIM12(true);
+      rccResetTIM12();
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+      nvicEnableVector(STM32_TIM12_NUMBER, STM32_ICU_TIM12_IRQ_PRIORITY);
+#endif
+#if defined(STM32_TIM12CLK)
+      icup->clock = STM32_TIM12CLK;
+#else
+      icup->clock = STM32_TIMCLK1;
+#endif
+    }
+#endif
+
+#if STM32_ICU_USE_TIM15
+    if (&ICUD15 == icup) {
+      rccEnableTIM15(true);
+      rccResetTIM15();
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+      nvicEnableVector(STM32_TIM15_NUMBER, STM32_ICU_TIM15_IRQ_PRIORITY);
+#endif
+#if defined(STM32_TIM15CLK)
+      icup->clock = STM32_TIM15CLK;
+#else
+      icup->clock = STM32_TIMCLK2;
+#endif
+    }
+#endif
   }
   else {
     /* Driver re-configuration scenario, it must be stopped first.*/
@@ -650,6 +749,24 @@
       rccDisableTIM9();
     }
 #endif
+
+#if STM32_ICU_USE_TIM12
+    if (&ICUD12 == icup) {
+#if !defined(STM32_TIM12_SUPPRESS_ISR)
+      nvicDisableVector(STM32_TIM12_NUMBER);
+#endif
+      rccDisableTIM12();
+    }
+#endif
+
+#if STM32_ICU_USE_TIM15
+    if (&ICUD15 == icup) {
+#if !defined(STM32_TIM15_SUPPRESS_ISR)
+      nvicDisableVector(STM32_TIM15_NUMBER);
+#endif
+      rccDisableTIM15();
+    }
+#endif
   }
 }
 
Index: hal_icu_lld.h
===================================================================
--- hal_icu_lld.h   (revision 12394)
+++ hal_icu_lld.h   (working copy)
@@ -44,7 +44,7 @@
 /**
  * @brief   ICUD1 driver enable switch.
  * @details If set to @p TRUE the support for ICUD1 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM1) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM1                  FALSE
@@ -53,7 +53,7 @@
 /**
  * @brief   ICUD2 driver enable switch.
  * @details If set to @p TRUE the support for ICUD2 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM2) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM2                  FALSE
@@ -62,7 +62,7 @@
 /**
  * @brief   ICUD3 driver enable switch.
  * @details If set to @p TRUE the support for ICUD3 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM3) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM3                  FALSE
@@ -71,7 +71,7 @@
 /**
  * @brief   ICUD4 driver enable switch.
  * @details If set to @p TRUE the support for ICUD4 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM4) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM4                  FALSE
@@ -80,7 +80,7 @@
 /**
  * @brief   ICUD5 driver enable switch.
  * @details If set to @p TRUE the support for ICUD5 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM5) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM5                  FALSE
@@ -89,7 +89,7 @@
 /**
  * @brief   ICUD8 driver enable switch.
  * @details If set to @p TRUE the support for ICUD8 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM8) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM8                  FALSE
@@ -98,7 +98,7 @@
 /**
  * @brief   ICUD9 driver enable switch.
  * @details If set to @p TRUE the support for ICUD9 is included.
- * @note    The default is @p TRUE.
+ * @note    The default is @p FALSE.
  */
 #if !defined(STM32_ICU_USE_TIM9) || defined(__DOXYGEN__)
 #define STM32_ICU_USE_TIM9                  FALSE
@@ -105,6 +105,24 @@
 #endif
 
 /**
+ * @brief   ICUD12 driver enable switch.
+ * @details If set to @p TRUE the support for ICUD12 is included.
+ * @note    The default is @p FALSE.
+ */
+#if !defined(STM32_ICU_USE_TIM12) || defined(__DOXYGEN__)
+#define STM32_ICU_USE_TIM12                  FALSE
+#endif
+
+/**
+ * @brief   ICUD15 driver enable switch.
+ * @details If set to @p TRUE the support for ICUD15 is included.
+ * @note    The default is @p FALSE.
+ */
+#if !defined(STM32_ICU_USE_TIM15) || defined(__DOXYGEN__)
+#define STM32_ICU_USE_TIM15                  FALSE
+#endif
+
+/**
  * @brief   ICUD1 interrupt priority level setting.
  */
 #if !defined(STM32_ICU_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
@@ -152,6 +170,20 @@
 #if !defined(STM32_ICU_TIM9_IRQ_PRIORITY) || defined(__DOXYGEN__)
 #define STM32_ICU_TIM9_IRQ_PRIORITY         7
 #endif
+
+/**
+ * @brief   ICUD12 interrupt priority level setting.
+ */
+#if !defined(STM32_ICU_TIM12_IRQ_PRIORITY) || defined(__DOXYGEN__)
+#define STM32_ICU_TIM12_IRQ_PRIORITY        7
+#endif
+
+/**
+ * @brief   ICUD15 interrupt priority level setting.
+ */
+#if !defined(STM32_ICU_TIM15_IRQ_PRIORITY) || defined(__DOXYGEN__)
+#define STM32_ICU_TIM15_IRQ_PRIORITY         7
+#endif
 /** @} */
 
 /*===========================================================================*/
@@ -186,6 +218,14 @@
 #define STM32_HAS_TIM9                      FALSE
 #endif
 
+#if !defined(STM32_HAS_TIM12)
+#define STM32_HAS_TIM12                     FALSE
+#endif
+
+#if !defined(STM32_HAS_TIM15)
+#define STM32_HAS_TIM15                     FALSE
+
+#endif
 #if STM32_ICU_USE_TIM1 && !STM32_HAS_TIM1
 #error "TIM1 not present in the selected device"
 #endif
@@ -214,10 +254,19 @@
 #error "TIM9 not present in the selected device"
 #endif
 
+#if STM32_ICU_USE_TIM12 && !STM32_HAS_TIM12
+#error "TIM12 not present in the selected device"
+#endif
+
+#if STM32_ICU_USE_TIM15 && !STM32_HAS_TIM15
+#error "TIM15 not present in the selected device"
+#endif
+
 #if !STM32_ICU_USE_TIM1 && !STM32_ICU_USE_TIM2 &&                           \
     !STM32_ICU_USE_TIM3 && !STM32_ICU_USE_TIM4 &&                           \
     !STM32_ICU_USE_TIM5 && !STM32_ICU_USE_TIM8 &&                           \
-    !STM32_ICU_USE_TIM9
+    !STM32_ICU_USE_TIM9 && !STM32_ICU_USE_TIM12 &&                          \
+    !STM32_ICU_USE_TIM15
 #error "ICU driver activated but no TIM peripheral assigned"
 #endif
 
@@ -278,6 +327,22 @@
 #endif
 #endif
 
+#if STM32_ICU_USE_TIM12
+#if defined(STM32_TIM12_IS_USED)
+#error "ICUD12 requires TIM12 but the timer is already used"
+#else
+#define STM32_TIM12_IS_USED
+#endif
+#endif
+
+#if STM32_ICU_USE_TIM15
+#if defined(STM32_TIM15_IS_USED)
+#error "ICUD15 requires TIM15 but the timer is already used"
+#else
+#define STM32_TIM15_IS_USED
+#endif
+#endif
+
 /* IRQ priority checks.*/
 #if STM32_ICU_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) &&              \
     !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM1_IRQ_PRIORITY)
@@ -314,6 +379,16 @@
 #error "Invalid IRQ priority assigned to TIM9"
 #endif
 
+#if STM32_ICU_USE_TIM12 && !defined(STM32_TIM12_SUPPRESS_ISR) &&            \
+    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM12_IRQ_PRIORITY)
+#error "Invalid IRQ priority assigned to TIM12"
+#endif
+
+#if STM32_ICU_USE_TIM15 && !defined(STM32_TIM15_SUPPRESS_ISR) &&              \
+    !OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM15_IRQ_PRIORITY)
+#error "Invalid IRQ priority assigned to TIM9"
+#endif
+
 /*===========================================================================*/
 /* Driver data structures and types.                                         */
 /*===========================================================================*/
@@ -492,6 +567,14 @@
 extern ICUDriver ICUD9;
 #endif
 
+#if STM32_ICU_USE_TIM12 && !defined(__DOXYGEN__)
+extern ICUDriver ICUD12;
+#endif
+
+#if STM32_ICU_USE_TIM15 && !defined(__DOXYGEN__)
+extern ICUDriver ICUD15;
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
User avatar
Giovanni
Site Admin
Posts: 14892
Joined: Wed May 27, 2009 8:48 am
Has thanked: 1202 times
Been thanked: 996 times

Re: Add support for TIM12 as well as TIM15 to ICU

Post by Giovanni »

Hi,

See here: viewtopic.php?f=3&t=4956

Giovanni
Post Reply