From 034fc01cd81b31164f03838b2b400efd530d2563 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Nov 2019 17:39:30 +0100 Subject: [PATCH 1/2] [MP1] Add missing EXTI IRQHandler Signed-off-by: Frederic Pillon --- cores/arduino/stm32/interrupt.cpp | 116 +++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/cores/arduino/stm32/interrupt.cpp b/cores/arduino/stm32/interrupt.cpp index 2b8368a419..f1d5dce669 100644 --- a/cores/arduino/stm32/interrupt.cpp +++ b/cores/arduino/stm32/interrupt.cpp @@ -236,7 +236,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) } } -#if defined (STM32G0xx) +#if defined (STM32G0xx) || defined (STM32MP1xx) /** * @brief EXTI line detection callback. * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. @@ -359,7 +359,7 @@ void EXTI4_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); } - +#if !defined(STM32MP1xx) /** * @brief This function handles external line 5 to 9 interrupt request. * @param None @@ -385,7 +385,119 @@ void EXTI15_10_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(pin); } } +#else /* STM32MP1xx */ + +/** + * @brief This function handles external line 5 interrupt request. + * @param None + * @retval None + */ +void EXTI5_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5); +} + +/** + * @brief This function handles external line 6 interrupt request. + * @param None + * @retval None + */ +void EXTI6_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6); +} + +/** + * @brief This function handles external line 7 interrupt request. + * @param None + * @retval None + */ +void EXTI7_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); +} + +/** + * @brief This function handles external line 8 interrupt request. + * @param None + * @retval None + */ +void EXTI8_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8); +} + +/** + * @brief This function handles external line 9 interrupt request. + * @param None + * @retval None + */ +void EXTI9_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9); +} + +/** + * @brief This function handles external line 10 interrupt request. + * @param None + * @retval None + */ +void EXTI10_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10); +} + +/** + * @brief This function handles external line 11 interrupt request. + * @param None + * @retval None + */ +void EXTI11_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11); +} + +/** + * @brief This function handles external line 12 interrupt request. + * @param None + * @retval None + */ +void EXTI12_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12); +} + +/** + * @brief This function handles external line 13 interrupt request. + * @param None + * @retval None + */ +void EXTI13_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13); +} + +/** + * @brief This function handles external line 14 interrupt request. + * @param None + * @retval None + */ +void EXTI14_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14); +} + +/** + * @brief This function handles external line 15 interrupt request. + * @param None + * @retval None + */ +void EXTI15_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15); +} +#endif /* !STM32MP1xx */ #ifdef __cplusplus } #endif From a8f5311f08475616ba7e845ad3b52afca1a74c95 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Tue, 19 Nov 2019 17:46:27 +0100 Subject: [PATCH 2/2] [MP1] Fix EXTI GPIO init Signed-off-by: Frederic Pillon --- cores/arduino/stm32/interrupt.cpp | 12 +++++++++++- cores/arduino/stm32/lock_resource.h | 8 ++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cores/arduino/stm32/interrupt.cpp b/cores/arduino/stm32/interrupt.cpp index f1d5dce669..d80887d21d 100644 --- a/cores/arduino/stm32/interrupt.cpp +++ b/cores/arduino/stm32/interrupt.cpp @@ -36,7 +36,9 @@ ****************************************************************************** */ #include "interrupt.h" - +#if defined(STM32MP1xx) +#include "lock_resource.h" +#endif #if !defined(HAL_EXTI_MODULE_DISABLED) /* Private Types */ @@ -177,8 +179,16 @@ void stm32_interrupt_enable(GPIO_TypeDef *port, uint16_t pin, callback_function_ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; +#if defined(STM32MP1xx) + PERIPH_LOCK(port); +#endif + HAL_GPIO_Init(port, &GPIO_InitStruct); +#if defined(STM32MP1xx) + PERIPH_UNLOCK(port); +#endif + gpio_irq_conf[id].callback = callback; // Enable and set EXTI Interrupt diff --git a/cores/arduino/stm32/lock_resource.h b/cores/arduino/stm32/lock_resource.h index acb000c3ab..4b6a07afaf 100644 --- a/cores/arduino/stm32/lock_resource.h +++ b/cores/arduino/stm32/lock_resource.h @@ -23,6 +23,9 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32_def.h" +#ifdef __cplusplus +extern "C" { +#endif /* Exported types ------------------------------------------------------------*/ typedef enum { @@ -42,8 +45,9 @@ typedef enum { LockResource_Status_t Periph_Lock(void *Peripheral, uint32_t Timeout); void Periph_Unlock(void *Peripheral); - - +#ifdef __cplusplus +} // extern "C" +#endif #endif /* _LOCK_RESOURCE_H */