1 /* 2 * Copyright (c) 2021 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef HPM_BUTN_DRV_H 9 #define HPM_BUTN_DRV_H 10 11 #include "hpm_common.h" 12 #include "hpm_butn_regs.h" 13 14 /** 15 * 16 * @brief BUTN driver APIs 17 * @defgroup butn_interface BUTN driver APIs 18 * @ingroup io_interfaces 19 * @{ 20 * 21 */ 22 23 #define BUTN_EVENT_POWER_PRESSED (BUTN_BTN_STATUS_PBTN_SET(1)) 24 #define BUTN_EVENT_POWER_PRESSED_HOLD_0_5_S (BUTN_BTN_STATUS_PBTN_SET(2)) 25 #define BUTN_EVENT_POWER_PRESSED_HOLD_8_S (BUTN_BTN_STATUS_PBTN_SET(4)) 26 #define BUTN_EVENT_POWER_PRESSED_HOLD_16_S (BUTN_BTN_STATUS_PBTN_SET(8)) 27 28 #define BUTN_EVENT_WAKE_PRESSED (BUTN_BTN_STATUS_WBTN_SET(1)) 29 #define BUTN_EVENT_WAKE_PRESSED_HOLD_0_5_S (BUTN_BTN_STATUS_WBTN_SET(2)) 30 #define BUTN_EVENT_WAKE_PRESSED_HOLD_8_S (BUTN_BTN_STATUS_WBTN_SET(4)) 31 #define BUTN_EVENT_WAKE_PRESSED_HOLD_16_S (BUTN_BTN_STATUS_WBTN_SET(8)) 32 33 #define BUTN_EVENT_WAKE_POWER_PRESSED (BUTN_BTN_STATUS_DBTN_SET(1)) 34 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_0_5_S (BUTN_BTN_STATUS_DBTN_SET(2)) 35 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_8_S (BUTN_BTN_STATUS_DBTN_SET(4)) 36 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_16_S (BUTN_BTN_STATUS_DBTN_SET(8)) 37 38 #define BUTN_EVENT_POWER_CLICKED (BUTN_BTN_STATUS_PCLICK_SET(1)) 39 #define BUTN_EVENT_POWER_CLICKED_X2 (BUTN_BTN_STATUS_PCLICK_SET(2)) 40 #define BUTN_EVENT_POWER_CLICKED_X3 (BUTN_BTN_STATUS_PCLICK_SET(4)) 41 42 #define BUTN_EVENT_POWER_CLICKED_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(1)) 43 #define BUTN_EVENT_POWER_CLICKED_X2_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(2)) 44 #define BUTN_EVENT_POWER_CLICKED_X3_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(4)) 45 46 #define BUTN_EVENT_WAKE_CLICKED (BUTN_BTN_STATUS_WCLICK_SET(1)) 47 #define BUTN_EVENT_WAKE_CLICKED_X2 (BUTN_BTN_STATUS_WCLICK_SET(2)) 48 #define BUTN_EVENT_WAKE_CLICKED_X3 (BUTN_BTN_STATUS_WCLICK_SET(4)) 49 50 #define BUTN_EVENT_WAKE_CLICKED_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(1)) 51 #define BUTN_EVENT_WAKE_CLICKED_X2_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(2)) 52 #define BUTN_EVENT_WAKE_CLICKED_X3_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(4)) 53 54 #ifdef __cplusplus 55 extern "C" { 56 #endif 57 58 /** 59 * @brief Get status 60 * 61 * @param[in] ptr BUTN base address 62 * @retval status mask in 32 bits, please refer to BUTN_EVENT_* macros 63 */ butn_get_status(BUTN_Type * ptr)64static inline uint32_t butn_get_status(BUTN_Type *ptr) 65 { 66 return ptr->BTN_STATUS; 67 } 68 69 /** 70 * @brief Enable interrupt with mask 71 * 72 * @param[in] ptr BUTN base address 73 * @param[in] mask Mask of interrupts to be enabled, please refer to BUTN_EVENT_* macros 74 */ butn_enable_irq(BUTN_Type * ptr,uint32_t mask)75static inline void butn_enable_irq(BUTN_Type *ptr, uint32_t mask) 76 { 77 ptr->BTN_IRQ_MASK |= mask; 78 } 79 80 /** 81 * @brief Disable interrupt with mask 82 * 83 * @param[in] ptr BUTN base address 84 * @param[in] mask Mask of interrupts to be disabled, please refer to BUTN_EVENT_* macros 85 */ butn_disable_irq(BUTN_Type * ptr,uint32_t mask)86static inline void butn_disable_irq(BUTN_Type *ptr, uint32_t mask) 87 { 88 ptr->BTN_IRQ_MASK &= ~mask; 89 } 90 91 /** 92 * @brief Set intense of PLED and RLED/WLED 93 * 94 * @param[in] ptr BUTN base address 95 * @param[in] intense Intense value (0~15) 96 */ butn_set_intense(BUTN_Type * ptr,uint8_t intense)97static inline void butn_set_intense(BUTN_Type *ptr, uint8_t intense) 98 { 99 ptr->LED_INTENSE = BUTN_LED_INTENSE_PLED_SET(intense) 100 | BUTN_LED_INTENSE_RLED_SET(intense); 101 } 102 103 #ifdef __cplusplus 104 } 105 #endif 106 /** 107 * @} 108 */ 109 #endif /* HPM_BUTN_DRV_H */ 110