From d671671f159cb6ba8c8ded9c9878cc33680bb729 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 1 Sep 2017 08:31:28 +0000 Subject: Callbacks handling added to STM32 GPIOv2, added F3 support to PAL callbacks demo. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10517 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h | 55 ++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) (limited to 'os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h') diff --git a/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h b/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h index 80b1a8fbc..ba90ccafd 100644 --- a/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h +++ b/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.h @@ -86,12 +86,12 @@ * @{ */ /** - * @brief This mode is implemented as input. + * @brief Implemented as input. */ #define PAL_MODE_RESET PAL_STM32_MODE_INPUT /** - * @brief This mode is implemented as input with pull-up. + * @brief Implemented as input with pull-up. */ #define PAL_MODE_UNCONNECTED PAL_MODE_INPUT_PULLUP @@ -233,7 +233,7 @@ typedef struct { uint16_t clear; } H; } BSRR; - volatile uint32_t LCKR; + volatile uint32_t LOCKR; volatile uint32_t AFRL; volatile uint32_t AFRH; volatile uint32_t BRR; @@ -329,13 +329,23 @@ typedef uint32_t iomode_t; typedef uint32_t ioline_t; /** - * @brief Port Identifier. + * @brief Type of an event mode. + */ +typedef uint32_t ioeventmode_t; + +/** + * @brief Type of a port Identifier. * @details This type can be a scalar or some kind of pointer, do not make * any assumption about it, use the provided macros when populating * variables of this type. */ typedef stm32_gpio_t * ioportid_t; +/** + * @brief Type of an pad identifier. + */ +typedef uint32_t iopadid_t; + /*===========================================================================*/ /* I/O Ports Identifiers. */ /* The low level driver wraps the definitions already present in the STM32 */ @@ -539,7 +549,38 @@ typedef stm32_gpio_t * ioportid_t; */ #define pal_lld_writepad(port, pad, bit) pal_lld_writegroup(port, 1, pad, bit) +/** + * @brief Pad event enable. + * @details This function programs an event callback in the specified mode. + * @note Programming an unknown or unsupported mode is silently ignored. + * + * @param[in] port port identifier + * @param[in] pad pad number within the port + * @param[in] mode pad event mode + * @param[in] callback event callback function + * @param[in] arg callback argument + * + * @notapi + */ +#define pal_lld_enablepadevent(port, pad, mode, callback, arg) \ + _pal_lld_enablepadevent(port, pad, mode, callback, arg) + +/** + * @brief Pad event disable. + * @details This function disables previously programmed event callbacks. + * + * @param[in] port port identifier + * @param[in] pad pad number within the port + * + * @notapi + */ +#define pal_lld_disablepadevent(port, pad) \ + _pal_lld_disablepadevent(port, pad) + +#if !defined(__DOXYGEN__) extern const PALConfig pal_default_config; +extern palevent_t _pal_events[16]; +#endif #ifdef __cplusplus extern "C" { @@ -548,6 +589,12 @@ extern "C" { void _pal_lld_setgroupmode(ioportid_t port, ioportmask_t mask, iomode_t mode); + void _pal_lld_enablepadevent(ioportid_t port, + iopadid_t pad, + ioeventmode_t mode, + palcallback_t callback, + void *arg); + void _pal_lld_disablepadevent(ioportid_t port, iopadid_t pad); #ifdef __cplusplus } #endif -- cgit v1.2.3