STM32 TIM drivers enhancements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8252 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
fbd03ea88c
commit
ac6f72603a
|
@ -138,26 +138,12 @@ GPTDriver GPTD14;
|
||||||
/* Driver local functions. */
|
/* Driver local functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Shared IRQ handler.
|
|
||||||
*
|
|
||||||
* @param[in] gptp pointer to a @p GPTDriver object
|
|
||||||
*/
|
|
||||||
static void gpt_lld_serve_interrupt(GPTDriver *gptp) {
|
|
||||||
|
|
||||||
gptp->tim->SR = 0;
|
|
||||||
if (gptp->state == GPT_ONESHOT) {
|
|
||||||
gptp->state = GPT_READY; /* Back in GPT_READY state. */
|
|
||||||
gpt_lld_stop_timer(gptp); /* Timer automatically stopped. */
|
|
||||||
}
|
|
||||||
gptp->config->callback(gptp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver interrupt handlers. */
|
/* Driver interrupt handlers. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM1
|
#if STM32_GPT_USE_TIM1 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM1_UP_HANDLER)
|
#if !defined(STM32_TIM1_UP_HANDLER)
|
||||||
#error "STM32_TIM1_UP_HANDLER not defined"
|
#error "STM32_TIM1_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -174,9 +160,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM1_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM1 */
|
#endif /* STM32_GPT_USE_TIM1 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM2
|
#if STM32_GPT_USE_TIM2 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM2_HANDLER)
|
#if !defined(STM32_TIM2_HANDLER)
|
||||||
#error "STM32_TIM2_HANDLER not defined"
|
#error "STM32_TIM2_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -193,9 +181,11 @@ OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM2_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM2 */
|
#endif /* STM32_GPT_USE_TIM2 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM3
|
#if STM32_GPT_USE_TIM3 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM3_HANDLER)
|
#if !defined(STM32_TIM3_HANDLER)
|
||||||
#error "STM32_TIM3_HANDLER not defined"
|
#error "STM32_TIM3_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -212,9 +202,11 @@ OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM3_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM3 */
|
#endif /* STM32_GPT_USE_TIM3 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM4
|
#if STM32_GPT_USE_TIM4 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM4_HANDLER)
|
#if !defined(STM32_TIM4_HANDLER)
|
||||||
#error "STM32_TIM4_HANDLER not defined"
|
#error "STM32_TIM4_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,9 +223,11 @@ OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM4_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM4 */
|
#endif /* STM32_GPT_USE_TIM4 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM5
|
#if STM32_GPT_USE_TIM5 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM5_HANDLER)
|
#if !defined(STM32_TIM5_HANDLER)
|
||||||
#error "STM32_TIM5_HANDLER not defined"
|
#error "STM32_TIM5_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -250,9 +244,11 @@ OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM5_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM5 */
|
#endif /* STM32_GPT_USE_TIM5 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM6
|
#if STM32_GPT_USE_TIM6 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM6_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM6_HANDLER)
|
#if !defined(STM32_TIM6_HANDLER)
|
||||||
#error "STM32_TIM6_HANDLER not defined"
|
#error "STM32_TIM6_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -269,9 +265,11 @@ OSAL_IRQ_HANDLER(STM32_TIM6_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM6_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM6 */
|
#endif /* STM32_GPT_USE_TIM6 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM7
|
#if STM32_GPT_USE_TIM7 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM7_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM7_HANDLER)
|
#if !defined(STM32_TIM7_HANDLER)
|
||||||
#error "STM32_TIM7_HANDLER not defined"
|
#error "STM32_TIM7_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -288,9 +286,11 @@ OSAL_IRQ_HANDLER(STM32_TIM7_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM7_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM7 */
|
#endif /* STM32_GPT_USE_TIM7 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM8
|
#if STM32_GPT_USE_TIM8 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM8_UP_HANDLER)
|
#if !defined(STM32_TIM8_UP_HANDLER)
|
||||||
#error "STM32_TIM8_UP_HANDLER not defined"
|
#error "STM32_TIM8_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -307,9 +307,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM8_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM8 */
|
#endif /* STM32_GPT_USE_TIM8 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM9
|
#if STM32_GPT_USE_TIM9 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM9_HANDLER)
|
#if !defined(STM32_TIM9_HANDLER)
|
||||||
#error "STM32_TIM9_HANDLER not defined"
|
#error "STM32_TIM9_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -326,9 +328,11 @@ OSAL_IRQ_HANDLER(STM32_TIM9_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM9 */
|
#endif /* STM32_GPT_USE_TIM9 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM11
|
#if STM32_GPT_USE_TIM11 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM11_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM11_HANDLER)
|
#if !defined(STM32_TIM11_HANDLER)
|
||||||
#error "STM32_TIM11_HANDLER not defined"
|
#error "STM32_TIM11_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -345,9 +349,11 @@ OSAL_IRQ_HANDLER(STM32_TIM11_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM11_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM11 */
|
#endif /* STM32_GPT_USE_TIM11 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM12
|
#if STM32_GPT_USE_TIM12 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM12_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM12_HANDLER)
|
#if !defined(STM32_TIM12_HANDLER)
|
||||||
#error "STM32_TIM12_HANDLER not defined"
|
#error "STM32_TIM12_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -364,9 +370,11 @@ OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM12_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM12 */
|
#endif /* STM32_GPT_USE_TIM12 */
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM14
|
#if STM32_GPT_USE_TIM14 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM14_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM14_HANDLER)
|
#if !defined(STM32_TIM14_HANDLER)
|
||||||
#error "STM32_TIM14_HANDLER not defined"
|
#error "STM32_TIM14_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -383,6 +391,7 @@ OSAL_IRQ_HANDLER(STM32_TIM14_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM14_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_GPT_USE_TIM14 */
|
#endif /* STM32_GPT_USE_TIM14 */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -485,7 +494,9 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD1 == gptp) {
|
if (&GPTD1 == gptp) {
|
||||||
rccEnableTIM1(FALSE);
|
rccEnableTIM1(FALSE);
|
||||||
rccResetTIM1();
|
rccResetTIM1();
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_GPT_TIM1_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_GPT_TIM1_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM1CLK)
|
#if defined(STM32_TIM1CLK)
|
||||||
gptp->clock = STM32_TIM1CLK;
|
gptp->clock = STM32_TIM1CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -493,28 +504,49 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM2
|
#if STM32_GPT_USE_TIM2
|
||||||
if (&GPTD2 == gptp) {
|
if (&GPTD2 == gptp) {
|
||||||
rccEnableTIM2(FALSE);
|
rccEnableTIM2(FALSE);
|
||||||
rccResetTIM2();
|
rccResetTIM2();
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM2_NUMBER, STM32_GPT_TIM2_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM2_NUMBER, STM32_GPT_TIM2_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM2CLK)
|
||||||
|
gptp->clock = STM32_TIM2CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM3
|
#if STM32_GPT_USE_TIM3
|
||||||
if (&GPTD3 == gptp) {
|
if (&GPTD3 == gptp) {
|
||||||
rccEnableTIM3(FALSE);
|
rccEnableTIM3(FALSE);
|
||||||
rccResetTIM3();
|
rccResetTIM3();
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM3_NUMBER, STM32_GPT_TIM3_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM3_NUMBER, STM32_GPT_TIM3_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM3CLK)
|
||||||
|
gptp->clock = STM32_TIM3CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM4
|
#if STM32_GPT_USE_TIM4
|
||||||
if (&GPTD4 == gptp) {
|
if (&GPTD4 == gptp) {
|
||||||
rccEnableTIM4(FALSE);
|
rccEnableTIM4(FALSE);
|
||||||
rccResetTIM4();
|
rccResetTIM4();
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM4_NUMBER, STM32_GPT_TIM4_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM4_NUMBER, STM32_GPT_TIM4_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM4CLK)
|
||||||
|
gptp->clock = STM32_TIM4CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -522,8 +554,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD5 == gptp) {
|
if (&GPTD5 == gptp) {
|
||||||
rccEnableTIM5(FALSE);
|
rccEnableTIM5(FALSE);
|
||||||
rccResetTIM5();
|
rccResetTIM5();
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM5_NUMBER, STM32_GPT_TIM5_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM5_NUMBER, STM32_GPT_TIM5_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM5CLK)
|
||||||
|
gptp->clock = STM32_TIM5CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -531,8 +569,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD6 == gptp) {
|
if (&GPTD6 == gptp) {
|
||||||
rccEnableTIM6(FALSE);
|
rccEnableTIM6(FALSE);
|
||||||
rccResetTIM6();
|
rccResetTIM6();
|
||||||
|
#if !defined(STM32_TIM6_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM6_NUMBER, STM32_GPT_TIM6_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM6_NUMBER, STM32_GPT_TIM6_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM6CLK)
|
||||||
|
gptp->clock = STM32_TIM6CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -540,8 +584,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD7 == gptp) {
|
if (&GPTD7 == gptp) {
|
||||||
rccEnableTIM7(FALSE);
|
rccEnableTIM7(FALSE);
|
||||||
rccResetTIM7();
|
rccResetTIM7();
|
||||||
|
#if !defined(STM32_TIM7_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM7_NUMBER, STM32_GPT_TIM7_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM7_NUMBER, STM32_GPT_TIM7_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM7CLK)
|
||||||
|
gptp->clock = STM32_TIM7CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -549,7 +599,9 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD8 == gptp) {
|
if (&GPTD8 == gptp) {
|
||||||
rccEnableTIM8(FALSE);
|
rccEnableTIM8(FALSE);
|
||||||
rccResetTIM8();
|
rccResetTIM8();
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_GPT_TIM8_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_GPT_TIM8_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM8CLK)
|
#if defined(STM32_TIM8CLK)
|
||||||
gptp->clock = STM32_TIM8CLK;
|
gptp->clock = STM32_TIM8CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -562,8 +614,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD9 == gptp) {
|
if (&GPTD9 == gptp) {
|
||||||
rccEnableTIM9(FALSE);
|
rccEnableTIM9(FALSE);
|
||||||
rccResetTIM9();
|
rccResetTIM9();
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM9_NUMBER, STM32_GPT_TIM9_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM9_NUMBER, STM32_GPT_TIM9_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM9CLK)
|
||||||
|
gptp->clock = STM32_TIM9CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK2;
|
gptp->clock = STM32_TIMCLK2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -571,8 +629,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD11 == gptp) {
|
if (&GPTD11 == gptp) {
|
||||||
rccEnableTIM11(FALSE);
|
rccEnableTIM11(FALSE);
|
||||||
rccResetTIM11();
|
rccResetTIM11();
|
||||||
|
#if !defined(STM32_TIM11_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM11_NUMBER, STM32_GPT_TIM11_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM11_NUMBER, STM32_GPT_TIM11_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM11CLK)
|
||||||
|
gptp->clock = STM32_TIM11CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK2;
|
gptp->clock = STM32_TIMCLK2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -580,8 +644,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD12 == gptp) {
|
if (&GPTD12 == gptp) {
|
||||||
rccEnableTIM12(FALSE);
|
rccEnableTIM12(FALSE);
|
||||||
rccResetTIM12();
|
rccResetTIM12();
|
||||||
|
#if !defined(STM32_TIM12_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM12_NUMBER, STM32_GPT_TIM12_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM12_NUMBER, STM32_GPT_TIM12_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM12CLK)
|
||||||
|
gptp->clock = STM32_TIM12CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -589,8 +659,14 @@ void gpt_lld_start(GPTDriver *gptp) {
|
||||||
if (&GPTD14 == gptp) {
|
if (&GPTD14 == gptp) {
|
||||||
rccEnableTIM14(FALSE);
|
rccEnableTIM14(FALSE);
|
||||||
rccResetTIM14();
|
rccResetTIM14();
|
||||||
|
#if !defined(STM32_TIM14_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM14_NUMBER, STM32_GPT_TIM14_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM14_NUMBER, STM32_GPT_TIM14_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM14CLK)
|
||||||
|
gptp->clock = STM32_TIM14CLK;
|
||||||
|
#else
|
||||||
gptp->clock = STM32_TIMCLK1;
|
gptp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -625,73 +701,108 @@ void gpt_lld_stop(GPTDriver *gptp) {
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM1
|
#if STM32_GPT_USE_TIM1
|
||||||
if (&GPTD1 == gptp) {
|
if (&GPTD1 == gptp) {
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM1(FALSE);
|
rccDisableTIM1(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM2
|
#if STM32_GPT_USE_TIM2
|
||||||
if (&GPTD2 == gptp) {
|
if (&GPTD2 == gptp) {
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM2_NUMBER);
|
nvicDisableVector(STM32_TIM2_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM2(FALSE);
|
rccDisableTIM2(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM3
|
#if STM32_GPT_USE_TIM3
|
||||||
if (&GPTD3 == gptp) {
|
if (&GPTD3 == gptp) {
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM3_NUMBER);
|
nvicDisableVector(STM32_TIM3_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM3(FALSE);
|
rccDisableTIM3(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM4
|
#if STM32_GPT_USE_TIM4
|
||||||
if (&GPTD4 == gptp) {
|
if (&GPTD4 == gptp) {
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM4_NUMBER);
|
nvicDisableVector(STM32_TIM4_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM4(FALSE);
|
rccDisableTIM4(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM5
|
#if STM32_GPT_USE_TIM5
|
||||||
if (&GPTD5 == gptp) {
|
if (&GPTD5 == gptp) {
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM5_NUMBER);
|
nvicDisableVector(STM32_TIM5_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM5(FALSE);
|
rccDisableTIM5(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM6
|
#if STM32_GPT_USE_TIM6
|
||||||
if (&GPTD6 == gptp) {
|
if (&GPTD6 == gptp) {
|
||||||
|
#if !defined(STM32_TIM6_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM6_NUMBER);
|
nvicDisableVector(STM32_TIM6_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM6(FALSE);
|
rccDisableTIM6(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM7
|
#if STM32_GPT_USE_TIM7
|
||||||
if (&GPTD7 == gptp) {
|
if (&GPTD7 == gptp) {
|
||||||
|
#if !defined(STM32_TIM7_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM7_NUMBER);
|
nvicDisableVector(STM32_TIM7_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM7(FALSE);
|
rccDisableTIM7(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM8
|
#if STM32_GPT_USE_TIM8
|
||||||
if (&GPTD8 == gptp) {
|
if (&GPTD8 == gptp) {
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM8(FALSE);
|
rccDisableTIM8(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM9
|
#if STM32_GPT_USE_TIM9
|
||||||
if (&GPTD9 == gptp) {
|
if (&GPTD9 == gptp) {
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM9_NUMBER);
|
nvicDisableVector(STM32_TIM9_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM9(FALSE);
|
rccDisableTIM9(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM11
|
#if STM32_GPT_USE_TIM11
|
||||||
if (&GPTD11 == gptp) {
|
if (&GPTD11 == gptp) {
|
||||||
|
#if !defined(STM32_TIM11_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM11_NUMBER);
|
nvicDisableVector(STM32_TIM11_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM11(FALSE);
|
rccDisableTIM11(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM12
|
#if STM32_GPT_USE_TIM12
|
||||||
if (&GPTD12 == gptp) {
|
if (&GPTD12 == gptp) {
|
||||||
|
#if !defined(STM32_TIM12_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM12_NUMBER);
|
nvicDisableVector(STM32_TIM12_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM12(FALSE);
|
rccDisableTIM12(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM14
|
#if STM32_GPT_USE_TIM14
|
||||||
if (&GPTD14 == gptp) {
|
if (&GPTD14 == gptp) {
|
||||||
|
#if !defined(STM32_TIM14_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM14_NUMBER);
|
nvicDisableVector(STM32_TIM14_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM14(FALSE);
|
rccDisableTIM14(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -758,6 +869,23 @@ void gpt_lld_polled_delay(GPTDriver *gptp, gptcnt_t interval) {
|
||||||
gptp->tim->SR = 0; /* Clear pending IRQs. */
|
gptp->tim->SR = 0; /* Clear pending IRQs. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Shared IRQ handler.
|
||||||
|
*
|
||||||
|
* @param[in] gptp pointer to a @p GPTDriver object
|
||||||
|
*
|
||||||
|
* @notapi
|
||||||
|
*/
|
||||||
|
void gpt_lld_serve_interrupt(GPTDriver *gptp) {
|
||||||
|
|
||||||
|
gptp->tim->SR = 0;
|
||||||
|
if (gptp->state == GPT_ONESHOT) {
|
||||||
|
gptp->state = GPT_READY; /* Back in GPT_READY state. */
|
||||||
|
gpt_lld_stop_timer(gptp); /* Timer automatically stopped. */
|
||||||
|
}
|
||||||
|
gptp->config->callback(gptp);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* HAL_USE_GPT */
|
#endif /* HAL_USE_GPT */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -393,62 +393,62 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* IRQ priority checks.*/
|
/* IRQ priority checks.*/
|
||||||
#if STM32_GPT_USE_TIM1 && \
|
#if STM32_GPT_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM1_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM1_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM1"
|
#error "Invalid IRQ priority assigned to TIM1"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM2 && \
|
#if STM32_GPT_USE_TIM2 && !defined(STM32_TIM2_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM2_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM2_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM2"
|
#error "Invalid IRQ priority assigned to TIM2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM3 && \
|
#if STM32_GPT_USE_TIM3 && !defined(STM32_TIM3_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM3_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM3_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM3"
|
#error "Invalid IRQ priority assigned to TIM3"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM4 && \
|
#if STM32_GPT_USE_TIM4 && !defined(STM32_TIM_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM4_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM4_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM4"
|
#error "Invalid IRQ priority assigned to TIM4"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM5 && \
|
#if STM32_GPT_USE_TIM5 && !defined(STM32_TIM5_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM5_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM5_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM5"
|
#error "Invalid IRQ priority assigned to TIM5"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM6 && \
|
#if STM32_GPT_USE_TIM6 && !defined(STM32_TIM6_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM6_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM6_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM6"
|
#error "Invalid IRQ priority assigned to TIM6"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM7 && \
|
#if STM32_GPT_USE_TIM7 && !defined(STM32_TIM7_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM7_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM7_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM7"
|
#error "Invalid IRQ priority assigned to TIM7"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM8 && \
|
#if STM32_GPT_USE_TIM8 && !defined(STM32_TIM8_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM8_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM8_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM8"
|
#error "Invalid IRQ priority assigned to TIM8"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM9 && \
|
#if STM32_GPT_USE_TIM9 && !defined(STM32_TIM9_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM9_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM9_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM9"
|
#error "Invalid IRQ priority assigned to TIM9"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM11 && \
|
#if STM32_GPT_USE_TIM11 && !defined(STM32_TIM11_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM11_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM11_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM11"
|
#error "Invalid IRQ priority assigned to TIM11"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM12 && \
|
#if STM32_GPT_USE_TIM12 && !defined(STM32_TIM12_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM12_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM12_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM12"
|
#error "Invalid IRQ priority assigned to TIM12"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_GPT_USE_TIM14 && \
|
#if STM32_GPT_USE_TIM14 && !defined(STM32_TIM14_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM14_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_GPT_TIM14_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM14"
|
#error "Invalid IRQ priority assigned to TIM14"
|
||||||
#endif
|
#endif
|
||||||
|
@ -629,6 +629,7 @@ extern "C" {
|
||||||
void gpt_lld_start_timer(GPTDriver *gptp, gptcnt_t period);
|
void gpt_lld_start_timer(GPTDriver *gptp, gptcnt_t period);
|
||||||
void gpt_lld_stop_timer(GPTDriver *gptp);
|
void gpt_lld_stop_timer(GPTDriver *gptp);
|
||||||
void gpt_lld_polled_delay(GPTDriver *gptp, gptcnt_t interval);
|
void gpt_lld_polled_delay(GPTDriver *gptp, gptcnt_t interval);
|
||||||
|
void gpt_lld_serve_interrupt(GPTDriver *gptp);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -138,46 +138,17 @@ static bool icu_lld_wait_edge(ICUDriver *icup) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Shared IRQ handler.
|
|
||||||
*
|
|
||||||
* @param[in] icup pointer to the @p ICUDriver object
|
|
||||||
*/
|
|
||||||
static void icu_lld_serve_interrupt(ICUDriver *icup) {
|
|
||||||
uint32_t sr;
|
|
||||||
|
|
||||||
sr = icup->tim->SR;
|
|
||||||
sr &= icup->tim->DIER & STM32_TIM_DIER_IRQ_MASK;
|
|
||||||
icup->tim->SR = ~sr;
|
|
||||||
if (icup->config->channel == ICU_CHANNEL_1) {
|
|
||||||
if ((sr & STM32_TIM_SR_CC2IF) != 0)
|
|
||||||
_icu_isr_invoke_width_cb(icup);
|
|
||||||
if ((sr & STM32_TIM_SR_CC1IF) != 0)
|
|
||||||
_icu_isr_invoke_period_cb(icup);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ((sr & STM32_TIM_SR_CC1IF) != 0)
|
|
||||||
_icu_isr_invoke_width_cb(icup);
|
|
||||||
if ((sr & STM32_TIM_SR_CC2IF) != 0)
|
|
||||||
_icu_isr_invoke_period_cb(icup);
|
|
||||||
}
|
|
||||||
if ((sr & STM32_TIM_SR_UIF) != 0)
|
|
||||||
_icu_isr_invoke_overflow_cb(icup);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver interrupt handlers. */
|
/* Driver interrupt handlers. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM1
|
#if STM32_ICU_USE_TIM1 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM1_UP_HANDLER)
|
#if !defined(STM32_TIM1_UP_HANDLER)
|
||||||
#error "STM32_TIM1_UP_HANDLER not defined"
|
#error "STM32_TIM1_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM1 compare interrupt handler.
|
* @brief TIM1 compare interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -195,9 +166,6 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) {
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM1 compare interrupt handler.
|
* @brief TIM1 compare interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -209,17 +177,16 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM1_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM1 */
|
#endif /* STM32_ICU_USE_TIM1 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM2
|
#if STM32_ICU_USE_TIM2 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM2_HANDLER)
|
#if !defined(STM32_TIM2_HANDLER)
|
||||||
#error "STM32_TIM2_HANDLER not defined"
|
#error "STM32_TIM2_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM2 interrupt handler.
|
* @brief TIM2 interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -231,17 +198,16 @@ OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM2_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM2 */
|
#endif /* STM32_ICU_USE_TIM2 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM3
|
#if STM32_ICU_USE_TIM3 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM3_HANDLER)
|
#if !defined(STM32_TIM3_HANDLER)
|
||||||
#error "STM32_TIM3_HANDLER not defined"
|
#error "STM32_TIM3_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM3 interrupt handler.
|
* @brief TIM3 interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -253,17 +219,16 @@ OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM3_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM3 */
|
#endif /* STM32_ICU_USE_TIM3 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM4
|
#if STM32_ICU_USE_TIM4 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM4_HANDLER)
|
#if !defined(STM32_TIM4_HANDLER)
|
||||||
#error "STM32_TIM4_HANDLER not defined"
|
#error "STM32_TIM4_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM4 interrupt handler.
|
* @brief TIM4 interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -275,17 +240,16 @@ OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM4_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM4 */
|
#endif /* STM32_ICU_USE_TIM4 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM5
|
#if STM32_ICU_USE_TIM5 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM5_HANDLER)
|
#if !defined(STM32_TIM5_HANDLER)
|
||||||
#error "STM32_TIM5_HANDLER not defined"
|
#error "STM32_TIM5_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM5 interrupt handler.
|
* @brief TIM5 interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -297,17 +261,16 @@ OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM5_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM5 */
|
#endif /* STM32_ICU_USE_TIM5 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM8
|
#if STM32_ICU_USE_TIM8 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM8_UP_HANDLER)
|
#if !defined(STM32_TIM8_UP_HANDLER)
|
||||||
#error "STM32_TIM8_UP_HANDLER not defined"
|
#error "STM32_TIM8_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM8 compare interrupt handler.
|
* @brief TIM8 compare interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -325,9 +288,6 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) {
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM8 compare interrupt handler.
|
* @brief TIM8 compare interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -339,17 +299,16 @@ OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM8_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM8 */
|
#endif /* STM32_ICU_USE_TIM8 */
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM9
|
#if STM32_ICU_USE_TIM9 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM9_HANDLER)
|
#if !defined(STM32_TIM9_HANDLER)
|
||||||
#error "STM32_TIM9_HANDLER not defined"
|
#error "STM32_TIM9_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
* @brief TIM9 interrupt handler.
|
* @brief TIM9 interrupt handler.
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
|
@ -361,6 +320,7 @@ OSAL_IRQ_HANDLER(STM32_TIM9_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_ICU_USE_TIM9 */
|
#endif /* STM32_ICU_USE_TIM9 */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -437,8 +397,10 @@ void icu_lld_start(ICUDriver *icup) {
|
||||||
if (&ICUD1 == icup) {
|
if (&ICUD1 == icup) {
|
||||||
rccEnableTIM1(FALSE);
|
rccEnableTIM1(FALSE);
|
||||||
rccResetTIM1();
|
rccResetTIM1();
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_ICU_TIM1_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_ICU_TIM1_IRQ_PRIORITY);
|
||||||
nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_ICU_TIM1_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_ICU_TIM1_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM1CLK)
|
#if defined(STM32_TIM1CLK)
|
||||||
icup->clock = STM32_TIM1CLK;
|
icup->clock = STM32_TIM1CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -446,44 +408,75 @@ void icu_lld_start(ICUDriver *icup) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM2
|
#if STM32_ICU_USE_TIM2
|
||||||
if (&ICUD2 == icup) {
|
if (&ICUD2 == icup) {
|
||||||
rccEnableTIM2(FALSE);
|
rccEnableTIM2(FALSE);
|
||||||
rccResetTIM2();
|
rccResetTIM2();
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM2_NUMBER, STM32_ICU_TIM2_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM2_NUMBER, STM32_ICU_TIM2_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM2CLK)
|
||||||
|
icup->clock = STM32_TIM2CLK;
|
||||||
|
#else
|
||||||
icup->clock = STM32_TIMCLK1;
|
icup->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM3
|
#if STM32_ICU_USE_TIM3
|
||||||
if (&ICUD3 == icup) {
|
if (&ICUD3 == icup) {
|
||||||
rccEnableTIM3(FALSE);
|
rccEnableTIM3(FALSE);
|
||||||
rccResetTIM3();
|
rccResetTIM3();
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM3_NUMBER, STM32_ICU_TIM3_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM3_NUMBER, STM32_ICU_TIM3_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM3CLK)
|
||||||
|
icup->clock = STM32_TIM3CLK;
|
||||||
|
#else
|
||||||
icup->clock = STM32_TIMCLK1;
|
icup->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM4
|
#if STM32_ICU_USE_TIM4
|
||||||
if (&ICUD4 == icup) {
|
if (&ICUD4 == icup) {
|
||||||
rccEnableTIM4(FALSE);
|
rccEnableTIM4(FALSE);
|
||||||
rccResetTIM4();
|
rccResetTIM4();
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM4_NUMBER, STM32_ICU_TIM4_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM4_NUMBER, STM32_ICU_TIM4_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM4CLK)
|
||||||
|
icup->clock = STM32_TIM4CLK;
|
||||||
|
#else
|
||||||
icup->clock = STM32_TIMCLK1;
|
icup->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM5
|
#if STM32_ICU_USE_TIM5
|
||||||
if (&ICUD5 == icup) {
|
if (&ICUD5 == icup) {
|
||||||
rccEnableTIM5(FALSE);
|
rccEnableTIM5(FALSE);
|
||||||
rccResetTIM5();
|
rccResetTIM5();
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM5_NUMBER, STM32_ICU_TIM5_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM5_NUMBER, STM32_ICU_TIM5_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM5CLK)
|
||||||
|
icup->clock = STM32_TIM5CLK;
|
||||||
|
#else
|
||||||
icup->clock = STM32_TIMCLK1;
|
icup->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM8
|
#if STM32_ICU_USE_TIM8
|
||||||
if (&ICUD8 == icup) {
|
if (&ICUD8 == icup) {
|
||||||
rccEnableTIM8(FALSE);
|
rccEnableTIM8(FALSE);
|
||||||
rccResetTIM8();
|
rccResetTIM8();
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_ICU_TIM8_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_ICU_TIM8_IRQ_PRIORITY);
|
||||||
nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_ICU_TIM8_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_ICU_TIM8_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM8CLK)
|
#if defined(STM32_TIM8CLK)
|
||||||
icup->clock = STM32_TIM8CLK;
|
icup->clock = STM32_TIM8CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -491,12 +484,19 @@ void icu_lld_start(ICUDriver *icup) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM9
|
#if STM32_ICU_USE_TIM9
|
||||||
if (&ICUD9 == icup) {
|
if (&ICUD9 == icup) {
|
||||||
rccEnableTIM9(FALSE);
|
rccEnableTIM9(FALSE);
|
||||||
rccResetTIM9();
|
rccResetTIM9();
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM9_NUMBER, STM32_ICU_TIM9_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM9_NUMBER, STM32_ICU_TIM9_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM9CLK)
|
||||||
|
icup->clock = STM32_TIM9CLK;
|
||||||
|
#else
|
||||||
icup->clock = STM32_TIMCLK2;
|
icup->clock = STM32_TIMCLK2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -588,45 +588,65 @@ void icu_lld_stop(ICUDriver *icup) {
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM1
|
#if STM32_ICU_USE_TIM1
|
||||||
if (&ICUD1 == icup) {
|
if (&ICUD1 == icup) {
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
||||||
nvicDisableVector(STM32_TIM1_CC_NUMBER);
|
nvicDisableVector(STM32_TIM1_CC_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM1(FALSE);
|
rccDisableTIM1(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM2
|
#if STM32_ICU_USE_TIM2
|
||||||
if (&ICUD2 == icup) {
|
if (&ICUD2 == icup) {
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM2_NUMBER);
|
nvicDisableVector(STM32_TIM2_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM2(FALSE);
|
rccDisableTIM2(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM3
|
#if STM32_ICU_USE_TIM3
|
||||||
if (&ICUD3 == icup) {
|
if (&ICUD3 == icup) {
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM3_NUMBER);
|
nvicDisableVector(STM32_TIM3_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM3(FALSE);
|
rccDisableTIM3(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM4
|
#if STM32_ICU_USE_TIM4
|
||||||
if (&ICUD4 == icup) {
|
if (&ICUD4 == icup) {
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM4_NUMBER);
|
nvicDisableVector(STM32_TIM4_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM4(FALSE);
|
rccDisableTIM4(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM5
|
#if STM32_ICU_USE_TIM5
|
||||||
if (&ICUD5 == icup) {
|
if (&ICUD5 == icup) {
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM5_NUMBER);
|
nvicDisableVector(STM32_TIM5_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM5(FALSE);
|
rccDisableTIM5(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM8
|
#if STM32_ICU_USE_TIM8
|
||||||
if (&ICUD8 == icup) {
|
if (&ICUD8 == icup) {
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
||||||
nvicDisableVector(STM32_TIM8_CC_NUMBER);
|
nvicDisableVector(STM32_TIM8_CC_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM8(FALSE);
|
rccDisableTIM8(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM9
|
#if STM32_ICU_USE_TIM9
|
||||||
if (&ICUD9 == icup) {
|
if (&ICUD9 == icup) {
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM9_NUMBER);
|
nvicDisableVector(STM32_TIM9_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM9(FALSE);
|
rccDisableTIM9(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -697,7 +717,7 @@ void icu_lld_stop_capture(ICUDriver *icup) {
|
||||||
*
|
*
|
||||||
* @param[in] icup pointer to the @p ICUDriver object
|
* @param[in] icup pointer to the @p ICUDriver object
|
||||||
*
|
*
|
||||||
* @api
|
* @notapi
|
||||||
*/
|
*/
|
||||||
void icu_lld_enable_notifications(ICUDriver *icup) {
|
void icu_lld_enable_notifications(ICUDriver *icup) {
|
||||||
uint32_t dier = icup->tim->DIER;
|
uint32_t dier = icup->tim->DIER;
|
||||||
|
@ -743,7 +763,7 @@ void icu_lld_enable_notifications(ICUDriver *icup) {
|
||||||
*
|
*
|
||||||
* @param[in] icup pointer to the @p ICUDriver object
|
* @param[in] icup pointer to the @p ICUDriver object
|
||||||
*
|
*
|
||||||
* @api
|
* @notapi
|
||||||
*/
|
*/
|
||||||
void icu_lld_disable_notifications(ICUDriver *icup) {
|
void icu_lld_disable_notifications(ICUDriver *icup) {
|
||||||
|
|
||||||
|
@ -751,6 +771,35 @@ void icu_lld_disable_notifications(ICUDriver *icup) {
|
||||||
icup->tim->DIER &= ~STM32_TIM_DIER_IRQ_MASK;
|
icup->tim->DIER &= ~STM32_TIM_DIER_IRQ_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Shared IRQ handler.
|
||||||
|
*
|
||||||
|
* @param[in] icup pointer to the @p ICUDriver object
|
||||||
|
*
|
||||||
|
* @notapi
|
||||||
|
*/
|
||||||
|
void icu_lld_serve_interrupt(ICUDriver *icup) {
|
||||||
|
uint32_t sr;
|
||||||
|
|
||||||
|
sr = icup->tim->SR;
|
||||||
|
sr &= icup->tim->DIER & STM32_TIM_DIER_IRQ_MASK;
|
||||||
|
icup->tim->SR = ~sr;
|
||||||
|
if (icup->config->channel == ICU_CHANNEL_1) {
|
||||||
|
if ((sr & STM32_TIM_SR_CC2IF) != 0)
|
||||||
|
_icu_isr_invoke_width_cb(icup);
|
||||||
|
if ((sr & STM32_TIM_SR_CC1IF) != 0)
|
||||||
|
_icu_isr_invoke_period_cb(icup);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ((sr & STM32_TIM_SR_CC1IF) != 0)
|
||||||
|
_icu_isr_invoke_width_cb(icup);
|
||||||
|
if ((sr & STM32_TIM_SR_CC2IF) != 0)
|
||||||
|
_icu_isr_invoke_period_cb(icup);
|
||||||
|
}
|
||||||
|
if ((sr & STM32_TIM_SR_UIF) != 0)
|
||||||
|
_icu_isr_invoke_overflow_cb(icup);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* HAL_USE_ICU */
|
#endif /* HAL_USE_ICU */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -251,37 +251,37 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* IRQ priority checks.*/
|
/* IRQ priority checks.*/
|
||||||
#if STM32_ICU_USE_TIM1 && \
|
#if STM32_ICU_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM1_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM1_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM1"
|
#error "Invalid IRQ priority assigned to TIM1"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM2 && \
|
#if STM32_ICU_USE_TIM2 && !defined(STM32_TIM2_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM2_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM2_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM2"
|
#error "Invalid IRQ priority assigned to TIM2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM3 && \
|
#if STM32_ICU_USE_TIM3 && !defined(STM32_TIM3_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM3_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM3_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM3"
|
#error "Invalid IRQ priority assigned to TIM3"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM4 && \
|
#if STM32_ICU_USE_TIM4 && !defined(STM32_TIM4_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM4_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM4_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM4"
|
#error "Invalid IRQ priority assigned to TIM4"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM5 && \
|
#if STM32_ICU_USE_TIM5 && !defined(STM32_TIM5_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM5_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM5_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM5"
|
#error "Invalid IRQ priority assigned to TIM5"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM8 && \
|
#if STM32_ICU_USE_TIM8 && !defined(STM32_TIM8_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM8_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM8_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM8"
|
#error "Invalid IRQ priority assigned to TIM8"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ICU_USE_TIM9 && \
|
#if STM32_ICU_USE_TIM9 && !defined(STM32_TIM9_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM9_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_ICU_TIM9_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM9"
|
#error "Invalid IRQ priority assigned to TIM9"
|
||||||
#endif
|
#endif
|
||||||
|
@ -475,6 +475,7 @@ extern "C" {
|
||||||
void icu_lld_stop_capture(ICUDriver *icup);
|
void icu_lld_stop_capture(ICUDriver *icup);
|
||||||
void icu_lld_enable_notifications(ICUDriver *icup);
|
void icu_lld_enable_notifications(ICUDriver *icup);
|
||||||
void icu_lld_disable_notifications(ICUDriver *icup);
|
void icu_lld_disable_notifications(ICUDriver *icup);
|
||||||
|
void icu_lld_serve_interrupt(ICUDriver *icup);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -98,44 +98,12 @@ PWMDriver PWMD9;
|
||||||
/* Driver local functions. */
|
/* Driver local functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM2 || STM32_PWM_USE_TIM3 || STM32_PWM_USE_TIM4 || \
|
|
||||||
STM32_PWM_USE_TIM5 || STM32_PWM_USE_TIM9 || defined(__DOXYGEN__)
|
|
||||||
/**
|
|
||||||
* @brief Common TIM2...TIM5,TIM9 IRQ handler.
|
|
||||||
* @note It is assumed that the various sources are only activated if the
|
|
||||||
* associated callback pointer is not equal to @p NULL in order to not
|
|
||||||
* perform an extra check in a potentially critical interrupt handler.
|
|
||||||
*
|
|
||||||
* @param[in] pwmp pointer to a @p PWMDriver object
|
|
||||||
*/
|
|
||||||
static void pwm_lld_serve_interrupt(PWMDriver *pwmp) {
|
|
||||||
uint32_t sr;
|
|
||||||
|
|
||||||
sr = pwmp->tim->SR;
|
|
||||||
sr &= pwmp->tim->DIER & STM32_TIM_DIER_IRQ_MASK;
|
|
||||||
pwmp->tim->SR = ~sr;
|
|
||||||
if (((sr & STM32_TIM_SR_CC1IF) != 0) &&
|
|
||||||
(pwmp->config->channels[0].callback != NULL))
|
|
||||||
pwmp->config->channels[0].callback(pwmp);
|
|
||||||
if (((sr & STM32_TIM_SR_CC2IF) != 0) &&
|
|
||||||
(pwmp->config->channels[1].callback != NULL))
|
|
||||||
pwmp->config->channels[1].callback(pwmp);
|
|
||||||
if (((sr & STM32_TIM_SR_CC3IF) != 0) &&
|
|
||||||
(pwmp->config->channels[2].callback != NULL))
|
|
||||||
pwmp->config->channels[2].callback(pwmp);
|
|
||||||
if (((sr & STM32_TIM_SR_CC4IF) != 0) &&
|
|
||||||
(pwmp->config->channels[3].callback != NULL))
|
|
||||||
pwmp->config->channels[3].callback(pwmp);
|
|
||||||
if (((sr & STM32_TIM_SR_UIF) != 0) && (pwmp->config->callback != NULL))
|
|
||||||
pwmp->config->callback(pwmp);
|
|
||||||
}
|
|
||||||
#endif /* STM32_PWM_USE_TIM2 || ... || STM32_PWM_USE_TIM5 */
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver interrupt handlers. */
|
/* Driver interrupt handlers. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM1
|
#if STM32_PWM_USE_TIM1 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM1_UP_HANDLER)
|
#if !defined(STM32_TIM1_UP_HANDLER)
|
||||||
#error "STM32_TIM1_UP_HANDLER not defined"
|
#error "STM32_TIM1_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -151,9 +119,7 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
STM32_TIM1->SR = ~STM32_TIM_SR_UIF;
|
pwm_lld_serve_interrupt(&PWMD1);
|
||||||
if (PWMD1.config->callback != NULL)
|
|
||||||
PWMD1.config->callback(&PWMD1);
|
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
@ -170,33 +136,18 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) {
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) {
|
OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) {
|
||||||
uint32_t sr;
|
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
sr = STM32_TIM1->SR & STM32_TIM1->DIER & (STM32_TIM_DIER_CC1IE |
|
pwm_lld_serve_interrupt(&PWMD1);
|
||||||
STM32_TIM_DIER_CC2IE |
|
|
||||||
STM32_TIM_DIER_CC3IE |
|
|
||||||
STM32_TIM_DIER_CC4IE);
|
|
||||||
STM32_TIM1->SR = ~sr;
|
|
||||||
if (((sr & STM32_TIM_SR_CC1IF) != 0) &&
|
|
||||||
(PWMD1.config->channels[0].callback != NULL))
|
|
||||||
PWMD1.config->channels[0].callback(&PWMD1);
|
|
||||||
if (((sr & STM32_TIM_SR_CC2IF) != 0) &&
|
|
||||||
(PWMD1.config->channels[1].callback != NULL))
|
|
||||||
PWMD1.config->channels[1].callback(&PWMD1);
|
|
||||||
if (((sr & STM32_TIM_SR_CC3IF) != 0) &&
|
|
||||||
(PWMD1.config->channels[2].callback != NULL))
|
|
||||||
PWMD1.config->channels[2].callback(&PWMD1);
|
|
||||||
if (((sr & STM32_TIM_SR_CC4IF) != 0) &&
|
|
||||||
(PWMD1.config->channels[3].callback != NULL))
|
|
||||||
PWMD1.config->channels[3].callback(&PWMD1);
|
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM1_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM1 */
|
#endif /* STM32_PWM_USE_TIM1 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM2
|
#if STM32_PWM_USE_TIM2 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM2_HANDLER)
|
#if !defined(STM32_TIM2_HANDLER)
|
||||||
#error "STM32_TIM2_HANDLER not defined"
|
#error "STM32_TIM2_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -213,9 +164,11 @@ OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM2_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM2 */
|
#endif /* STM32_PWM_USE_TIM2 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM3
|
#if STM32_PWM_USE_TIM3 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM3_HANDLER)
|
#if !defined(STM32_TIM3_HANDLER)
|
||||||
#error "STM32_TIM3_HANDLER not defined"
|
#error "STM32_TIM3_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -232,9 +185,11 @@ OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM3_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM3 */
|
#endif /* STM32_PWM_USE_TIM3 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM4
|
#if STM32_PWM_USE_TIM4 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM4_HANDLER)
|
#if !defined(STM32_TIM4_HANDLER)
|
||||||
#error "STM32_TIM4_HANDLER not defined"
|
#error "STM32_TIM4_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -251,9 +206,11 @@ OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM4_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM4 */
|
#endif /* STM32_PWM_USE_TIM4 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM5
|
#if STM32_PWM_USE_TIM5 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM5_HANDLER)
|
#if !defined(STM32_TIM5_HANDLER)
|
||||||
#error "STM32_TIM5_HANDLER not defined"
|
#error "STM32_TIM5_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -270,9 +227,11 @@ OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM5_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM5 */
|
#endif /* STM32_PWM_USE_TIM5 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM8
|
#if STM32_PWM_USE_TIM8 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM8_UP_HANDLER)
|
#if !defined(STM32_TIM8_UP_HANDLER)
|
||||||
#error "STM32_TIM8_UP_HANDLER not defined"
|
#error "STM32_TIM8_UP_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -288,9 +247,7 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
STM32_TIM8->SR = ~TIM_SR_UIF;
|
pwm_lld_serve_interrupt(&PWMD8);
|
||||||
if (PWMD8.config->callback != NULL)
|
|
||||||
PWMD8.config->callback(&PWMD8);
|
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
@ -307,33 +264,18 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) {
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) {
|
OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) {
|
||||||
uint32_t sr;
|
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
sr = STM32_TIM8->SR & STM32_TIM8->DIER & (STM32_TIM_DIER_CC1IE |
|
pwm_lld_serve_interrupt(&PWMD8);
|
||||||
STM32_TIM_DIER_CC2IE |
|
|
||||||
STM32_TIM_DIER_CC3IE |
|
|
||||||
STM32_TIM_DIER_CC4IE);
|
|
||||||
STM32_TIM8->SR = ~sr;
|
|
||||||
if (((sr & STM32_TIM_SR_CC1IF) != 0) &&
|
|
||||||
(PWMD8.config->channels[0].callback != NULL))
|
|
||||||
PWMD8.config->channels[0].callback(&PWMD8);
|
|
||||||
if (((sr & STM32_TIM_SR_CC2IF) != 0) &&
|
|
||||||
(PWMD8.config->channels[1].callback != NULL))
|
|
||||||
PWMD8.config->channels[1].callback(&PWMD8);
|
|
||||||
if (((sr & STM32_TIM_SR_CC3IF) != 0) &&
|
|
||||||
(PWMD8.config->channels[2].callback != NULL))
|
|
||||||
PWMD8.config->channels[2].callback(&PWMD8);
|
|
||||||
if (((sr & STM32_TIM_SR_CC4IF) != 0) &&
|
|
||||||
(PWMD8.config->channels[3].callback != NULL))
|
|
||||||
PWMD8.config->channels[3].callback(&PWMD8);
|
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM8_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM8 */
|
#endif /* STM32_PWM_USE_TIM8 */
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM9
|
#if STM32_PWM_USE_TIM9 || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
#if !defined(STM32_TIM9_HANDLER)
|
#if !defined(STM32_TIM9_HANDLER)
|
||||||
#error "STM32_TIM9_HANDLER not defined"
|
#error "STM32_TIM9_HANDLER not defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -350,6 +292,7 @@ OSAL_IRQ_HANDLER(STM32_TIM9_HANDLER) {
|
||||||
|
|
||||||
OSAL_IRQ_EPILOGUE();
|
OSAL_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
#endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */
|
||||||
#endif /* STM32_PWM_USE_TIM9 */
|
#endif /* STM32_PWM_USE_TIM9 */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -432,8 +375,10 @@ void pwm_lld_start(PWMDriver *pwmp) {
|
||||||
if (&PWMD1 == pwmp) {
|
if (&PWMD1 == pwmp) {
|
||||||
rccEnableTIM1(FALSE);
|
rccEnableTIM1(FALSE);
|
||||||
rccResetTIM1();
|
rccResetTIM1();
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_PWM_TIM1_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_PWM_TIM1_IRQ_PRIORITY);
|
||||||
nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_PWM_TIM1_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_PWM_TIM1_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM1CLK)
|
#if defined(STM32_TIM1CLK)
|
||||||
pwmp->clock = STM32_TIM1CLK;
|
pwmp->clock = STM32_TIM1CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -441,28 +386,49 @@ void pwm_lld_start(PWMDriver *pwmp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM2
|
#if STM32_PWM_USE_TIM2
|
||||||
if (&PWMD2 == pwmp) {
|
if (&PWMD2 == pwmp) {
|
||||||
rccEnableTIM2(FALSE);
|
rccEnableTIM2(FALSE);
|
||||||
rccResetTIM2();
|
rccResetTIM2();
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM2_NUMBER, STM32_PWM_TIM2_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM2_NUMBER, STM32_PWM_TIM2_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM2CLK)
|
||||||
|
pwmp->clock = STM32_TIM2CLK;
|
||||||
|
#else
|
||||||
pwmp->clock = STM32_TIMCLK1;
|
pwmp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM3
|
#if STM32_PWM_USE_TIM3
|
||||||
if (&PWMD3 == pwmp) {
|
if (&PWMD3 == pwmp) {
|
||||||
rccEnableTIM3(FALSE);
|
rccEnableTIM3(FALSE);
|
||||||
rccResetTIM3();
|
rccResetTIM3();
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM3_NUMBER, STM32_PWM_TIM3_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM3_NUMBER, STM32_PWM_TIM3_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM3CLK)
|
||||||
|
pwmp->clock = STM32_TIM3CLK;
|
||||||
|
#else
|
||||||
pwmp->clock = STM32_TIMCLK1;
|
pwmp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM4
|
#if STM32_PWM_USE_TIM4
|
||||||
if (&PWMD4 == pwmp) {
|
if (&PWMD4 == pwmp) {
|
||||||
rccEnableTIM4(FALSE);
|
rccEnableTIM4(FALSE);
|
||||||
rccResetTIM4();
|
rccResetTIM4();
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM4_NUMBER, STM32_PWM_TIM4_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM4_NUMBER, STM32_PWM_TIM4_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM4CLK)
|
||||||
|
pwmp->clock = STM32_TIM4CLK;
|
||||||
|
#else
|
||||||
pwmp->clock = STM32_TIMCLK1;
|
pwmp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -470,16 +436,25 @@ void pwm_lld_start(PWMDriver *pwmp) {
|
||||||
if (&PWMD5 == pwmp) {
|
if (&PWMD5 == pwmp) {
|
||||||
rccEnableTIM5(FALSE);
|
rccEnableTIM5(FALSE);
|
||||||
rccResetTIM5();
|
rccResetTIM5();
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM5_NUMBER, STM32_PWM_TIM5_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM5_NUMBER, STM32_PWM_TIM5_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM5CLK)
|
||||||
|
pwmp->clock = STM32_TIM5CLK;
|
||||||
|
#else
|
||||||
pwmp->clock = STM32_TIMCLK1;
|
pwmp->clock = STM32_TIMCLK1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM8
|
#if STM32_PWM_USE_TIM8
|
||||||
if (&PWMD8 == pwmp) {
|
if (&PWMD8 == pwmp) {
|
||||||
rccEnableTIM8(FALSE);
|
rccEnableTIM8(FALSE);
|
||||||
rccResetTIM8();
|
rccResetTIM8();
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_PWM_TIM8_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_PWM_TIM8_IRQ_PRIORITY);
|
||||||
nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_PWM_TIM8_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_PWM_TIM8_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
#if defined(STM32_TIM8CLK)
|
#if defined(STM32_TIM8CLK)
|
||||||
pwmp->clock = STM32_TIM8CLK;
|
pwmp->clock = STM32_TIM8CLK;
|
||||||
#else
|
#else
|
||||||
|
@ -487,12 +462,19 @@ void pwm_lld_start(PWMDriver *pwmp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM9
|
#if STM32_PWM_USE_TIM9
|
||||||
if (&PWMD9 == pwmp) {
|
if (&PWMD9 == pwmp) {
|
||||||
rccEnableTIM9(FALSE);
|
rccEnableTIM9(FALSE);
|
||||||
rccResetTIM9();
|
rccResetTIM9();
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicEnableVector(STM32_TIM9_NUMBER, STM32_PWM_TIM9_IRQ_PRIORITY);
|
nvicEnableVector(STM32_TIM9_NUMBER, STM32_PWM_TIM9_IRQ_PRIORITY);
|
||||||
|
#endif
|
||||||
|
#if defined(STM32_TIM9CLK)
|
||||||
|
pwmp->clock = STM32_TIM9CLK;
|
||||||
|
#else
|
||||||
pwmp->clock = STM32_TIMCLK2;
|
pwmp->clock = STM32_TIMCLK2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -640,45 +622,65 @@ void pwm_lld_stop(PWMDriver *pwmp) {
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM1
|
#if STM32_PWM_USE_TIM1
|
||||||
if (&PWMD1 == pwmp) {
|
if (&PWMD1 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM1_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
nvicDisableVector(STM32_TIM1_UP_NUMBER);
|
||||||
nvicDisableVector(STM32_TIM1_CC_NUMBER);
|
nvicDisableVector(STM32_TIM1_CC_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM1(FALSE);
|
rccDisableTIM1(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM2
|
#if STM32_PWM_USE_TIM2
|
||||||
if (&PWMD2 == pwmp) {
|
if (&PWMD2 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM2_NUMBER);
|
nvicDisableVector(STM32_TIM2_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM2(FALSE);
|
rccDisableTIM2(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM3
|
#if STM32_PWM_USE_TIM3
|
||||||
if (&PWMD3 == pwmp) {
|
if (&PWMD3 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM3_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM3_NUMBER);
|
nvicDisableVector(STM32_TIM3_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM3(FALSE);
|
rccDisableTIM3(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM4
|
#if STM32_PWM_USE_TIM4
|
||||||
if (&PWMD4 == pwmp) {
|
if (&PWMD4 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM4_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM4_NUMBER);
|
nvicDisableVector(STM32_TIM4_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM4(FALSE);
|
rccDisableTIM4(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM5
|
#if STM32_PWM_USE_TIM5
|
||||||
if (&PWMD5 == pwmp) {
|
if (&PWMD5 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM5_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM5_NUMBER);
|
nvicDisableVector(STM32_TIM5_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM5(FALSE);
|
rccDisableTIM5(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM8
|
#if STM32_PWM_USE_TIM8
|
||||||
if (&PWMD8 == pwmp) {
|
if (&PWMD8 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM8_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
nvicDisableVector(STM32_TIM8_UP_NUMBER);
|
||||||
nvicDisableVector(STM32_TIM8_CC_NUMBER);
|
nvicDisableVector(STM32_TIM8_CC_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM8(FALSE);
|
rccDisableTIM8(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM9
|
#if STM32_PWM_USE_TIM9
|
||||||
if (&PWMD9 == pwmp) {
|
if (&PWMD9 == pwmp) {
|
||||||
|
#if !defined(STM32_TIM9_SUPPRESS_ISR)
|
||||||
nvicDisableVector(STM32_TIM9_NUMBER);
|
nvicDisableVector(STM32_TIM9_NUMBER);
|
||||||
|
#endif
|
||||||
rccDisableTIM9(FALSE);
|
rccDisableTIM9(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -819,6 +821,38 @@ void pwm_lld_disable_channel_notification(PWMDriver *pwmp,
|
||||||
pwmp->tim->DIER &= ~(2 << channel);
|
pwmp->tim->DIER &= ~(2 << channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Common TIM2...TIM5,TIM9 IRQ handler.
|
||||||
|
* @note It is assumed that the various sources are only activated if the
|
||||||
|
* associated callback pointer is not equal to @p NULL in order to not
|
||||||
|
* perform an extra check in a potentially critical interrupt handler.
|
||||||
|
*
|
||||||
|
* @param[in] pwmp pointer to a @p PWMDriver object
|
||||||
|
*
|
||||||
|
* @notapi
|
||||||
|
*/
|
||||||
|
void pwm_lld_serve_interrupt(PWMDriver *pwmp) {
|
||||||
|
uint32_t sr;
|
||||||
|
|
||||||
|
sr = pwmp->tim->SR;
|
||||||
|
sr &= pwmp->tim->DIER & STM32_TIM_DIER_IRQ_MASK;
|
||||||
|
pwmp->tim->SR = ~sr;
|
||||||
|
if (((sr & STM32_TIM_SR_CC1IF) != 0) &&
|
||||||
|
(pwmp->config->channels[0].callback != NULL))
|
||||||
|
pwmp->config->channels[0].callback(pwmp);
|
||||||
|
if (((sr & STM32_TIM_SR_CC2IF) != 0) &&
|
||||||
|
(pwmp->config->channels[1].callback != NULL))
|
||||||
|
pwmp->config->channels[1].callback(pwmp);
|
||||||
|
if (((sr & STM32_TIM_SR_CC3IF) != 0) &&
|
||||||
|
(pwmp->config->channels[2].callback != NULL))
|
||||||
|
pwmp->config->channels[2].callback(pwmp);
|
||||||
|
if (((sr & STM32_TIM_SR_CC4IF) != 0) &&
|
||||||
|
(pwmp->config->channels[3].callback != NULL))
|
||||||
|
pwmp->config->channels[3].callback(pwmp);
|
||||||
|
if (((sr & STM32_TIM_SR_UIF) != 0) && (pwmp->config->callback != NULL))
|
||||||
|
pwmp->config->callback(pwmp);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* HAL_USE_PWM */
|
#endif /* HAL_USE_PWM */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -306,37 +306,37 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* IRQ priority checks.*/
|
/* IRQ priority checks.*/
|
||||||
#if STM32_PWM_USE_TIM1 && \
|
#if STM32_PWM_USE_TIM1 && !defined(STM32_TIM1_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM1_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM1_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM1"
|
#error "Invalid IRQ priority assigned to TIM1"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM2 && \
|
#if STM32_PWM_USE_TIM2 && !defined(STM32_TIM2_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM2_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM2_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM2"
|
#error "Invalid IRQ priority assigned to TIM2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM3 && \
|
#if STM32_PWM_USE_TIM3 && !defined(STM32_TIM3_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM3_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM3_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM3"
|
#error "Invalid IRQ priority assigned to TIM3"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM4 && \
|
#if STM32_PWM_USE_TIM4 && !defined(STM32_TIM4_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM4_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM4_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM4"
|
#error "Invalid IRQ priority assigned to TIM4"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM5 && \
|
#if STM32_PWM_USE_TIM5 && !defined(STM32_TIM5_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM5_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM5_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM5"
|
#error "Invalid IRQ priority assigned to TIM5"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM8 && \
|
#if STM32_PWM_USE_TIM8 && !defined(STM32_TIM8_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM8_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM8_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM8"
|
#error "Invalid IRQ priority assigned to TIM8"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_PWM_USE_TIM9 && \
|
#if STM32_PWM_USE_TIM9 && !defined(STM32_TIM9_SUPPRESS_ISR) && \
|
||||||
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM9_IRQ_PRIORITY)
|
!OSAL_IRQ_IS_VALID_PRIORITY(STM32_PWM_TIM9_IRQ_PRIORITY)
|
||||||
#error "Invalid IRQ priority assigned to TIM9"
|
#error "Invalid IRQ priority assigned to TIM9"
|
||||||
#endif
|
#endif
|
||||||
|
@ -538,6 +538,7 @@ extern "C" {
|
||||||
pwmchannel_t channel);
|
pwmchannel_t channel);
|
||||||
void pwm_lld_disable_channel_notification(PWMDriver *pwmp,
|
void pwm_lld_disable_channel_notification(PWMDriver *pwmp,
|
||||||
pwmchannel_t channel);
|
pwmchannel_t channel);
|
||||||
|
void pwm_lld_serve_interrupt(PWMDriver *pwmp);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -47,6 +47,46 @@
|
||||||
/* Driver interrupt handlers. */
|
/* Driver interrupt handlers. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
#if defined(STM32_TIM2_IS_USED) || defined(__DOXYGEN__)
|
||||||
|
#if !defined(STM32_TIM2_SUPPRESS_ISR)
|
||||||
|
#if !defined(STM32_TIM2_HANDLER)
|
||||||
|
#error "STM32_TIM2_HANDLER not defined"
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* @brief TIM2 interrupt handler.
|
||||||
|
*
|
||||||
|
* @isr
|
||||||
|
*/
|
||||||
|
OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) {
|
||||||
|
uint32_t sr;
|
||||||
|
|
||||||
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
sr = TIM2->SR;
|
||||||
|
sr &= TIM2->DIER & STM32_TIM_DIER_IRQ_MASK;
|
||||||
|
TIM2->SR = ~sr;
|
||||||
|
|
||||||
|
#if STM32_GPT_USE_TIM2
|
||||||
|
gpt_lld_serve_interrupt(&GPTD2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_ICU_USE_TIM2
|
||||||
|
icu_lld_serve_interrupt(&ICUD2, sr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_PWM_USE_TIM2
|
||||||
|
gpt_lld_serve_interrupt(&PWMD2, sr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_GPT_USE_TIM2
|
||||||
|
st_lld_serve_interrupt();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
OSAL_IRQ_EPILOGUE();
|
||||||
|
}
|
||||||
|
#endif /* !defined(STM32_TIM2_SUPPRESS_ISR) */
|
||||||
|
#endif /* defined(STM32_TIM2_IS_USED) */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver exported functions. */
|
/* Driver exported functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
TIM units IRQ collisions mapping.
|
||||||
|
|
||||||
|
1B 1UP 1TC 1CC 2 3 4 5 6 7 8B 8UP 8TC 8CC 9 10 11 12 13 14 15 16 17 18 19 20 21 22 LP1 LP2
|
||||||
|
F0xx 1---1 2---2 * * * * * * * *
|
||||||
|
F030 1---1 2---2 * * * * *
|
||||||
|
F1xx 1 2 3 * * * * * * * 1 2 3
|
||||||
|
F100 1 2 3 * * * * * * * 1 2 3
|
||||||
|
F3xx 1 2 3 * * * * * * * * * * 1 2 3
|
||||||
|
F37x * * * * * * * * * * * * * *
|
||||||
|
F4xx 1 2 3 * * * * * * * 4 5 6 * 1 2 3 4 5 6
|
||||||
|
F7xx 1 2 3 * * * * * * * 4 5 6 * 1 2 3 4 5 6 *
|
||||||
|
L0xx * * * * *
|
||||||
|
L1xx * * * * * * * * *
|
||||||
|
L4xx 1 2 3 * * * * * * * * * * * 1 2 3 * *
|
|
@ -73,6 +73,12 @@
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
|
|
||||||
*** 3.1.0 ***
|
*** 3.1.0 ***
|
||||||
|
- HAL: STM32 GPT, ICU and PWM driver enhancements. Now it is possible to
|
||||||
|
suppress default ISRs by defining STM32_TIMx_SUPPRESS_ISR.
|
||||||
|
The application is now able to define custom handlers if required
|
||||||
|
or simply save space if the driver callbacks are not used.
|
||||||
|
Now the functions xxx_lld_serve_interrupts() have global scope, this
|
||||||
|
way custom ISRs can call them from outside the driver module.
|
||||||
- HAL: Added TIM units use cross-check in STM32 GPT, ICU, PWM and ST drivers,
|
- HAL: Added TIM units use cross-check in STM32 GPT, ICU, PWM and ST drivers,
|
||||||
now use collisions are explicitly reported.
|
now use collisions are explicitly reported.
|
||||||
- NIL: Added polled delays required to fix bug #629.
|
- NIL: Added polled delays required to fix bug #629.
|
||||||
|
|
Loading…
Reference in New Issue